在真实的数据库客户端里学 SQL
本课程会在数据库客户端中直接运行示例。示例商城数据库含 23 张表、约五万行数据,因此可以用真实数据观察连接和 GROUP BY 的结果。
大多数例子下面都有 在 Planche 中运行 按钮。点击后会打开已载入示例数据库和查询的应用。无需安装或注册,数据只在浏览器中处理。
基础路线
- 数据库长什么样 表、行、列、NULL、主键、运行一条查询
- 读取数据:SELECT、WHERE、ORDER BY、LIMIT SELECT、选择列、WHERE、ORDER BY、LIMIT、列别名
- 筛选行:完整的 WHERE AND / OR 优先级、IN、BETWEEN、LIKE、IS NULL
- 把表拼起来:JOIN INNER JOIN、多表连接、LEFT JOIN、ON 与 WHERE、自连接
- 汇总行:GROUP BY COUNT、SUM、AVG、MIN、MAX、GROUP BY、HAVING、COUNT DISTINCT
- 查询里的查询:子查询 标量子查询、IN、EXISTS、NOT EXISTS、派生表、相关子查询
- 分步骤的查询与跨行计算:CTE 和窗口函数 WITH、串联 CTE、ROW_NUMBER、RANK、DENSE_RANK、SUM OVER、LAG
- 修改数据:INSERT、UPDATE、DELETE INSERT、UPDATE、DELETE、主键冲突、BEGIN / COMMIT / ROLLBACK
- 为什么这么慢:索引和 EXPLAIN EXPLAIN QUERY PLAN、全表扫描、索引查找、能用上索引的条件
各方言写法
- 分页:LIMIT、OFFSET … FETCH、TOP、ROWNUM LIMIT / OFFSET、OFFSET … FETCH、TOP、ROWNUM、键集分页
- upsert:插入一行,或者更新已经在那儿的那一行 ON CONFLICT DO UPDATE / DO NOTHING、ON DUPLICATE KEY UPDATE、MERGE、INSERT OR REPLACE
- 字符串和日期,逐个引擎看 拼接、日期格式化、日期差、COALESCE / IFNULL / ISNULL / NVL
- 跨两张表的 UPDATE 和 DELETE 子查询与 EXISTS 写法、UPDATE … JOIN、UPDATE … FROM、DELETE … USING、可更新的连接视图