Skip to content

4、SQL 语言

体系结构

  • 视图:外模式
  • 基本表:概念模式
  • 存储文件:内模式

分类

DDL(数据定义语言):定义数据库对象(库、表、视图、索引等):

建立数据库 CREATE

create database 数据库名

建立基本表

create table 表名 (列名 数据类型 [列级完整性约束],...)表级完整性约束

列级完整性约束
  • 非空(NOT NULL)、
  • 唯一(UNIQUE)、
  • 非空且唯一(NOT NULL UNIQUE)、
  • 默认值(DEFAULT 值)
表级完整性约束
  • 主键(PRIMARY KEY(key) - 实体完整性)、
  • 外键(FOREIGN KEY(key) Reference - 参照完整性)、
  • 检查(Check(条件) - 用户自定义完整性)

修改表结构

  • 新增列:ALTER TABLE 表名 ADD 列名 数据类型
  • 删除列:ALTER TABLE 表名 DROP COLUMN 列名
  • 修改列:ALTER TABLE 表名 ALTER(MODIFY) COLUMN(空) 列名 数据类型

删除基本表

  • DROP TABLE 表名

DML(数据操纵语言):添加、修改、删除数据库中数据的语句:

插入数据 INSERT

INSERT INTO 表名[(列名序列)] VALUES (值1, 值2, 值3, ...)

删除数据 DELETE

DELETE FROM 表名 [WHERE 条件]

修改数据 UPDATE

UPDATE 表名 SET 列名 = 值 [,列名 = 值] [WHERE 列名 = 值]

DQL(数据查询语言):查询数据库的语句**(内容多)**

完整的 SELECT 语句为:

SELECT 列名或表达式序列 FROM 表名 [WHERE 列名 [OPERATOR 值]][GROUP BY 列名] [HAVING 列名 [OPERATOR 值]] [ORDER BY 列名 [ASC | DESC]]

投影查询

  • 使用 SELECT 命令可以选择查询表中的任意列
  • 查询多个列用逗号隔开
  • 可以使用 DISTINCT 去掉重复行
  • 查询多个表也用逗号隔开,会先进行笛卡尔积操作
  • 可以使用AS 标题名,来显示新的列名(别名)

选择查询(WHERE)

运算符
  • 集合成员运算符 IN、NOT IN
  • 字符串匹配运算符 [NOT] LIKE(模糊查询,%代表任意字符,_代表任意单个字符)
  • 空值比较运算符 IS NULL、IS NOT NULL
  • 比较运算符 >、<、>=、<=、=、<>、!=
  • 逻辑运算符 AND、OR、NOT
  • BETWEEN A AND B:A <= x <= B

排序查询

查出的结果进行排序

  • 使用 ORDER BY
  • ASC(升序 - 默认)、DESC(降序)
  • ORDER BY 必须是 SELECT 子句中的最后一个子句
  • 可以按多个列进行排序

聚合函数(重要)

实现一个数据统计的功能,用于对一组值进行计算并返回一个单一的值,一般配合 GROUP BY 使用

常用的聚合函数
  • AVG:计算一个数值型表达式的平均值
  • COUNT:计算一个表达式的项数,COUNT(*)统计查询输出的行数
  • MIN:返回一个数值型表达式的最小值
  • MAX:返回一个数值型表达式的最大值
  • SUM:返回一个数值型表达式的和

数据分组 GROUP BY

  • 加上 GROUP BY 以后,查询结果将按 GROUP BY 指定的字段进行分组
  • 当一个聚合函数和一个 GROUP BY 字段一起使用时,聚合函数将返回每个分组的计算结果
  • 在投影中若存在聚合函数,除了聚合函数,别的列都要分组
  • HAVING 在分组后进行过滤,必须与 GROUP BY 一起使用,支持聚合函数
执行顺序

当 WHERE、GROUP BY、HAVING 语句同时出现在一个查询中时,执行顺序如下

  • 执行 WHERE 语句,从表中选取行
  • 由 GROUP BY 对选取的行进行分组
  • 执行聚合函数
  • 执行 HAVING 子句选取满足条件的分组

连接查询

在数据查询中,经常涉及提取两个或多个表的数据,需要使用表的连接来实现联合查询

  • 需要对多个表连接时,可以指定连接列,在 where 中给出连接条件,在 FROM 中指定要连接的表
  • 存在公共列,在连接条件中通过表名前缀指定连接列
内连接(等值连接,sita 连接,自连接)

select * from student inner join score on 条件

  • 使用 INNER JOIN 关键字,不使用时也默认为内连接
  • 内连接分为等值连接、非等值连接、自然连接
  • 等值连接,就是表之间通过“等于”关系连接起来
  • 非等值连接,就是表之间不通过“等于”关系连接起来
  • 自连接,就是把表的某行与同一表中的另一行连接起来
外连接(左外连接、右外连接、全外连接)
  • 左连接:其结果包括第一个命名表中的所有行,不包括右表中的不匹配行
  • 右连接:其结果包括第二个命名表中的所有行,不包括第一个命名表中的不匹配行

子查询

一个查询嵌套另一个查询

一般子查询

并、交、差

  • UNION:并集
  • INTERSECT:交集
  • EXCEPT:差集

DCL(数据控制语言):权限管理和事务管理

某个用户对某类数据具有何种权利,是一个政策问题,非技术问题

  • 通过 GRANT 和 REVOKE 命令来管理权限
  • 当用户请求权限时,根据授权情况检查是否执行(INSERT、UPDATE、DELETE、SELECT(对应 READ)、REFERENCES 权限)

GRANT 权限 on TABLE 表名 TO USER 用户名 [WITH GRANT OPTION]

  • WITH GRANT OPTION 表示授权用户可以授权给其他用户

KESHAOYE-知识星球 V20251030171600