跳到主要内容 SQL 常用语句大全:语法与实战 | 极客日志
SQL
SQL 常用语句大全:语法与实战 整理 SQL 从入门到进阶的核心语句,涵盖 DML 增删改查、DDL 库表结构定义、多表关联查询及事务权限管理。内容包含基础语法、实操示例及注意事项,适用于日常开发场景的速查与学习。
深海蔚蓝 发布于 2026/3/30 更新于 2026/4/13 0 浏览SQL(Structured Query Language,结构化查询语言)是操作关系型数据库的标准语言,无论是数据查询、新增、修改、删除,还是数据库架构设计、权限管理,都离不开 SQL。本文整理了 SQL 从入门到进阶的核心语句,涵盖日常开发 90% 以上的使用场景,既是新手入门的教程,也是资深开发者的实用速查手册。
一、基础入门:SQL 核心四大操作(DML)
DML(Data Manipulation Language,数据操作语言)是最常用的 SQL 子集,主要用于操作数据表中的数据,核心包含 四大操作。
查询(SELECT)、新增(INSERT)、修改(UPDATE)、删除(DELETE)
1. 新增数据(INSERT) 用于向数据表中插入一条或多条新数据,支持直接插入值、从其他表查询结果插入两种场景。
语法 1:直接插入单条 / 多条数据
INSERT INTO 表名 (字段 1 , 字段 2 , 字段 3 , ...) VALUES (值 1 , 值 2 , 值 3 , ...);
INSERT INTO 表名 (字段 1 , 字段 2 , 字段 3 , ...) VALUES (值 1 -1 , 值 1 -2 , 值 1 -3 , ...), (值 2 -1 , 值 2 -2 , 值 2 -3 , ...), (值 3 -1 , 值 3 -2 , 值 3 -3 , ...);
INSERT INTO 表名 VALUES (值 1 , 值 2 , 值 3 , ...);
语法 2:从其他表查询结果插入数据 INSERT INTO 目标表名 (字段 1 , 字段 2 , ...) SELECT 字段 1 , 字段 2 , ... FROM 来源表名 WHERE 筛选条件;
实操示例
INSERT INTO user (id, username, age, create_time) VALUES (1 , 'zhangsan' , 25 , NOW());
INSERT INTO user (id, username, age, create_time) VALUES (2 , 'lisi' , 28 , NOW()), (3 , 'wangwu' , 30 , NOW()), (4 , 'zhaoliu' , 22 , NOW());
INSERT INTO user (id, username, age, create_time) SELECT id, username, age, create_time FROM temp_user WHERE age > 25 ;
2. 查询数据(SELECT) SQL 中最核心、使用最频繁的语句,用于从数据表中查询所需数据,支持简单查询、条件查询、排序、分页等多种场景。
语法 1:简单查询(查询全部 / 指定字段)
SELECT * FROM 表名;
SELECT 字段 1 , 字段 2 , ... FROM 表名;
SELECT 字段 1 AS 别名 1 , 字段 2 别名 2 , ... FROM 表名;
SELECT DISTINCT 字段 1 , 字段 2 , ... FROM 表名;
语法 2:条件查询(WHERE) 通过 WHERE 子句添加筛选条件,只返回满足条件的数据,支持多种运算符。
SELECT 字段 1 , 字段 2 , ... FROM 表名 WHERE 筛选条件;
常用筛选运算符 运算符类型 具体运算符 说明 比较运算符 =、>、<、>=、<=、<>(!=) 等于、大于、小于、大于等于、小于等于、不等于 逻辑运算符 AND、OR、NOT 并且、或者、非 范围运算符 BETWEEN ... AND ... 在某个数值 / 日期范围内 集合运算符 IN、NOT IN 在 / 不在指定集合中 模糊运算符 LIKE、NOT LIKE 模糊匹配,% 匹配任意字符,_ 匹配单个字符 空值判断 IS NULL、IS NOT NULL 判断字段是否为 NULL(注意:不能用 = NULL)
语法 3:排序(ORDER BY) 通过 ORDER BY 子句对查询结果进行排序,默认升序(ASC),可指定降序(DESC)。
SELECT 字段 1 , 字段 2 , ... FROM 表名 WHERE 筛选条件 ORDER BY 字段 1 ASC / DESC , 字段 2 ASC / DESC , ...;
语法 4:分页查询(LIMIT/ROWNUM/Top) 用于限制查询结果的数量,实现分页效果(不同数据库语法略有差异)。
SELECT 字段 1 , 字段 2 , ... FROM 表名 WHERE 筛选条件 ORDER BY 字段 1 DESC LIMIT 0 , 10 ;
SELECT 字段 1 , 字段 2 , ... FROM 表名 WHERE 筛选条件 AND ROWNUM <= 10 ;
SELECT TOP 10 字段 1 , 字段 2 , ... FROM 表名 WHERE 筛选条件 ORDER BY 字段 1 DESC ;
语法 5:聚合查询(聚合函数) 用于对数据进行统计分析,常用聚合函数:COUNT()(统计条数)、SUM()(求和)、AVG()(平均值)、MAX()(最大值)、MIN()(最小值)。
SELECT COUNT (* ) AS 总条数,SUM (字段 1 ) AS 字段 1 总和,AVG (字段 1 ) AS 字段 1 平均值,MAX (字段 1 ) AS 字段 1 最大值,MIN (字段 1 ) AS 字段 1 最小值 FROM 表名 WHERE 筛选条件;
语法 6:分组查询(GROUP BY + HAVING) GROUP BY 用于将数据按指定字段分组,每组返回一条统计结果;HAVING 用于对分组后的结果进行筛选(区别于 WHERE:WHERE 筛选原始数据,HAVING 筛选分组结果)。
SELECT 分组字段,聚合函数 (字段) AS 别名 FROM 表名 WHERE 筛选原始数据的条件 GROUP BY 分组字段 HAVING 筛选分组结果的条件 ORDER BY 别名 DESC ;
实操示例
SELECT username, age FROM user WHERE age > 25 ;
SELECT username, age FROM user WHERE age BETWEEN 25 AND 30 ORDER BY age DESC ;
SELECT username, age FROM user WHERE username LIKE '张%' ;
SELECT age, COUNT (* ) AS user_count FROM user GROUP BY age HAVING user_count > 1 ORDER BY user_count DESC ;
SELECT username, age, create_time FROM user ORDER BY create_time DESC LIMIT 10 , 10 ;
3. 修改数据(UPDATE) 用于修改数据表中已存在的数据,支持单条、多条数据修改,使用时必须加 WHERE 条件(除非要修改全表),否则会误改全表数据 。
语法 UPDATE 表名 SET 字段 1 = 新值 1 , 字段 2 = 新值 2 , ... WHERE 筛选条件;
实操示例
UPDATE user SET age = 26 WHERE id = 1 ;
UPDATE user SET age = age + 1 , create_time = NOW() WHERE username LIKE '李%' ;
4. 删除数据(DELETE) 用于删除数据表中的数据,支持单条、多条数据删除,使用时必须加 WHERE 条件(除非要删除全表),否则会误删全表数据,且删除后难以恢复 。
语法 1:删除指定条件的数据 DELETE FROM 表名 WHERE 筛选条件;
语法 2:删除全表数据(两种方式)
DELETE FROM 表名;
TRUNCATE TABLE 表名;
实操示例
DELETE FROM user WHERE id = 4 ;
DELETE FROM user WHERE age < 20 ;
TRUNCATE TABLE user ;
二、核心进阶:数据库架构与约束(DDL) DDL(Data Definition Language,数据定义语言)用于定义数据库的结构,包括创建、修改、删除数据库、数据表、字段、约束等,是搭建数据库架构的基础。
1. 数据库操作(CREATE/DROP/USE)
CREATE DATABASE IF NOT EXISTS 数据库名 DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
DROP DATABASE IF EXISTS 数据库名;
USE 数据库名;
2. 数据表操作(CREATE/ALTER/DROP)
语法 1:创建数据表(CREATE TABLE) CREATE TABLE IF NOT EXISTS 表名 (
字段 1 数据类型 约束条件,
字段 2 数据类型 约束条件,
字段 3 数据类型 约束条件,
...
额外约束(如主键约束、唯一约束)
) ENGINE= InnoDB DEFAULT CHARSET= utf8mb4 COLLATE = utf8mb4_unicode_ci;
常用数据类型 数据类型 说明 示例 INT 整数类型(可指定长度,支持自增) INT(11)、INT AUTO_INCREMENT VARCHAR(n) 可变长度字符串(n 为最大长度,1-65535) VARCHAR (50)(最多存 50 个字符) CHAR(n) 固定长度字符串(n 为固定长度,1-255) CHAR (10)(无论存多少,都占 10 个字符) DATETIME 日期时间类型(格式:YYYY-MM-DD HH:MM:SS) DATETIME DATE 日期类型(格式:YYYY-MM-DD) DATE DECIMAL(m,n) 高精度小数(m 为总长度,n 为小数位数) DECIMAL (10,2)(最大 10 位数字,2 位小数)
常用约束条件 约束 说明 语法 PRIMARY KEY 主键约束(唯一标识一条记录,非空且唯一) PRIMARY KEY AUTO_INCREMENT 自增约束(仅用于整数类型,配合主键使用) AUTO_INCREMENT NOT NULL 非空约束(字段值不能为 NULL) NOT NULL UNIQUE 唯一约束(字段值唯一,可多个 NULL) UNIQUE DEFAULT 默认值约束(字段未赋值时使用默认值) DEFAULT 0 / DEFAULT NOW() FOREIGN KEY 外键约束(关联另一张表的主键,保证数据一致性) FOREIGN KEY (字段) REFERENCES 关联表 (关联字段)
语法 2:修改数据表(ALTER TABLE) 用于修改表名、添加 / 删除 / 修改字段、添加 / 删除约束。
ALTER TABLE 旧表名 RENAME TO 新表名;
ALTER TABLE 表名 ADD 字段名 数据类型 约束条件 [AFTER 已有字段];
ALTER TABLE 表名 MODIFY 字段名 新数据类型 新约束条件;
ALTER TABLE 表名 CHANGE 旧字段名 新字段名 数据类型 约束条件;
ALTER TABLE 表名 DROP 字段名;
ALTER TABLE 表名 ADD PRIMARY KEY (字段名);
ALTER TABLE 表名 DROP PRIMARY KEY ;
语法 3:删除数据表(DROP TABLE)
实操示例
CREATE TABLE IF NOT EXISTS user (
id INT (11 ) NOT NULL AUTO_INCREMENT COMMENT '用户 ID(主键)' ,
username VARCHAR (50 ) NOT NULL COMMENT '用户名' ,
age INT (3 ) DEFAULT 0 COMMENT '用户年龄' ,
email VARCHAR (100 ) UNIQUE COMMENT '用户邮箱(唯一)' ,
create_time DATETIME DEFAULT NOW() COMMENT '创建时间' ,
PRIMARY KEY (id)
) ENGINE= InnoDB DEFAULT CHARSET= utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT '用户信息表' ;
ALTER TABLE user ADD gender TINYINT(1 ) DEFAULT 0 COMMENT '性别(0:未知,1:男,2:女)' AFTER age;
ALTER TABLE user MODIFY email VARCHAR (150 ) UNIQUE COMMENT '用户邮箱(唯一)' ;
ALTER TABLE user DROP gender;
DROP TABLE IF EXISTS user ;
三、高级技巧:多表关联与子查询 日常开发中,单表查询往往无法满足需求,需要关联多张表进行查询,或通过子查询嵌套获取所需数据。
1. 多表关联查询(JOIN) 核心用于关联多张表,通过共同字段匹配数据,常用关联方式:INNER JOIN(内连接)、LEFT JOIN(左连接)、RIGHT JOIN(右连接)。
核心语法 SELECT 表 1. 字段 1 , 表 2. 字段 2 , ... FROM 表 1 [INNER / LEFT / RIGHT ] JOIN 表 2 ON 表 1. 关联字段 = 表 2. 关联字段
WHERE 额外筛选条件
ORDER BY 排序字段;
三种关联方式说明
INNER JOIN(内连接) :只返回两张表中同时满足关联条件 的数据(交集),最常用。
LEFT JOIN(左连接) :以左表(表 1)为基准,返回左表所有数据,右表(表 2)满足关联条件的数据匹配返回,不满足的返回 NULL。
RIGHT JOIN(右连接) :以右表(表 2)为基准,返回右表所有数据,左表(表 1)满足关联条件的数据匹配返回,不满足的返回 NULL。
实操示例
CREATE TABLE IF NOT EXISTS user (
id INT (11 ) NOT NULL AUTO_INCREMENT PRIMARY KEY ,
username VARCHAR (50 ) NOT NULL ,
age INT (3 ) DEFAULT 0
) ENGINE= InnoDB DEFAULT CHARSET= utf8mb4;
CREATE TABLE IF NOT EXISTS `order ` (
id INT (11 ) NOT NULL AUTO_INCREMENT PRIMARY KEY ,
order_no VARCHAR (30 ) NOT NULL UNIQUE ,
user_id INT (11 ) NOT NULL ,
amount DECIMAL (10 ,2 ) NOT NULL ,
create_time DATETIME DEFAULT NOW(),
FOREIGN KEY (user_id) REFERENCES user (id)
) ENGINE= InnoDB DEFAULT CHARSET= utf8mb4;
SELECT u.username, o.order_no, o.amount FROM user u
INNER JOIN `order ` o ON u.id = o.user_id
ORDER BY o.create_time DESC ;
SELECT u.username, o.order_no, o.amount FROM user u
LEFT JOIN `order ` o ON u.id = o.user_id
ORDER BY u.id ASC ;
2. 子查询 将一个查询结果作为另一个查询的条件、数据源或字段值,嵌套使用,分为标量子查询 、列子查询 、表子查询 。
语法 1:标量子查询(返回单个值,用于 =、>、< 等比较运算符)
SELECT * FROM `order ` WHERE amount = (SELECT MAX (amount) FROM `order `);
语法 2:列子查询(返回一列数据,用于 IN、NOT IN、EXISTS 等运算符)
SELECT * FROM user WHERE id IN (SELECT DISTINCT user_id FROM `order `);
语法 3:表子查询(返回一张临时表,用于 FROM 子句)
SELECT u.username, t.total_amount FROM user u
LEFT JOIN (
SELECT user_id, SUM (amount) AS total_amount FROM `order ` GROUP BY user_id
) t
ON u.id = t.user_id
ORDER BY t.total_amount DESC ;
四、实用补充:事务与权限管理
1. 事务操作(TRANSACTION) 事务是一组不可分割的 SQL 操作集合,要么全部执行成功,要么全部执行失败(原子性),用于保证数据的一致性,常用在转账、订单创建等场景。
核心语法
START TRANSACTION;
UPDATE account SET balance = balance - 100 WHERE id = 1 ;
UPDATE account SET balance = balance + 100 WHERE id = 2 ;
COMMIT ;
ROLLBACK ;
2. 权限管理(GRANT/REVOKE) 用于给数据库用户分配或回收权限,保证数据库的安全性,常用权限:SELECT、INSERT、UPDATE、DELETE、ALL PRIVILEGES。
核心语法
CREATE USER 'username' @'localhost' IDENTIFIED BY '123456' ;
GRANT SELECT , INSERT ON 数据库名.* TO 'username' @'localhost' ;
REVOKE INSERT ON 数据库名.* FROM 'username' @'localhost' ;
FLUSH PRIVILEGES;
五、总结与注意事项
SQL 书写规范 :关键字(SELECT、INSERT 等)建议大写,字段名、表名小写,增强可读性;缩进对齐,便于后期维护。
避免性能陷阱 :尽量不使用 SELECT *,精准查询所需字段;避免在 WHERE 子句中对字段使用函数(会导致索引失效);大批量操作数据时,优先使用批量语句(如批量 INSERT)。
谨慎使用危险操作 :UPDATE、DELETE、DROP、TRUNCATE 等语句,使用前务必加 WHERE 条件(除全表操作外),最好先备份数据或通过事务测试。
不同数据库差异 :本文语法以 MySQL 为主,Oracle、SQL Server 等数据库在分页、函数等方面略有差异,使用时需针对性调整。
这份 SQL 语句大全涵盖了日常开发的核心场景,随着使用熟练度的提升,可进一步学习索引优化、存储过程、视图等高级内容,提升 SQL 编写效率和性能。
微信扫一扫,关注极客日志 微信公众号「极客日志」,在微信中扫描左侧二维码关注。展示文案:极客日志 zeeklog
相关免费在线工具 SQL 美化和格式化 在线格式化和美化您的 SQL 查询(它支持各种 SQL 方言)。 在线工具,SQL 美化和格式化在线工具,online
SQL 转 CSV/JSON/XML 解析 INSERT 等受限 SQL,导出为 CSV、JSON、XML、YAML、HTML 表格(见页内语法说明)。 在线工具,SQL 转 CSV/JSON/XML在线工具,online
CSV 工具包 CSV 与 JSON/XML/HTML/TSV/SQL 等互转,单页多 Tab。 在线工具,CSV 工具包在线工具,online
Base64 字符串编码/解码 将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online
Base64 文件转换器 将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online
Markdown 转 HTML 将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML 转 Markdown 互为补充。 在线工具,Markdown 转 HTML在线工具,online