SQL基础教程(第二版)
1 数据库和SQL
1.1 数据库管理系统 DBMS**
-
层次数据库 HDB
-
关系数据库 RDB
RDBMS
- Oracle
- SQL server
- DB2
- PostgreSQL
- MySQL
-
面向对象数据库 OODB
-
XML数据库 XMLDB
-
键值存储系统 KVS
1.2 数据库的结构
客户端 ——SQL语句——> 服务器 RDBMS <————> 数据库(数据保存到硬盘等设备上)
<——请求的数据——
1.3 SQL语句及种类
- DDL 数据库定义语言
CREATE
DROP :删除表
ALTER :添加或删除列( 按列)
- DML 数据库操纵语言
SELECT
INSERT :插入记录(按行)
UPDATE :修改数据记录
DELETE :删除记录,表保存
- DCL 数据库控制语言
COMMIT :确认数据库变更
ROLLBACK :取消变更
GRANT :赋予用户操作权限
REVOKE :取消用户操作权限
1.4 数据类型指定及约束
-
数字型 INTEGER / NUMERIC(n)
-
字符型 定长CHAR / VARCHAR可变长
-
日期型
-
NOT NULL 和 PRIMARY KEY
2 基础查询
2.1 SELECT
中文别名使用双引号括起来;
distinct
去重;
where
条件选择;
注释 :单行__ 多行"/" 和"/" 括起来;
2.2 算术运算符和比较运算符
+ - * / // %
所有包含NULL的计算都为NULL
> < = <> >= <=
字符串比较从第一个字符开始
不能对NULL使用比较运算符, 否则为空
2.3 逻辑运算符
NOT AND OR
AND的优先级高于OR
SQL的逻辑运算被称为三值逻辑:真、假、不确定
3 聚合排序
3.1 聚合函数
-
COUNT 单列不计算NULL
-
AVG
-
SUM
-
MAX 日期也可以最大最小值计算
-
MIN
聚合函数会将NULL排除在外,但COUNT除外
3.2 分组 group by
为聚合结果指定条件使用HAVING
而不是WHERE
, HAVING
在group by
之后
3.3 排序 order by
指定多个排序 order by col_a asc, col_b desc
NULL会汇集在开头或者结尾
3.5 书写和执行顺序
书写顺序
SELECT > FROM > WHERE > GROUP BY > HAVING > ORDER BY
执行顺序
FROM > WHERE > GROUP BY > HAVING > SELECT > ORDER BY
4 事务
数据的更新、插入、删除(MySQL)
START TRANSACTION;
DML(INSERT / DELET / UPDATE)
INSERT INTO table_name VALUES (..., [DEFAULT], ...);
...
DELET FROM table_name;
UPDATE table_name
SET ...
[WHERE ...];
COMMIT/ROLLBACK;
插入默认值用 DEFAULT value
来约束
DBMS的事务的四种特性:原子性、统一性、隔离性、持久性。(ACID特性)
5 复杂查询
- 视图
创建视图 CREATE VIEW
视图包含 ”不能使用ORDER BY“ 和 ”可对其进行有限制的更新“两项限制
删除视图 DROP VIEW
- 子查询
标量子查询
- 关联子查询
WHERE
关联,结合条件写在子查询中
6 函数、谓词和case表达式
6.1 函数
- 算数函数
ABS
ROUND(COL, N)
MOD
- 字符串函数
LENGTH
CONCAT(str1, str2) ||
REPLACE(str, target, value)
SUBSTRING(str FROM pos FOR len)
LOWER/ UPPER
- 日期函数
EXTRACT(YEAR/MON/DAY/HOUR/MINUTE/SECOND FROM date)
- 转换函数
CAST(col AS 类型) # 类型转换
COALESCE(NULL, value)
- 聚合函数
6.2 谓词
-
LIKE (% _)
-
BETWEEN
-
IN / NOT IN (无法选出NULL数据, IN包含NULL为空)
-
IS NULL / IS NOT NULL
-
EXISTS
6.3 CASE
CASE
WHEN ... THEN ...
ELSE ...
END
7 集合运算
7.1 表加减法
-
UNION
-
UNION ALL
-
EXCEPT
7.2 表联结
-
INNER JOIN
-
LEFT JOIN
-
RIGHT JOIN
-
FULL JOIN
-
CROSS JOIN
8 SQL高级处理——窗口函数
窗口函数
-
rank 排名相同时跳跃排名,如1, 1, 3, 4, 5, 5, 7
-
row_number 按行数顺序排名,如1, 2, 3, 4, 5
-
dense_rank 排名相同时不跳跃排名,如1, 2, 2, 3, 3, 4, 4, 5
窗口函数语法
<窗口函数> OVER ([PARTITION BY col_1] ORDER BY col_2 )
SQL书籍分享
链接: https://pan.baidu.com/s/1BfvkSeBoQXTOyW4zM5No-Q 提取码: vd8g
网友评论