写在前面
系列文章第二篇,包含该书第4-6章的29个知识点。
*本文代码均基于MySQL环境。
第4章 数据更新
24.INSERT语句
INSERT INTO <表名> (列1,列2,列3,......) VALUES (值1,值2,值3,......);
--字符型的值需要用''括起来
--对表进行全列INSERT时,可以省略表名后的列清单
25.多行INSERT
INSERT INTO <表名> VALUES (值1,值2,值3,......),
(值21,值22,值23,......),
(值31,值32,值33,......);
26.插入默认值
显式方法:在VALUES子句中指定DEFAULT关键字
隐式方法:省略INSERT语句中的列名,就会自动设定为该列的默认值(没有默认值时会设定为NULL)
27.从其他表中复制数据
INSERT INTO <复制表名> (列1,列2,列3,......)
SELECT 列1,列2,列3,......
FROM 原表名;
--该SELECT语句中,也可以使用WHERE,GROUP BY 等各种语句
28.数据的删除
DROP TABLE 语句可以将表完全删除
DELETE 语句会留下表,而删除表中的全部数据
29.DELETE语句
DELETE FROM <表名>
WHERE <条件>;
30.UPDATE语句
UPDATE <表名>
SET <列名> = <表达式>
WHERE <条件>;
--对于未设定为NOT NULL约束的列,可以将右边表达式写为NULL来将值清空。
31.多列清空
UPDATE <表名>
SET <列名1> = <表达式1>,<列名2> = <表达式2>,......
WHERE <条件>;
32.事务
事务是需要在同一个处理单元中执行的一系列更新处理的集合。通过使用事务,可以对数据库中的数据更新处理的提交和取消进行管理。
33.创建事务
START TRANSACTION;
DML语句1;
DML语句2;
......
事务结束语句(COMMIT或者ROLLBACK);
34.COMMIT——提交处理
COMMIT是提交事务包含的全部更新处理的结束指令,相当于文件处理中的覆盖保存。一旦提交,就无法恢复到事务开始之前的样子了。
35.ROLLBACK——取消处理
ROLLBACK是取消事务包含的全部更新处理的结束指令,相当于文件处理中的放弃保存。一旦回滚,数据库就会恢复到事务开始之前的状态。
36.ACID特性
原子性Atomicity:事务结束时,其中所包含的更新处理要么全部执行,要么完全不执行。
一致性Consistency:事务中包含的处理要满足数据库提前设置的约束,如主键约束或者NOT NULL约束等。
隔离性Isolation:保证不同事务之间互不干扰的特性,该特性保证了事务之间不会互相嵌套。
持久性Durability:事务结束后,DBMS能够保证该时间点的数据状态会被保存的特性。
第5章 复杂查询
37.视图
从SQL的角度来看,视图和表是相同的,但表保存的是实际的数据,而视图中保存的是SELECT语句。
优点: 1节省 存储设备的容量;2 可以将频繁使用的SELECT语句保存成视图,就不用每次都重新书写了。
38.创建视图
CREATE VIEW 视图名称 (<视图列名1>,<视图列名2>,......)
AS
<SELECT语句>
39.视图的限制
定义视图时不能使用ORDER BY,因为视图和表一样,数据行都是没有顺序的。
视图和表需要同时进行更新,因此通过汇总得到的视图无法进行更新。
40.删除视图
DROP VIEW 视图名称 (<视图列名1>,<视图列名2>,......)
41.子查询
子查询就是将用来定义视图的SELECT语句直接用于FROM子句当中,子查询并不会保存下来,在执行完之后就会消失。
42.标量子查询
标量子查询就是返回单一值的子查询。能够使用常数或者列名的地方,无论是SELECT子句,GROUP BY 子句,HAVING子句,还是ORDER BY子句,几乎所有的地方都可以使用。
43.关联子查询
关联子查询会在细分的组内进行比较时使用。
关联子查询和GROUP BY子句一样,也可以对表中的数据进行切分。
关联子查询的结合条件如果未出现在子查询之中就会发生错误。
第6章 函数,谓语,CASE表达式
44.函数的种类
算数函数
字符串函数
日期函数
转换函数
聚合函数
45.算数函数
--ABS绝对值
ABS(数值)
--MOD求余
MOD(被除数,除数)
--ROUND 四舍五入
ROUND(对象数值,保留小数的位数)
46.字符串函数
--CONCAT函数 拼接字符串
CONCAT(字符串1,字符串2)
--LENGTH 字符串长度
LENGTH(字符串)
--LOWER 小写转换
LOWER(字符串)
--UPPER 大写转换
UPPER(字符串)
--REPLACE 字符串的替换
REPLACE(对象的字符串,替换前的字符串,替换后的字符串)
--SUBSTRING 字符串的截取
SUBSTRING(对象字符串 FROM 截取的起始位置 FOR 截取的字符数)
47.日期函数
--CURRENT_DATE 当前日期
CURRENT_DATE
--CURRENT_TIME 当前时间
CURRENT_TIME
--CURRENT_TIMESTAMP 当前日期和时间
CURRENT_TIMESTAMP
--EXTRACT 截取日期元素
EXCRACT( 日期元素 FROM 日期)
--该函数的返回值并不是日期类型而是数值类型
48.转换函数
--CAST 类型转换
CAST (转换前的值 AS 想要转换的数据类型)
--COALESCE 将NULL转换为其他值
COALESCE(数据1,数据2,数据3,......)
--该函数会返回可变参数中左侧开始第一个不是NULL的值
49.LIKE谓词
当需要进行字符串的部分一致查询时需要使用LIKE谓词。
% 代表0字符以上的任意字符串
_ 代表任意一个字符
50.BETWEEN谓词
用该谓词进行范围查询。查询包含临界值。
51.IN谓词
通过IN来指定多个参数进行查询,否定形式用 NOT IN 来实现。
IN和NOT IN无法选取出NULL值。
可以将子查询作为IN谓词的参数。
52.CASE表达式
CASE WHEN <求值表达式> THEN <表达式>
WHEN <求值表达式> THEN <表达式>
......
ELSE <>
END
ELSE子句可以省略,END不能省略。
小结
本文整理了SQL基础教程第4-6章的知识点。4-6章介绍了数据更新相关的语句,讲解了事务的特性,引入了非常重要的视图和子查询的知识,最后详细说明了函数和谓词以及CASE表达式的用法。
这三章的知识相对进阶,可以通过本文巩固复习知识点,但想要熟练运用还需要大量的练习。
本文为作者独立整理撰写,如有错漏,欢迎批评指正。