三级数据库技术-第六章考点

考点和考察形式

image

image

SELECT及其子句

一般形式:

SELECT [ALL|DISTINCT] [TOP N]
FROM table1 [,table2...]
[WHERE <条件表达式>]
[GROUP BY...[HAVING]...]
[ORDER BY...[ASC|DESC]]

TOP 限制结果集【填】

当使用select 语句进行查询时,有时列出结果集的前几行的数据,而不是全部数据,可以使用TOP谓词限制输出结果

语法:

TOP n [percent] [WITH TIES];

image

🔺注意:

  1. WITH TIES 必须搭配 ORDER BY 使用
  2. TOP 一般与 ORDER BY 一起使用,否则"前 n 行"没有实际意义
  3. TOP 直接跟在 SELECT 关键字后面
  4. n 可以是小数,如 TOP 10.5 percent

真题:
image

image

image

子查询无法使用ORDER BY
image

CASE多分支表达式⭐【填/选】

可以在查询语句中使用 CASE 函数,以达到分情况显示不同类型的数据的目的
CASE 函数是一种多分支表达式,它计算条件列表并返回多个可能的结果表达式中的一个。

CASE分为简单CASE函数和搜索CASE函数

简单CASE函数

简单CASE函数用于等值测试。

CASE 测试表达式
    WHEN 简单表达式1 THEN 结果表达式1
    WHEN 简单表达式2 THEN 结果表达式2
    ...
    WHEN 简单表达式n THEN 结果表达式n
    [ELSE 结果表达式 n+1]
END;

执行过程:
计算测试表达式 →
按从上到下顺序与每个 WHEN 的简单表达式的比较 →
返回第一个匹配的 THEN 后的结果 →
都不匹配则返回 ELSE(无 ELSE 则返回 NULL)

搜索CASE函数

CASE
    WHEN 布尔表达式1 THEN 结果表达式1
    WHEN 布尔表达式2 THEN 结果表达式2
    ...
    WHEN 布尔表达式n THEN 结果表达式n
    [ELSE 结果表达式 n+1]
END;

区别 ⚠️:搜索 CASE 的 WHEN 子句使用布尔表达式(可用比较运算符和逻辑运算符),而非与测试表达式直接比较。

image

真题:
image

image

INTO — 将查询结果保存到新表 ⭐【填】

当使用 SELECT 语句查询数据时,产生的结果是保存在内存中的。如果希望将查询结果永久保存下来,比如保存在一个表中,则可以通过在 SELECT 语句中使用 INTO 子句实现。

SELECT 查询列表序列 INTO <新表名>
FROM 数据源
...

三个功能

  1. 根据查询语句列出的列及其类型创建一个新表
  2. 执行查询语句
  3. 将查询结果插入到新表中

🔺用 INTO 子句创建的新表可以是永久表,也可以是临时表。临时表又根据其使用范围分为局部临时表和全局临时表两种。

image

例子:
image

🔺辨析:
image

🔺真题
image

集合运算

并运算UNION 🔥【选/填】

并运算可将两个或多个查询语句的结果集合并为一个结果集,这个运算可以使用 UNION 运算符实现。

SELECT 语句1
UNION [ALL]
SELECT 语句2
UNION [ALL]
...
SELECT 语句n

🔺ALL关键字
image

🔺UNION 与JOIN区分
image

使用限制 🔥

  1. 所有 SELECT 列表中列的个数必须相同
  2. 对应列的数据类型必须隐式兼容
  3. 合并后的结果集采用第一个 SELECT 语句的列标题
  4. ORDER BY 只能写在最后一个查询语句之后,排序依据列必须是第一个查询语句中出现的列名

真题:

交运算 — INTERSECT 🔥【选/填】

交运算将返回同时在两个集合中出现的记录,即返回两个查询结果集中各个列的值均相同的记录,并用这些记录构成交运算的结果。

SELECT 语句1
INTERSECT
SELECT 语句2

关键词拆解

  1. "同时在两个集合中出现":相当于集合论中的交集(∩)
  2. 对各查询语句的要求同 UNION(列数相同、类型兼容)

差运算 — EXCEPT 🔥【选/填】

差运算将返回在第一个集合中有但第二个集合中没有的数据。

SELECT 语句1
EXCEPT
SELECT 语句2

真题

image

子查询

