数据库工程师复习重点:关系数据库操作语言SQL
8.1 SQL支持的数据类型
8.1.1 数值型
1、 准确型
2、 近似型
8.1.2 字符串型
1、 普通编码字符串类型;
2、 统一编码字符串类型—Unicode编码;
3、 二进制字符串类型;
8.1.3 日期时间类型
8.1.4 货币类型
8.2 定义和维护关系表
8.2.1 关系表的定义与删除
1、定义表
CREATE TABLE <表名> (<列名><数据类型>[列级完整性约束定义]{, <列名><数据类型>[列级完整性约束定义]…}[,表级完整性约束定义])
1、 列级完整性约束:
(1) NOT NULL:取值非空;
(2) DEFAULT:指定列的默认值,形式:DEFAULT 常量;
(3) UNIQUE:列取值不重复;
(4) CHECK:列的取值范围,形式:CHECK(约束表达式);
(5) PRIMARY KEY:指定本列为主码;
(6) FOREIGN KEY:定义本列为引用其他表的外码;
2、 删除表
DROP TABLE <表名>
8.2.2 修改表结构
ALTER TABLE <表名>
8.3 数据操作语言
8.3.1 数据查询
1、查询语句的基本结构:
SELECT <目标列名序列> FROM <数据源> {WHERE , GROUP BY , HAVING , ORGER BY}
(1) 比较:SELECT A,B,C FROM TABLE_A WHERE A>30;
(2) 确定范围:WHERE A (NOT)BETWEEN 初始值 AND 结束值;
(3) 确定集合:WHERE A (NOT)IN (‘A1’,‘A2’….‘A3’);
(4) 字符串匹配:WHERE A LIKE <匹配符>;
(5) 四种<匹配符>:
(A)_(下划线):匹配任意一个字符;
(B)%(百分号):匹配0个或多个字符;
(C)[ ]:匹配[ ]中的任意一个字符;
(D)[^]:不匹配[ ]中的任意一个字符;
(6) 涉及空值的查询:WHERE A IS (NOT)NULL;
(7) 多重条件查询:AND(条件必须全部为TRUE,结果才为TRUE),OR(任一条件为TRUE,结果即为TRUE);
(8) 对查询结果进行排序:ORDER BY A [ASC(顺序) | DESC(逆序)];
(9) 列别名:列名 AS 新列名;
(10) 消除取值相同的行:SELECT DISTINCT A FROM TABLE_A;
(11) 使用聚合函数统计数据:SQL的聚合函数:
(A) COUNT(*):统计表中元组的个数;
(B) COUNT([ALL (全部)| DISTINCT(无重复)] <列名>):统计本列非空列值的个数;
(C) SUM(列名):计算列值的总和(必须是数值型列);
(D) AVG(列名):计算列值平均值(必须是数值型列);
(E) MAX(列名):求列最大值;
(F) MIN(列名):求列最小值;
(12) 对查询结果进行分组计算:
(A) 使用GROUP BY;
(B) 使用HAVING子句;
3、 连接查询
(1) 内连接:FROM 表1 JOIN 表2 ON (连接条件);
(2) 自连接:一种特殊的内连接,相互连接的表在物理上是同一张表,但通过为表取别名的方法,在逻辑上分为两张表;
(3) 外连接:输出不满足连接条件的元组,格式:
FROM 表1 LEFT|RIGHT OUTER JOIN 表2 ON (连接条件)
4、 查询语句的扩展:
(1) 合并多个结果集:SELECT 语句1 UNION SELECT 语句2……,使用UNION的两个基本规则:
(A) 所有查询语句中列的个数和列的顺序必须相同;
(B) 所有查询语句中对应的数据类型必须兼容;
(2) 将查询结果保存到新表中:SELECT 查询列表序列 INTO 新表名 FROM 数据源;
(3) 使用TOP限制结果集行数:TOP n [percent] [WITH TIES]
(A) TOP n :表示取查询结果的前n行;
(B) TOP n percent:表示取查询结果的前n%行;
(C) WITH TIES:表示包括并列的结果;
(4) 使用CASE表达式:
(A) 简单CASE表达式:
(B) 搜索CASE表达式;
5、子查询:
如果一个SELECT语句是嵌套在一个SELECT、INSERT、UPDATE或DELETE语句中,则称为子查询或内层查询,包含子查询的语句称为主查询或外层查询;(1) 使用子查询进行基于集合的测试,形式:WHERE 表达式 [NOT] IN (子查询);
(2) 使用子查询进行比较测试,形式:WHERE 表达式 比较运算符 (子查询);
(3) 使用子查询进行存在性测试,形式:WHERE [NOT] EXISTS (子查询);
8.3.2 数据修改
1、 添加数据:INSERT [INTO] 表名 VALUE 值列表;使用插入单行语句时要注意:
(1) 值列表中的值与列名表中的列按位置顺序对应,要求它们的数据类型必须一致;
(2) 如果[表名]后边没有指明列名,则值列表中的值的顺序必须与表中列的顺序一致,且每一列均有值;
2、 更新数据:形式 UPDATE 表名 SET [列名=表达式] [WHERE 更新条件];
3、 删除数据::形式DELETE [FROM] 表名 [WHERE 删除条件];
8.4 索引
1、 创建索引:CREATE [UNIQUE] [CLUSTERED | NONCLUSTERED]
INDEX 索引名 ON 表名
(1) UNIQUE:表示要创建的索引是唯一索引;
(2) CLUSTERED:表示要创建的索引是聚集索引;
(3) NONCLUSTERED:表示要创建的索引是非聚集索引;
2、 删除索引:DROP INDEX 索引名;
8.5 视图
8.5.1 定义视图
1、 语法格式:CREATE VIEW 视图名 AS SELECT 语句 [WITH CHECK OPTION]
2、 需要注意下列几点:
(1) 在定义视图时要么指定全部视图列,要么全部省略不写。如果省略了视图列名,则视图的列名与查询语句的列名相同。但如下情况则要明确指出组成视图的所有列名:
A、 某个目标列不是单纯的属性名,而是计算函数或列的表达式;
B、 多表连接时选出了几个同名列作为视图的字段;
C、 需要在视图中为某个列选用新的更合适的列名。
(2) WITH CHECK OPTION选项表示通过视图对数据进行增加、删除和更改操作时要保证对数据的操作结果要满足定义视图时指定的WHERE子句条件;
3、 视图通常用于查询数据,也可修改基本表中的数据,但不是所有的视力都可以这样。
4、 定义单源表视图—视图数据可只取自一个基本表的部分行、列,这样的视图行列与基本表行列对应,这样定义的视图一般可以进行查询和更改数据操作
5、 定义多源表视图—视图数据可以来自多个表中,这样定义的视图一般只用于查询,不用于修改数据。
6、 在已有视图上定义新视图—可以在视图上再建立视图,这时作为数据源的视图必须是已经建立好的。
7、 定义带表达式的视图—在定义基本表时,为减少数据库中的冗余数据,表中只存放基本数据,由基本数据经过各种计算派生出的数据一般是不存储的。所以定义视图时可以根据需要设置一些派生属性列,在这些派生属性列中保存经过计算的值。这些派生属性由于在基本表中并不实际存在,因此,也称它们为虚拟列。包含虚拟列的视图也称为带表达式的视图。
8、 含分组统计信息的视图—指定义视图的查询语句中含有GROUP BY 子句,这样的视图只能用于查询,不能修改数据。
8.5.2 删除视图
1、 格式为:DROP VIEW <视图名>
8.5.3 视图的作用
1、 简化数据查询语句;
2、 使用户能从多角度看到同一数据;
3、 提高了数据的安全性;
4、 提供了一定程度的逻辑独立性