📚 IGCSE 计算机科学 (0478):学习笔记 - 数据库 (第九章)
欢迎来到数据库的世界!别担心,这不仅仅是关于巨大的服务器机房,而是关于如何让信息变得有用且井然有序。你可以把数据库想象成海量数据的终极数字归档系统,就像亚马逊上的所有产品详情,或者学校里所有学生的个人档案一样。
在本章中,我们将学习如何设计一个简单的数据库表,定义它所存储的数据类型,最重要的是,学习如何使用一种强大的语言——SQL (结构化查询语言),向数据库提出精明的询问并提取我们所需的特定信息。
9.1 & 9.2 数据库结构与数据类型
类比:数据库即电子表格
理解简单数据库最简单的方法是把它想象成一个高度组织化的电子表格(单一数据表)。
设想你有一个班级名册:
- 每一列标题(*比如姓名、年龄或成绩*)就是一个字段 (Field)。
- 每一行(*比如某一个学生的完整信息*)就是一个记录 (Record)。
- 整个表格就是数据表 (Table)(它构成了一个单表数据库)。
1. 定义单表数据库
当我们定义数据库结构时,我们是在列出所需的所有字段,并为存入其中的数据规划规则。
数据库的关键组成部分:
- 字段 (Field/Attributes): 这是为每个项目或人员存储的独立数据片段。
示例:学生ID (StudentID)、学生姓名 (StudentName)、出生日期 (DateOfBirth)。 - 记录 (Record/Tuples): 单个项目的一整套字段。
示例:某一个学生的一整行数据。 - 验证 (Validation): 设置规则以确保输入的数据合理且准确。
示例:确保“年龄”字段只接受 5 到 18 之间的数字。
2. 选择合适的基础数据类型
每个字段必须定义一种数据类型。这告诉数据库应期待什么样的信息,有助于节省空间并确保数据完整性(准确性)。
以下是你必须掌握的基本数据类型:
| 数据类型 | 存储内容 | 使用示例 |
|---|---|---|
| 整数 (Integer) | 整数(没有小数位)。 | 年龄、物品数量、产品代码。 |
| 实数 (Real) | 包含小数部分的数字。 | 价格、身高、平均分。 |
| 文本 / 字母数字 (Text / Alphanumeric) | 字母、数字或符号的任意组合(包括空格)。通常用于较长的条目。 | 姓名、地址、产品描述。 |
| 字符 (Character) | 单个字母、数字或符号。 | 性别('M' 或 'F')、等级('A', 'B', 'C')。 |
| 布尔值 (Boolean) | 只能为 TRUE(真)或 FALSE(假)的逻辑值(有时存储为 1 或 0,或 Yes 或 No)。 | 是否已付款、是否为在读学生。 |
| 日期/时间 (Date/Time) | 以特定格式存储的日期和/或时间。 | 注册日期、下单时间。 |
快速复习:选择正确的数据类型至关重要。如果你试图将文本“昂贵”放入一个实数字段中,数据库会阻止你!
9.3 主键 (Primary Key)
假设你们学校有两个学生恰好同名同姓,都叫 *Maria Khan*。学校的计算机系统怎么区分她们呢?
它会使用主键 (Primary Key)!
主键的目的
主键是一个字段(有时是多个字段的组合),它能够唯一标识表中的每一条记录。
- 唯一性 (Uniqueness): 没有两条记录可以拥有相同的主键值。
- 非空 (Not Null): 主键字段不能为空。
类比:你的护照号码或学号就是现实世界中的主键——即使你与他人重名,它也是你独一无二的标识。
确定合适的主键
当被要求建议主键时,请寻找那些能够确保唯一且每条记录都必须具备的字段。
良好的主键备选:
- ID 号码(*客户编号、订单编号、ISBN*)。这些通常由系统专门生成,以确保唯一性。
不良的主键备选(原因?):
- 姓名: 不唯一(两个人可以同名)。
- 地址: 不唯一(两个人可以住在同一栋房子里),且太长。
- 年龄: 绝对不唯一。
要点总结:主键是记录的“数字指纹”。它必须是唯一的且绝不能缺失。
9.4 结构化查询语言 (SQL)
SQL 是我们与关系数据库进行交流和操作的语言。你需要掌握如何阅读、理解和编写基本的单表 SQL 查询语句。
不用担心编程太复杂——SQL 使用的是简单、清晰的英语关键词!
基本 SQL 查询结构
几乎每一个查询都遵循这种结构:
SELECT [我想查看什么数据?]
FROM [数据存储在哪个表中?]
WHERE [记录必须满足什么条件?]
1. 数据检索 (SELECT 和 FROM)
SELECT 和 FROM 子句是每个查询的基础。
- SELECT *:意为“选择所有字段”。
- SELECT Field1, Field2:意为“仅选择这些特定字段”。
- FROM TableName:指定包含数据的表。
示例:显示“Students”表中的所有数据。
SELECT *
FROM Students;
示例:仅显示“Students”表中的姓名 (Name) 和年龄 (Age) 字段。
SELECT Name, Age
FROM Students;
2. 过滤记录 (WHERE)
WHERE 子句用于根据特定的标准或条件过滤(限制)返回的记录。
WHERE 中使用的关系运算符:
- = (等于)
- > (大于)
- < (小于)
- >= (大于等于)
- <= (小于等于)
- <> (不等于)
示例:查找所有 16 岁的学生。
SELECT *
FROM Students
WHERE Age = 16;
示例:查找所有价格高于 50.00 的产品。(注意:文本必须用单引号 ' ' 括起来)。
SELECT ProductName
FROM Products
WHERE Price > 50.00;
3. 组合条件 (AND, OR)
我们在 WHERE 子句中使用 AND 或 OR 来连接多个条件。
- AND: 两个条件必须同时为真,记录才会被包含。
- OR: 至少有一个条件为真,记录就会被包含。
示例 (AND):查找 16 岁且住在伦敦的学生。
SELECT Name
FROM Students
WHERE Age = 16 AND City = 'London';
示例 (OR):查找 15 岁或 17 岁的学生。
SELECT Name
FROM Students
WHERE Age = 15 OR Age = 17;
4. 排序结果 (ORDER BY)
ORDER BY 子句根据一个或多个字段对输出进行排序。
- ASC (升序):按 A 到 Z 或 1 到 10 排序(默认排序方式)。
- DESC (降序):按 Z 到 A 或 10 到 1 排序。
示例:按字母顺序 (A-Z) 列出所有学生姓名。
SELECT Name
FROM Students
ORDER BY Name ASC;
示例:按价格从高到低列出产品。
SELECT ProductName, Price
FROM Products
ORDER BY Price DESC;
5. 聚合函数 (SUM, COUNT)
这些函数对一组记录执行计算,并返回单个汇总值。
- COUNT(Field) 或 COUNT(*):计算符合条件的记录数量。
- SUM(Field):计算符合条件的数值字段的总和。
示例 (COUNT):Students 表中有多少条记录?
SELECT COUNT(*)
FROM Students;
示例 (SUM):所有库存物品的总价值是多少?
SELECT SUM(StockValue)
FROM Products;
★ 识别输出结果(考试核心技能)
在考试中,你必须具备查看数据库表和 SQL 查询语句,并准确说出该查询将输出哪些记录和字段的能力。
分步技巧:
- 检查 FROM 子句: 你在看哪张表?(通常题目会给出)。
- 应用 WHERE 子句: 逐行检查表格。哪些记录符合条件?(排除其他所有记录)。
- 应用 SELECT 子句: 在剩下的记录中,你被要求显示哪些字段?(忽略其他字段)。
- 应用 ORDER BY 子句: 如果有此项,按照要求重新排列最终输出列表(ASC 或 DESC)。
你知道吗? 谷歌、Facebook 以及几乎所有大型数字公司都高度依赖复杂的数据库和快速的 SQL 查询来管理你的数据!
💬 重点回顾:数据库与 SQL
数据库将数据组织成字段和记录,通过验证和主键确保数据质量。
SQL 是用于检索数据的工具。记住核心结构:
SELECT... FROM... WHERE... ORDER BY...
熟练掌握这些关键词,你就能高效地从海量数据集中找到所需信息。