SQL语句全面知识整理与实战指南
一、SQL概述
SQL(Structured Query Language)是用于管理关系型数据库的标准语言,主要分为以下几类语句:
-
数据查询语言(DQL):SELECT
-
数据操作语言(DML):INSERT, UPDATE, DELETE
-
数据定义语言(DDL):CREATE, ALTER, DROP, RENAME, TRUNCATE
-
数据控制语言(DCL):GRANT, REVOKE
-
事务控制语言(TCL):COMMIT, ROLLBACK, SAVEPOINT
SQL分类示意图
二、数据查询语言(DQL)
SELECT语句
基本语法:
SELECT [DISTINCT] column1, column2, ...
FROM table_name
[WHERE condition]
[GROUP BY column1, column2, ...]
[HAVING group_condition]
[ORDER BY column1 [ASC|DESC], ...]
[LIMIT offset, count];
使用规范:
-
关键字使用大写(非强制但推荐)
-
表名和列名使用小写和下划线命名法
-
复杂的查询使用缩进和换行提高可读性
应用场景:
-
从单表或多表中检索数据
-
对数据进行聚合计算
-
数据排序和筛选
常见错误:
- 在GROUP BY子句中遗漏非聚合列
-- 错误示例
SELECT department, employee_name, AVG(salary)
FROM employees;
-- 正确写法
SELECT department, employee_name, AVG(salary)
FROM employees
GROUP BY department, employee_name;
- 混淆WHERE和HAVING的使用时机
-- WHERE用于行级过滤
SELECT department, AVG(salary)
FROM employees
WHERE hire_date > '2020-01-01'
GROUP BY department;
-- HAVING用于组级过滤
SELECT department, AVG(salary)
FROM employees
GROUP BY department
HAVING AVG(salary) > 5000;
实战示例:
-- 多表连接查询
SELECT e.employee_id, e.name, d.department_name, j.job_title
FROM employees e
JOIN departments d ON e.department_id = d.department_id
JOIN jobs j ON e.job_id = j.job_id
WHERE e.hire_date BETWEEN '2019-01-01' AND '2021-12-31'
ORDER BY d.department_name, e.name;
-- 使用窗口函数
SELECT
employee_id,
name,
salary,
department,
RANK() OVER (PARTITION BY department ORDER BY salary DESC) as dept_rank
FROM employees;
三、数据操作语言(DML)
INSERT语句
基本语法:
-- 单行插入
INSERT INTO table_name (column1, column2, ...)
VALUES (value1