SQL语言
SQL语言
1. 考点:SQL 语言分类及核心动词对照表
| 分类 | 动词 | 说明 |
|---|---|---|
| 数据查询 | SELECT | 用于检索数据库中的数据。 |
| 数据定义 | CREATE、DROP、ALTER | 用于定义或修改数据库的结构(如表、视图、索引等)。 |
| 数据操纵 | INSERT、UPDATE、DELETE | 用于对表中的数据进行增、删、改操作。 |
| 数据控制 | GRANT、REVOKE | 用于安全管理,控制用户的访问权限和收回权限。 |
2. 考点:SQL查询语句的基本格式
2.1 SELECT 查询语句语法结构
SELECT [ALL | DISTINCT] <目标表达式> [, <目标表达式>] ...
FROM <表名> [, <表名>] ...
[WHERE <条件表达式>]
[ORDER BY <列名2> [ASC | DESC] ...];2.1.1 核心组成部分说明
SELECT 子句:- 用于指定查询结果中需要返回的目标列或表达式。
ALL(默认)表示保留查询结果中的所有重复行;DISTINCT表示剔除结果集中的重复行。
FROM 子句:- 用于指定数据来源的表名或视图名,可以包含单表或多表连接。
WHERE 子句(可选) :- 用于设定检索的过滤条件,只有满足条件的行才会出现在结果集中。
ORDER BY 子句(可选) :- 用于对查询结果按照指定列进行排序。
ASC 表示升序(默认),DESC表示降序。
2.2 SQL语言:高级查询子句与聚集函数
2.2.1 SQL 高级处理类型与语法对照表
| 处理类型 | 处理子类 | 示例/语法 |
|---|---|---|
| 结果排序 | 升序或降序 | `ORDER BY 字段名 DESC |
| 聚集函数 | 统计 | `COUNT([DISTINCT |
| 计算一列值的总和 | `SUM([DISTINCT | |
| 计算一列值的平均值 | `AVG([DISTINCT | |
| 求一列值中的最大值 | `MAX([DISTINCT | |
| 求一列值中的最小值 | `MIN([DISTINCT | |
| 对结果分组 | 将查询结果按列值分组 | GROUP BY <列名> |
| 对分组结果筛选 | 对分组结果筛选 | HAVING <条件表达式> |
2.2.2 核心语法结构扩展
在完整的 SQL 查询中,GROUP BY 和 HAVING 通常紧跟在 WHERE 子句之后,其标准书写顺序为:
SELECT <目标表达式>
FROM <表名>
[WHERE <条件表达式>]
[GROUP BY <列名1>]
[HAVING <条件表达式>]
[ORDER BY <列名2> [ASC | DESC]];[!TIP] 💡 核心考点提示:
-
WHERE 与 HAVING 的区别:WHERE 用于在分组前对原始表中的行进行过滤;而 HAVING 专门用于对 GROUP BY 聚合后的分组结果进行条件筛选。
2.3 SQL 语言:综合查询语句实例
2.3.1 典型查询实例分析
- 查询需求示例:统计“学生表”中各班级成绩及格(成绩 )人数在 人以上的班级及及格人数。
- 对应 SQL 语句:
SELECT 班级, COUNT(学号) AS 及格人数
FROM 学生表
WHERE 成绩 >= 60
GROUP BY 班级
HAVING COUNT(学号) >= 10;2.3.2 执行顺序与逻辑解析
-
FROM 学生表:首先指定查询的数据源来自“学生表”。 -
WHERE 成绩 >= 60:在分组前对原始数据进行行级过滤,只筛选出成绩大于等于 分的记录。 -
GROUP BY 班级:将过滤后的记录按“班级”列进行分组。 -
SELECT 班级, COUNT(学号)... :对每一个分组利用聚集函数 COUNT(学号)进行统计,计算每个班级的及格人数。 -
HAVING COUNT(学号) >= 10:对分组后的聚合结果进行组级筛选,只保留及格人数满 人及以上的班级。
2.4 SQL 语言:数据控制语句 (DCL)
2.4.1 授权语句 (GRANT)
语法格式:
GRANT <权限> [, ··· n] ON <对象类型> <对象名> TO <用户> [, ··· n] [WITH GRANT OPTION];核心规则:
- 使用
WITH GRANT OPTION子句时,获得权限的用户还可以进一步将该权限赋给其他用户。
- 使用
2.4.2 收回权限语句 (REVOKE)
- 语法格式:
REVOKE <权限> [, ··· n] ON <对象类型> <对象名> FROM <用户> [, ··· n] [RESTRICT | CASCADE];
3. 经典例题
3.1 题目一
题目: 给定关系 与 ,那么与表达式 等价的 SQL 语句如下:
SELECT ( ) FROM R, S WHERE ( ) ;第一组选项:
- A、
R.B,D,F,G- B、
R.B,E,S.C,F,G- C、
R.B,R.D,S.C,F- D、
R.B,R.C,S.C,F第二组选项:
- A、
R.B = S.B OR R.C = S.C OR R.B < S.G- B、
R.B = S.B OR R.C = S.C OR R.B < S.C- C、
R.B = S.B AND R.C = S.C AND R.B < S.G- D、
R.B = S.B AND R.C = S.C AND R.B < S.C
【解析】
正确答案: 第一空选 A,第二空选 C。
解析说明:
**自然连接 (** ) 的属性顺序:
- 已知 ,。
- 自然连接会自动去掉重复的公共属性(即 和 各保留一个),合并后的属性列顺序为:(对应第 1 到第 7 列)。
第一空解析(投影 **** ) :
取第 2、4、6、7 列:
- 第 2 列:(即
R.B) - 第 4 列:(即
D) - 第 6 列:(即
F) - 第 7 列:(即
G)
- 第 2 列:(即
因此,
SELECT 子句应为:R.B,D,F,G,选项 A 正确。
第二空解析(选择 与连接条件) :
- 选择条件 表示第 2 列小于第 7 列,即
R.B < S.G。 - 同时,在 SQL 中用
FROM R, S 实现隐式自然连接时,必须通过 WHERE 子句显式加上公共属性相等的连接条件(即 R.B = S.B 且 R.C = S.C)。 - 将所有条件用
AND 连结合并:R.B = S.B AND R.C = S.C AND R.B < S.G,选项 C 正确。
- 选择条件 表示第 2 列小于第 7 列,即
正确答案: 第一空 A( R.B,D,F,G ),第二空 C( R.B = S.B AND R.C = S.C AND R.B < S.G )。
3.2 题目二
题目: 供应商关系 Supp、项目关系 Proj 和零件关系 Part 的关系模式如下:
- Supp(供应商号,供应商名,地址,电话)
- Proj(项目号,项目名,负责人,电话)
- Part(零件号,零件名)
给定关系模式 SP_P(供应商号,项目号,零件号,数量),查询至少供应了 3 个项目(包含 3 项)的供应商,输出其供应商号和供应零件数量的总和,并按供应商号降序排列。
sql
SELECT 供应商号, SUM(数量) FROM ( ) GROUP BY 供应商号 ( ) ORDER BY 供应商号 DESC;第一组选项:
- A、Supp
- B、Proj
- C、Part
- D、SP_P
第二组选项:
- A、HAVING COUNT(项目号) > 2
- B、WHERE COUNT(项目号) > 2
- C、HAVING COUNT(DISTINCT(项目号)) > 2
- D、WHERE COUNT(DISTINCT(项目号)) > 3
【解析】
正确答案:第一空选 D,第二空选 C。
解析说明:
第一空:数据来源为( D )
- 查询需要用到“供应商号”、“项目号”、“数量”这些字段。
- 这些字段都在关系模式 SP_P(供应商号,项目号,零件号,数量)中。
- 因此,FROM 子句应为 SP_P,选项 D 正确。
第二空:筛选条件为( C )
- 题目要求“至少供应了 3 个项目”,即按供应商分组后,统计每个供应商供应过的不同项目号的数量,要求 ≥ 3。
- 由于一个供应商可能对同一个项目供应多种零件,因此需要统计 DISTINCT(项目号) 。
- 对分组后的结果进行筛选,应使用 HAVING 子句,而不是 WHERE(WHERE 在分组前筛选,不能配合聚合函数)。
- 因此,条件应为:
HAVING COUNT(DISTINCT(项目号)) > 2(即 ≥ 3),选项 C 正确。
正确答案:第一空 D(SP_P),第二空 C(HAVING COUNT(DISTINCT(项目号)) > 2)。
3.3 题目三
题目: 要将部门表 Dept 中 name 列的修改权限赋予用户 Ming,并允许 Ming 将该权限授予他人。实现该要求的 SQL 语句如下:
GRANT UPDATE(name) ON TABLE Dept TO Ming ( ) ;
- A、FOR ALL
- B、CASCADE
- C、WITH GRANT OPTION
- D、WITH CHECK OPTION
【解析】
正确答案:C
解析说明:
关于选项 C(WITH GRANT OPTION) :该选项表示获得权限的用户可以将该权限再授予其他用户。题干要求“允许 Ming 将该权限授予他人”,因此应使用
WITH GRANT OPTION。其他选项说明:
- A、FOR ALL:表示授予所有权限,不符合题意。
- B、CASCADE:表示级联删除权限,通常用于收回权限时,不符合题意。
- D、WITH CHECK OPTION:用于视图定义,表示对视图的更新必须满足视图定义中的条件,不符合题意。
正确答案:C(WITH GRANT OPTION)。