在 SQL 语言中,一个 SELECT-FROM-WHERE 语句称为一个查询块。如果一个 SELECT 语句是嵌套在一个 SELECT、INSERT、UPDATE 或 DELETE 语句中,则称为子查询或内层查询,包含子查询的语句称为主查询或外层查询。

子查询的三种形式

WHERE 表达式 [NOT] IN (子查询)       ← 基于集合的测试
WHERE 表达式 比较运算符 (子查询)      ← 比较测试
WHERE [NOT] EXISTS (子查询)          ← 存在性测试

使用子查询进行基于集合的测试 — IN / NOT IN 🔥

WHERE 表达式 [NOT] IN (子查询)

执行顺序 ⚠️:先执行子查询 → 再在子查询结果基础上执行外层查询。

子查询返回一个集合,外层查询用 IN 运算符逐行比较。

比较测试 — 比较运算符(标量子查询)

WHERE 表达式 比较运算符 (子查询)

比较运算符:=、<>、<、>、<=、>=
⚠️ 子查询必须是返回单值的查询语句
通过比较运算符(=、<>、…)将一个表达式的值与子查询返回的单值进行比较

7.3 存在性测试 — EXISTS / NOT EXISTS 🔥🔥

WHERE [NOT] EXISTS (子查询)

image

EXISTS:子查询中有满足条件的数据时 → 返回真
NOT EXISTS:子查询中没有满足条件的数据时 → 返回真

辨析

image

真题

image

派生表达式的子查询

替代表达式的子查询是指在 SELECT 语句的选择列表中嵌入一个只返回一个标量值的 SELECT 语句,这个查询语句通常都是通过一个聚合函数来返回一个单值。

要点:返回标量(单值),可出现在任何允许使用表达式的地方。

image

派生表

派生表(有时也称为内联视图)是将子查询作为一个表来处理,这个由子查询产生的新表就被称为"派生表",这很类似于临时表。

要点:

  1. 派生表出现在 FROM 子句中
  2. 必须指定别名
  3. 类似临时表但不显式创建
SELECT * FROM (SELECT cust_id, cust_name FROM Customer) AS T1

开窗函数

在 SQL Server 中,一组被称为窗口,开窗函数是指可用于“分区”或“分组”计算函数

这些函数结合 OVER 子句对组内的数据进行编号,并进行求和、计算平均值等统计。

开窗函数可以分别应用于每个分区,把每个分区看成是一个窗口,并为每个分区进行计算。

🔺开窗函数必须放在 OVER 子句前边。

排名函数和聚合函数

image

普通聚合函数每组返回一个值,开窗函数可以为每组返回多个值
image
image

语法:

开窗函数可以分别应用于每个分区,每个分区看成一个窗口
开窗函数必须在OVER子句的前边

<开窗函数>(<参数>) OVER(
[PARTITION BY value_expression,...] - 可选:按哪些列分组(类似GROUP BY)
[ORDER BY ...]-- 可选:窗口内的行排序
[ROWS/RANGE <窗口范围>]  -- 可选:定义窗口的物理/逻辑范围
)

其中:
PARTITION BY将结果集划分为多个分区,开窗函数分别应用于每个分区,为每个分区计算函数值
value_expression分区依据的列

排名函数对比

image
image

真题

image

公用表达式CTE

公用表表达式(Common Table Expression,CTE)是将查询语句产生的结果集指定一个临时命名的名字,这些命名的结果集就称为公用表表达式。命名后的公用表表达式就可以在 SELECT、INSERT、UPDATE、DELETE 等语句中被多次引用。

一旦查询执行完毕,这个CTE就消失了,不会在数据库中留下任何痕迹。

语法

WITH <CTE名称> [(列1,列2,...)]
AS(
        SELECT 子句
)
SELECT ... FROM <CTE名称>;

特点:
image

例子:

WITH customer_totals AS (
SELECT
CustomerID,
SUM(Amount) AS total_sales
FROM Orders
GROUP BY CustomerID
)
SELECT *
FROM customer_totals
WHERE total_sales > 10000;

image

END

编者注:三级数据库考试涉及知识点不多,且粗略。
部分内容如CTE,嵌套查询,开窗函数等可参见MYSQL学习笔记

posted @ 2026-07-31 20:34  Kaksno  阅读(2)  评论(0)    收藏  举报