结构化查询语言(SQL)
CIE A-Level 计算机科学· 第8单元:数据库,主题3· 20 分钟阅读
1. 核心SQL概念与DDL命令★★☆☆☆⏱ 5 min
在A-Level中,SQL分为两个核心子集:用于创建和修改数据库结构的数据定义语言(DDL),以及用于访问和更改存储数据的数据操作语言(DML)。
数据定义语言(DDL)
SQL的子集,用于定义和修改数据库对象(如表、约束和模式)的结构。
例:
常用DDL命令:CREATE、ALTER、DROP
为Customer表编写SQL CREATE TABLE语句,要求包含:customer_id(整数,主键)、customer_name(可变长度字符串100,非空)、email(可变长度字符串100)、loyalty_points(整数,默认值0)
- 1
以命令关键字和表名开头:
- 2
- 3
添加每个列定义以及所需约束:
- 4
- 5
用正确语法结束语句:
- 6
Exam tip:
CIE考官要求正确的语法,包括语句末尾的分号。关键字大写可以提高清晰度,避免混淆。
2. DML:基础SELECT查询与过滤★★☆☆☆⏱ 5 min
数据操作语言(DML)用于与存储在表中的数据交互。最常用的DML命令是SELECT,它从一个或多个表中检索符合给定条件的数据。
SELECT语句
用于从表中检索符合用户定义条件的指定数据的核心SQL命令。
从Customer表中检索loyalty_points > 100的customer_name和loyalty_points,并按loyalty_points降序排序
- 1
在
SELECT后列出要检索的列: - 2
- 3
在
FROM后指定源表: - 4
- 5
用
WHERE添加过滤条件: - 6
- 7
添加排序并结束语句:
- 8
3. 聚合与分组★★★☆☆⏱ 5 min
聚合函数对行组计算汇总统计信息,而不是返回单个记录。GROUP BY子句在应用聚合之前将行拆分为逻辑组。
聚合函数
对多个行执行计算并返回单个汇总值的函数。常见示例包括COUNT()、SUM()、AVG()、MAX()和MIN()。
对于通过customer_id与Customer表关联的Order表,找出每个客户的总订单数和总订单价值,仅显示总价值大于$1000的客户
- 1
选择分组键和所需的聚合函数:
- 2
- 3
指定源表:
- 4
- 5
按
customer_id对行分组,以计算每个客户的聚合值: - 6
- 7
用
HAVING过滤聚合后的分组: - 8
4. 连接多个表★★★★☆⏱ 5 min
大多数实际查询都需要来自多个通过主键和外键关联的表的数据。JOIN操作基于共享的关联列组合两个或多个表中的行。
内连接(INNER JOIN)
最常用的连接类型,仅返回两个连接表中都存在匹配值的行。
编写查询获取2024年所有订单的客户姓名和订单日期。表结构:Customer(customer_id, customer_name),Order(order_id, customer_id, order_date)
- 1
指定所需列,为清晰起见加上表名前缀:
- 2
- 3
声明连接类型和表:
- 4
- 5
添加连接条件来关联键:
- 6
- 7
过滤2024年的订单并结束语句:
- 8
5. 常见陷阱
错误做法:
对行级过滤使用HAVING而非WHERE
原因:
HAVING仅在聚合后过滤,因此这会产生错误结果并失分
正确做法:
分组前对单个行过滤使用WHERE,仅对聚合后的分组过滤使用HAVING
错误做法:
忘记将非聚合列添加到GROUP BY中
原因:
SQL要求SELECT中所有非聚合列都必须出现在GROUP BY中,这是常见的语法错误,会被考官判错
正确做法:
将SELECT子句中所有非聚合列列在GROUP BY子句中
错误做法:
连接表时省略ON子句
原因:
没有ON,SQL会返回两个表所有行的组合,这几乎永远不是问题要求的结果
正确做法:
始终添加ON子句,将一个表的主键关联到另一个表的外键
错误做法:
对可变长度文本字段使用CHAR(n)
原因:
CHAR是固定长度的,会添加不必要的尾部填充。CIE要求对可变长度文本使用VARCHAR
正确做法:
对最大长度为n的可变长度文本字段使用VARCHAR(n)
错误做法:
在SELECT语句中按错误顺序书写子句
原因:
SQL要求子句遵循固定顺序,错误顺序会导致语法错误
正确做法:
遵循以下顺序:SELECT → FROM → JOIN/ON → WHERE → GROUP BY → HAVING → ORDER BY
6. 速查表
子句/命令 | 用途 | 示例 |
|---|---|---|
CREATE TABLE | 创建新表 | CREATE TABLE Customer (id INT PRIMARY KEY, name VARCHAR(100)); |
SELECT ... FROM | 检索数据 | SELECT name FROM Customer; |
WHERE | 过滤单个行 | WHERE points > 100 |
GROUP BY | 对行分组以进行聚合 | GROUP BY customer_id |
HAVING | 过滤分组结果 | HAVING SUM(value) > 1000 |
INNER JOIN | 连接两个表 | INNER JOIN Order ON Customer.id = Order.customer_id |
INSERT | 添加新记录 | INSERT INTO Customer (id, name) VALUES (1, 'Alice'); |
UPDATE | 修改记录 | UPDATE Customer SET points = 200 WHERE id = 1; |
DELETE | 删除记录 | DELETE FROM Customer WHERE id = 1; |
7. 常见问题
考试中我需要记住所有SQL语法吗?
是的,CIE 9618要求你记住所有常用命令的标准语法,包括CREATE TABLE、SELECT、JOIN、INSERT、UPDATE和DELETE。
WHERE和HAVING的区别是什么?
WHERE和HAVING的区别是什么?WHERE在分组应用之前过滤行,而HAVING在聚合之后过滤分组。这是最常考的区别。
真题中的出现
AI 根据考纲规律估算的考点位置,请对照官方真题核实准确性。仅作复习重点参考。
- 2022 · 2
编写查询检索数据
- 2023 · 2
创建表和连接查询
- 2024 · 2
聚合分组数据
深入阅读
下一步
SQL是CIE A-Level计算机科学的核心技能,在试卷2的数据库单元中占大多数分值。掌握SQL语法和常见查询模式可以帮助你在该部分轻松得分,因为一旦你学会了核心规则,大多数SQL问题结构清晰且可预测。除了考试之外,SQL是软件开发、数据分析和信息系统中最实用、使用最广泛的技术技能之一,因此你在这里掌握的概念在你拿到证书后很长时间都仍然有用。接下来,你可以通过探索相关数据库概念来巩固你的知识。
