《SQL必知必会》笔记
笔记📒
- SQL关键字使用大写,对列名和表名使用小写。
- 将SQL语句分成多行更容易阅读和调试。
代码片段
检索结果
1 | /* 检索单个列 */ |
排序检索数据
1 | /* 排序数据 */ |
过滤数据
1 | /* 使用WHERE子句 */ |
高级数据过滤
1 | /* 组合WHERE子句 - AND 操作符 */ |
用通配符进行过滤
1 | /* 百分号% 通配符 */ |
计算字段
1 | /* 拼接字段 */ |
使用函数处理数据
常用函数类别:
- 用于处理文本字符串(如删除或填充值,转换值为大写或小写)的文本函数
- 用于在数值数据上进行算术操作(如返回绝对值,进行代数运算)的数值函数
- 用于处理日期和时间值并从这些值中提取特定成分(如返回两个日期之差,检查日期有效性)的日期和时间函数
- 返回 DBMS 正使用的特殊信息(如返回用户登录信息)的系统函数
1 | /* 文本处理函数 */ |
汇总数据
聚集函数
- AVG
- COUNT
- MAX
- MIN
- SUM
1 | /* AVG函数 */ |
分组数据
1 | /* 创建分组 */ |
SELECT 子句顺序
- SELECT
- FROM
- WHERE
- GROUP BY
- HAVING
- ORDER BY
使用子查询
1 | /* 利用子查询进行过滤 */ |
联结表
关系表设计需要把信息分解成多个表,一类数据一个表,各表通过某些共同的值互相关联,能够更有效地存储,更方便地处理,而且可伸缩性更好。但是需要使用联结来进行跨多个表的查询。
1 | /* 创建联结 */ |
创建高级联结
1 | /* 使用表别名 */、 |
组合查询
利用UNION操作符将多条SELECT语句组合成一个结果集。
- UINION分隔SELECT语句
- UNION中的每个查询必须包含相同的列、表达式或聚集函数
- 列数据类型必须兼容,不必完全相同。
1 | /* 使用UNION */ |
插入数据
1 | /* 插入完整行 */ |
更新和删除数据
1 | /* 更新数据 */ |
更新和删除数据很容易,所以应当很仔细地使用它。更新和删除的指导原则如下:
- 除非确实打算更新和删除每一行,否则绝对不要使用不带 WHERE 子句 的 UPDATE 或 DELETE 语句。
- 保证每个表都有主键,尽可能 像 WHERE 子句那样使用它(可以指定各主键、多个值或值的范围)。
- 在 UPDATE 或 DELETE 语句使用 WHERE 子句前,应该先用 SELECT 进 行测试,保证它过滤的是正确的记录,以防编写的 WHERE 子句不正确。
- 使用强制实施引用完整性的数据库,这样 DBMS 将不允许删除其数据与其他表相关联的行。
创建和操纵表
1 | /* 表创建基础 */ |
复杂的表结构更改一般需要手动删除过程,涉及以下步骤:
- 用新的列布局创建一个新表;
- 使用 INSERT SELECT 语句从旧表复制数据到新表。有必要的话,可以使用转换函数和计算字段;
- 检验包含所需数据的新表;
- 重命名旧表(如果确定,可以删除它);
- 用旧表原来的名字重命名新表;
- 根据需要,重新创建触发器、存储过程、索引和外键。
使用视图
视图:
- 视图为虚拟的表。
- 它们包含的不是数据而是根据需要检索数据的查询。
- 视图提供了一种封装 SELECT 语句的层次,可用来简化数据处理,重新格式化或保护基础数据。
视图常见应用:
- 重用 SQL 语句。
- 简化复杂的 SQL 操作。在编写查询后,可以方便地重用它而不必知道 其基本查询细节。
- 使用表的一部分而不是整个表。
- 保护数据。可以授予用户访问表的特定部分的权限,而不是整个表的访问权限。
- 更改数据格式和表示。视图可返回与底层表的表示和格式不同的数据。
1 | /* 举例说明 */ |
使用存储过程
存储过程相对会比较复杂些,书上也没有详细的介绍。
我理解的存储过程,就是在一个业务场景中,单个的SQL语句无法完成任务,需要对业务涉及到的多条SQL语句进行封装,抽出一个函数形式的API。
好处就是封装之后执行相对简单了,而且开发人员使用同样的步骤,保证了数据一致,减少错误发生的概率。
管理事务处理
使用事务处理(transaction processing),通过确保成批的 SQL 操作要么完全执行,要么完全不执行,来维护数据库的完整性。
事务处理用来管理:INSERT语句、UPDATE语句、DELETE语句。
1 | /* 事务开始和结束 */ |
使用游标
游标就是一种处理结果集的机制,可以定位到结果集的某一行进行处理。用处主要包括:
- 定位到结果集中的某一行;
- 对当前位置的数据进行读写;
- 可以对结果集中的数据单独操作,而不是整行执行相同的操作;
- 是面向集合的数据库管理系统和面向行的程序设计之间的桥梁。
1 | /* 创建游标 */ |
高级SQL特性
概念性的内容,不抄书了,可以看书或者看博客。主要包括:
- 约束
- 主键:
主键是一种特殊的约束,用来保证一列(或一组列)中的值是唯一的,而且永不改动。 - 外键:
外键是表中的一列,其值必须列在另一表的主键中。外键是保证引用完整性的极其重要部分。 - 唯一约束:
唯一约束用来保证一列(或一组列)中的数据是唯一的。 - 检查约束:
检查约束用来保证一列(或一组列)中的数据满足一组指定的条件。
- 主键:
- 索引:
索引用来排序数据以加快搜索和排序操作的速度。 - 触发器:
触发器是特殊的存储过程,它在特定的数据库活动发生时自动执行。触发器可以与特定表上的 INSERT、UPDATE 和 DELETE 操作(或组合)相关联。 - 数据库安全:
利用管理机制授予或限制对数据的访问。