学习指南

结构化查询语言(SQL)

CIE A-Level 计算机科学· 第8单元:数据库,主题3· 20 分钟阅读

1. 核心SQL概念与DDL命令★★☆☆☆⏱ 5 min

在A-Level中,SQL分为两个核心子集:用于创建和修改数据库结构的数据定义语言(DDL),以及用于访问和更改存储数据的数据操作语言(DML)。

📘 定义

数据定义语言(DDL)

SQL的子集,用于定义和修改数据库对象(如表、约束和模式)的结构。

例:

常用DDL命令:CREATEALTERDROP

📐 例题

Customer表编写SQL CREATE TABLE语句,要求包含:customer_id(整数,主键)、customer_name(可变长度字符串100,非空)、email(可变长度字符串100)、loyalty_points(整数,默认值0)

  1. 1

    以命令关键字和表名开头:

  2. 2
    CREATETABLECustomer(CREATE TABLE Customer (
  3. 3

    添加每个列定义以及所需约束:

  4. 4
    customeridINTPRIMARYKEY,customernameVARCHAR(100)NOTNULL,emailVARCHAR(100),loyaltypointsINTDEFAULT0customer_id INT PRIMARY KEY, customer_name VARCHAR(100) NOT NULL, email VARCHAR(100), loyalty_points INT DEFAULT 0
  5. 5

    用正确语法结束语句:

  6. 6
    ););

Exam tip:

CIE考官要求正确的语法,包括语句末尾的分号。关键字大写可以提高清晰度,避免混淆。

2. DML:基础SELECT查询与过滤★★☆☆☆⏱ 5 min

数据操作语言(DML)用于与存储在表中的数据交互。最常用的DML命令是SELECT,它从一个或多个表中检索符合给定条件的数据。

📘 定义

SELECT语句

用于从表中检索符合用户定义条件的指定数据的核心SQL命令。

📐 例题

Customer表中检索loyalty_points > 100customer_nameloyalty_points,并按loyalty_points降序排序

  1. 1

    SELECT后列出要检索的列:

  2. 2
    SELECTcustomername,loyaltypointsSELECT customer_name, loyalty_points
  3. 3

    FROM后指定源表:

  4. 4
    FROMCustomerFROM Customer
  5. 5

    WHERE添加过滤条件:

  6. 6
    WHEREloyaltypoints>100WHERE loyalty_points > 100
  7. 7

    添加排序并结束语句:

  8. 8
    ORDERBYloyaltypointsDESC;ORDER BY loyalty_points DESC;

3. 聚合与分组★★★☆☆⏱ 5 min

聚合函数对行组计算汇总统计信息,而不是返回单个记录。GROUP BY子句在应用聚合之前将行拆分为逻辑组。

📘 定义

聚合函数

对多个行执行计算并返回单个汇总值的函数。常见示例包括COUNT()SUM()AVG()MAX()MIN()

📐 例题

对于通过customer_idCustomer表关联的Order表,找出每个客户的总订单数和总订单价值,仅显示总价值大于$1000的客户

  1. 1

    选择分组键和所需的聚合函数:

  2. 2
    SELECTcustomerid,COUNT(orderid)AStotalorders,SUM(ordervalue)AStotalspendSELECT customer_id, COUNT(order_id) AS total_orders, SUM(order_value) AS total_spend
  3. 3

    指定源表:

  4. 4
    FROMOrderFROM Order
  5. 5

    customer_id对行分组,以计算每个客户的聚合值:

  6. 6
    GROUPBYcustomeridGROUP BY customer_id
  7. 7

    HAVING过滤聚合后的分组:

  8. 8
    HAVINGSUM(ordervalue)>1000;HAVING SUM(order_value) > 1000;

4. 连接多个表★★★★☆⏱ 5 min

大多数实际查询都需要来自多个通过主键和外键关联的表的数据。JOIN操作基于共享的关联列组合两个或多个表中的行。

📘 定义

内连接(INNER JOIN)

最常用的连接类型,仅返回两个连接表中都存在匹配值的行。

📐 例题

编写查询获取2024年所有订单的客户姓名和订单日期。表结构:Customer(customer_id, customer_name)Order(order_id, customer_id, order_date)

  1. 1

    指定所需列,为清晰起见加上表名前缀:

  2. 2
    SELECTCustomer.customername,Order.orderdateSELECT Customer.customer_name, Order.order_date
  3. 3

    声明连接类型和表:

  4. 4
    FROMCustomerINNERJOINOrderFROM Customer INNER JOIN Order
  5. 5

    添加连接条件来关联键:

  6. 6
    ONCustomer.customerid=Order.customeridON Customer.customer_id = Order.customer_id
  7. 7

    过滤2024年的订单并结束语句:

  8. 8
    WHEREOrder.orderdateBETWEEN20240101AND20241231;WHERE Order.order_date BETWEEN '2024-01-01' AND '2024-12-31';

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要求子句遵循固定顺序,错误顺序会导致语法错误

正确做法:

遵循以下顺序:SELECTFROMJOIN/ONWHEREGROUP BYHAVINGORDER 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 TABLESELECTJOININSERTUPDATEDELETE

WHEREHAVING的区别是什么?

WHERE在分组应用之前过滤行,而HAVING在聚合之后过滤分组。这是最常考的区别。

真题中的出现

AI 根据考纲规律估算的考点位置,请对照官方真题核实准确性。仅作复习重点参考。

  • 2022 · 2

    编写查询检索数据

  • 2023 · 2

    创建表和连接查询

  • 2024 · 2

    聚合分组数据

深入阅读

下一步

SQL是CIE A-Level计算机科学的核心技能,在试卷2的数据库单元中占大多数分值。掌握SQL语法和常见查询模式可以帮助你在该部分轻松得分,因为一旦你学会了核心规则,大多数SQL问题结构清晰且可预测。除了考试之外,SQL是软件开发、数据分析和信息系统中最实用、使用最广泛的技术技能之一,因此你在这里掌握的概念在你拿到证书后很长时间都仍然有用。接下来,你可以通过探索相关数据库概念来巩固你的知识。