要深入学习SQL语句,需从基础语法、进阶查询、数据库设计、性能优化、工程实践 五个核心维度系统掌握,以下是具体学习内容:
一、基础核心语法(必掌握)
这是SQL的底层基石,需做到熟练且无死角:
- 数据操作语言(DML) :
- 核心查询:
SELECT(含DISTINCT、WHERE、ORDER BY、LIMIT/OFFSET),是所有SQL场景的核心; - 增删改:
INSERT(单条/批量)、UPDATE(注意条件避免全表更新)、DELETE(同理);
- 核心查询:
- 数据定义语言(DDL) :
- 表操作:
CREATE TABLE(指定数据类型、约束)、ALTER TABLE(增删列、修改类型)、DROP TABLE、TRUNCATE TABLE; - 库操作:
CREATE DATABASE、DROP DATABASE、USE;
- 表操作:
- 数据控制语言(DCL) :
- 权限管理:
GRANT、REVOKE;事务控制:COMMIT、ROLLBACK、SAVEPOINT;
- 权限管理:
- 基础约束 :主键(
PRIMARY KEY)、外键(FOREIGN KEY)、唯一(UNIQUE)、非空(NOT NULL)、默认值(DEFAULT)。
二、进阶查询(区分新手与高手的核心)
掌握后能处理90%以上的复杂业务查询场景:
- 多表关联查询 :
- 内连接(
INNER JOIN)、左/右外连接(LEFT/RIGHT JOIN)、全连接(FULL JOIN,部分数据库如MySQL需用UNION模拟)、自连接(一张表当多张表用); - 笛卡尔积(
CROSS JOIN)的风险与规避;
- 内连接(
- 子查询 :
- 非相关子查询(独立执行)、相关子查询(依赖外部查询,如
EXISTS/NOT EXISTS); - 子查询在
SELECT/FROM/WHERE子句中的应用;
- 非相关子查询(独立执行)、相关子查询(依赖外部查询,如
- 聚合与分组 :
- 聚合函数:
SUM/COUNT/AVG/MAX/MIN(注意COUNT(*)vsCOUNT(列名)的区别); GROUP BY分组(含多字段分组)、HAVING(分组后过滤,区别于WHERE);
- 聚合函数:
- 窗口函数(核心重点) :
- 排序类:
ROW_NUMBER()、RANK()、DENSE_RANK()(TopN、去重排名场景); - 偏移类:
LAG()/LEAD()(取前后N行数据)、FIRST_VALUE()/LAST_VALUE(); - 聚合类:
SUM() OVER()(按窗口聚合,区别于GROUP BY);
- 排序类:
- 通用表表达式(CTE) :
WITH子句(简化复杂子查询,提升可读性); - 条件逻辑与集合操作 :
CASE WHEN(行转列、多条件判断);- 集合运算:
UNION/UNION ALL(合并结果集)、INTERSECT(交集)、EXCEPT(差集)。
三、数据库设计与对象(写好SQL的前提)
SQL的性能和可读性,本质依赖数据库设计:
- 数据库范式:1NF/2NF/3NF(减少冗余)、BCNF,以及反范式设计(性能优先场景的取舍);
- 索引 :
- 基础:聚簇索引、非聚簇索引、唯一索引、复合索引的创建(
CREATE INDEX)与删除; - 核心:索引的设计原则(最左匹配、避免失效场景)、覆盖索引、索引下推;
- 基础:聚簇索引、非聚簇索引、唯一索引、复合索引的创建(
- 数据库对象 :
- 视图(
VIEW):简化查询、权限控制; - 存储过程(
PROCEDURE)、自定义函数(FUNCTION):封装重复逻辑(不同数据库语法差异,如MySQL vs Oracle); - 触发器(
TRIGGER):自动触发业务逻辑(慎用,易引发性能问题)。
- 视图(
四、性能优化(企业级场景核心要求)
能写出"能用"的SQL不够,需写出"高效"的SQL:
- 执行计划分析 :
EXPLAIN(MySQL)、EXPLAIN PLAN(Oracle)解读执行计划,定位全表扫描、索引失效等问题; - 查询优化技巧 :
- 避免
SELECT *、减少JOIN层级、优化WHERE条件(避免OR/NULL判断/函数操作列); - 大数据量分页优化(如基于主键的分页,替代
LIMIT offset);
- 避免
- 锁与事务 :
- 事务隔离级别(读未提交、读已提交、可重复读、串行化)及解决的问题(脏读、不可重复读、幻读);
- 行锁、表锁、间隙锁的触发场景与规避死锁;
- 分库分表/分区 :
- 水平分表、垂直分表的SQL适配,分区表(
PARTITION BY)的使用(如按时间分区)。
- 水平分表、垂直分表的SQL适配,分区表(
五、工程实践与方言适配
SQL是标准,但不同数据库有"方言",需结合实际场景掌握:
- 主流数据库差异 :
- MySQL(InnoDB引擎特性、
LIMIT、ON DUPLICATE KEY UPDATE); - Oracle(PL/SQL、
ROWNUM、序列SEQUENCE); - PostgreSQL(JSON/JSONB支持、
LIMIT/OFFSET、数组类型); - SQL Server(
TOP、IDENTITY自增);
- MySQL(InnoDB引擎特性、
- 实战场景 :
- 数据清洗(去重、空值处理、格式转换)、ETL中的SQL应用;
- 结合编程语言(Python/Java)执行SQL、预处理语句(防止SQL注入);
- 问题排查:慢查询日志分析、死锁排查、SQL注入防护。