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 表示授权用户可以授权给其他用户
