100条常用SQL语句大全
SQL(结构化查询语言)是管理和操作关系型数据库的标准语言。无论是数据分析师、后端开发人员还是数据库管理员,掌握SQL都是必备技能。本文将为您整理100条最常用的SQL语句,涵盖查询、插入、更新、删除等各类操作。
基础查询语句
1. 查询表中所有数据
```sql
SELECT * FROM table_name;
```
2. 查询特定列
```sql
SELECT column1, column2 FROM table_name;
```
3. 带条件的查询
```sql
SELECT * FROM table_name WHERE condition;
```
4. 查询不重复的值
```sql
SELECT DISTINCT column_name FROM table_name;
```
5. 按列排序(升序)
```sql
SELECT * FROM table_name ORDER BY column_name;
```
6. 按列排序(降序)
```sql
SELECT * FROM table_name ORDER BY column_name DESC;
```
7. 多列排序
```sql
SELECT * FROM table_name ORDER BY column1, column2 DESC;
```
8. 限制返回行数
```sql
SELECT * FROM table_name LIMIT 10;
```
9. 分页查询
```sql
SELECT * FROM table_name LIMIT 10 OFFSET 20;
```
10. 使用别名
```sql
SELECT column_name AS alias_name FROM table_name;
```
## 条件查询与运算符
11. 等于条件
```sql
SELECT * FROM table_name WHERE column_name = value;
```
12. 不等于条件
```sql
SELECT * FROM table_name WHERE column_name != value;
```
13. 大于条件
```sql
SELECT * FROM table_name WHERE column_name > value;
```
14. 小于条件
```sql
SELECT * FROM table_name WHERE column_name < value;
```
15. 大于等于条件
```sql
SELECT * FROM table_name WHERE column_name >= value;
```
16. 小于等于条件
```sql
SELECT * FROM table_name WHERE column_name <= value;
```
17. BETWEEN范围查询
```sql
SELECT * FROM table_name WHERE column_name BETWEEN value1 AND value2;
```
18. IN操作符
```sql
SELECT * FROM table_name WHERE column_name IN (value1, value2, value3);
```
19. NOT IN操作符
```sql
SELECT * FROM table_name WHERE column_name NOT IN (value1, value2, value3);
```
20. LIKE模糊查询
```sql
SELECT * FROM table_name WHERE column_name LIKE 'pattern%';
```
21. 多条件AND
```sql
SELECT * FROM table_name WHERE condition1 AND condition2;
```
22. 多条件OR
```sql
SELECT * FROM table_name WHERE condition1 OR condition2;
```
23. NOT条件
```sql
SELECT * FROM table_name WHERE NOT condition;
```
24. IS NULL空值查询
```sql
SELECT * FROM table_name WHERE column_name IS NULL;
```
25. IS NOT NULL非空查询
```sql
SELECT * FROM table_name WHERE column_name IS NOT NULL;
```
## 聚合函数与分组
26. COUNT计数
```sql
SELECT COUNT(*) FROM table_name;
```
27. 列计数
```sql
SELECT COUNT(column_name) FROM table_name;
```
28. SUM求和
```sql
SELECT SUM(column_name) FROM table_name;
```
29. AVG平均值
```sql
SELECT AVG(column_name) FROM table_name;
```
30. MAX最大值
```sql
SELECT MAX(column_name) FROM table_name;
```
31. MIN最小值
```sql
SELECT MIN(column_name) FROM table_name;
```
32. 分组统计
```sql
SELECT column_name, COUNT(*) FROM table_name GROUP BY column_name;
```
33. HAVING分组后筛选
```sql
SELECT column_name, COUNT(*)
FROM table_name
GROUP BY column_name
HAVING COUNT(*) > 10;
```
34. 多列分组
```sql
SELECT column1, column2, AVG(column3)
FROM table_name
GROUP BY column1, column2;
```
35. 分组后排序
```sql
SELECT column_name, COUNT(*) AS count
FROM table_name
GROUP BY column_name
ORDER BY count DESC;
```
## 多表连接查询
36. 内连接
```sql
SELECT * FROM table1 INNER JOIN table2 ON table1.column = table2.column;
```
37. 左连接
```sql
SELECT * FROM table1 LEFT JOIN table2 ON table1.column = table2.column;
```
38. 右连接
```sql
SELECT * FROM table1 RIGHT JOIN table2 ON table1.column = table2.column;
```
39. 全外连接
```sql
SELECT * FROM table1 FULL OUTER JOIN table2 ON table1.column = table2.column;
```
40. 交叉连接
```sql
SELECT * FROM table1 CROSS JOIN table2;
```
41. 自连接
```sql
SELECT a.column, b.column
FROM table_name a, table_name b
WHERE a.common_field = b.common_field;
```
42. 多表连接
```sql
SELECT *
FROM table1
JOIN table2 ON table1.column = table2.column
JOIN table3 ON table2.column = table3.column;
```
43. 使用USING简化连接
```sql
SELECT * FROM table1 JOIN table2 USING (common_column);
```
44. 自然连接
```sql
SELECT * FROM table1 NATURAL JOIN table2;
```
45. 连接查询带条件
```sql
SELECT *
FROM table1
JOIN table2 ON table1.column = table2.column
WHERE table1.column = value;
```
## 子查询与集合操作
46. WHERE子句中的子查询
```sql
SELECT * FROM table1 WHERE column IN (SELECT column FROM table2);
```
47. FROM子句中的子查询
```sql
SELECT * FROM (SELECT column FROM table_name) AS subquery;
```
48. SELECT子句中的子查询
```sql
SELECT column1, (SELECT MAX(column2) FROM table2) FROM table1;
```
49. EXISTS子查询
```sql
SELECT * FROM table1 WHERE EXISTS (SELECT 1 FROM table2 WHERE table2.column = table1.column);
```
50. NOT EXISTS子查询
```sql
SELECT * FROM table1 WHERE NOT EXISTS (SELECT 1 FROM table2 WHERE table2.column = table1.column);
```
51. 并集UNION
```sql
SELECT column FROM table1 UNION SELECT column FROM table2;
```
52. 保留重复的并集UNION ALL
```sql
SELECT column FROM table1 UNION ALL SELECT column FROM table2;
```
53. 交集INTERSECT
```sql
SELECT column FROM table1 INTERSECT SELECT column FROM table2;
```
54. 差集EXCEPT/MINUS
```sql
SELECT column FROM table1 EXCEPT SELECT column FROM table2;
```
55. ANY/SOME操作符
```sql
SELECT * FROM table1 WHERE column > ANY (SELECT column FROM table2);
```
56. ALL操作符
```sql
SELECT * FROM table1 WHERE column > ALL (SELECT column FROM table2);
```
数据操作语言(DML)
57. 插入单行数据
```sql
INSERT INTO table_name (column1, column2) VALUES (value1, value2);
```
58. 插入多行数据
```sql
INSERT INTO table_name (column1, column2)
VALUES (value1, value2), (value3, value4), (value5, value6);
```
59. 插入查询结果
```sql
INSERT INTO table_name (column1, column2)
SELECT column1, column2 FROM another_table;
```
60. 更新数据
```sql
UPDATE table_name SET column1 = value1, column2 = value2 WHERE condition;
```
61. 更新多表数据
```sql
UPDATE table1, table2
SET table1.column = value1, table2.column = value2
WHERE table1.id = table2.id;
```
62. 删除数据
```sql
DELETE FROM table_name WHERE condition;
```
63. 清空表
```sql
TRUNCATE TABLE table_name;
```
64. 合并数据(MERGE/UPSERT)
```sql
INSERT INTO table_name (id, column1, column2)
VALUES (1, 'A', 'B')
ON DUPLICATE KEY UPDATE column1 = 'A', column2 = 'B';
```
65. 条件插入
```sql
INSERT INTO table_name (column1, column2)
SELECT value1, value2 FROM dual
WHERE NOT EXISTS (SELECT 1 FROM table_name WHERE condition);
```
数据定义语言(DDL)
66. 创建数据库
```sql
CREATE DATABASE db_name;
```
67. 创建表
```sql
CREATE TABLE table_name (
column1 datatype constraints,
column2 datatype constraints,
...
);
```
68. 创建表带主键
```sql
CREATE TABLE table_name (
id INT PRIMARY KEY,
name VARCHAR(100)
);
```
69. 创建表带外键
```sql
CREATE TABLE orders (
order_id INT PRIMARY KEY,
customer_id INT,
FOREIGN KEY (customer_id) REFERENCES customers(customer_id)
);
```
70. 添加列
```sql
ALTER TABLE table_name ADD column_name datatype;
```
71. 删除列
```sql
ALTER TABLE table_name DROP COLUMN column_name;
```
72. 修改列数据类型
```sql
ALTER TABLE table_name MODIFY COLUMN column_name new_datatype;
```
73. 添加主键
```sql
ALTER TABLE table_name ADD PRIMARY KEY (column_name);
```
74. 添加外键
```sql
ALTER TABLE table1 ADD FOREIGN KEY (column_name) REFERENCES table2(column_name);
```
75. 创建索引
```sql
CREATE INDEX index_name ON table_name (column_name);
```
76. 创建唯一索引
```sql
CREATE UNIQUE INDEX index_name ON table_name (column_name);
```
77. 删除索引
```sql
DROP INDEX index_name ON table_name;
```
78. 重命名表
```sql
ALTER TABLE old_table RENAME TO new_table;
```
79. 删除表
```sql
DROP TABLE table_name;
```
80. 删除数据库
```sql
DROP DATABASE db_name;
```
视图与存储过程
81. 创建视图
```sql
CREATE VIEW view_name AS SELECT column1, column2 FROM table_name WHERE condition;
```
82. 使用视图
```sql
SELECT * FROM view_name;
```
83. 修改视图
```sql
ALTER VIEW view_name AS SELECT column1, column2 FROM table_name WHERE new_condition;
```
84. 删除视图
```sql
DROP VIEW view_name;
```
85. 创建存储过程
```sql
CREATE PROCEDURE procedure_name(parameters)
BEGIN
-- SQL语句
END;
```
86. 执行存储过程
```sql
CALL procedure_name(parameters);
```
87. 删除存储过程
```sql
DROP PROCEDURE procedure_name;
```
88. 创建函数
```sql
CREATE FUNCTION function_name(parameters) RETURNS datatype
BEGIN
-- 逻辑
RETURN value;
END;
```
89. 使用函数
```sql
SELECT function_name(parameters);
```
90. 删除函数
```sql
DROP FUNCTION function_name;
```
事务控制与高级特性
91. 开始事务
```sql
BEGIN TRANSACTION;
-- 或
START TRANSACTION;
```
92. 提交事务
```sql
COMMIT;
```
93. 回滚事务
```sql
ROLLBACK;
```
94. 设置保存点
```sql
SAVEPOINT savepoint_name;
```
95. 回滚到保存点
```sql
ROLLBACK TO savepoint_name;
```
96. 设置事务隔离级别
```sql
SET TRANSACTION ISOLATION LEVEL READ COMMITTED;
```
97. 递归查询(WITH RECURSIVE)
```sql
WITH RECURSIVE cte_name AS (
-- 基础查询
SELECT ... FROM ...
UNION ALL
-- 递归部分
SELECT ... FROM cte_name JOIN ...
)
SELECT * FROM cte_name;
```
98. 窗口函数
```sql
SELECT column1, column2,
ROW_NUMBER() OVER (PARTITION BY column1 ORDER BY column2) AS row_num
FROM table_name;
```
99. 公用表表达式(CTE)
```sql
WITH cte_name AS (
SELECT column1, column2 FROM table_name
)
SELECT * FROM cte_name;
```
100. 动态SQL执行
```sql
PREPARE stmt FROM 'SELECT * FROM table_name WHERE id = ?';
EXECUTE stmt USING @id;
DEALLOCATE PREPARE stmt;
```
结语
这100条SQL语句涵盖了数据库操作的方方面面,从基础查询到高级特性。掌握这些语句后,您将能够高效地处理大多数数据库操作任务。实际应用中,根据不同的数据库系统(MySQL、PostgreSQL、SQL Server、Oracle等),语法可能略有差异,但核心概念是相通的。
建议收藏本文作为SQL速查手册,在实际工作中遇到问题时快速查找解决方案。SQL技能的提升需要不断实践,建议在真实项目或练习环境中多使用这些语句,加深理解。