SQL语句
2025年12月5日大约 5 分钟
SQL语句
- SQL分类:
| 分类 | 说明 |
|---|---|
| Data Definition Language (DDL) | 数据库定义语言,用于定义数据库对象(数据库,表,索引等)的结构和模式。 |
| Data Manipulation Language (DML) | 数据操作语言,用于对数据库中的数据进行插入、更新和删除操作。 |
| Data Query Language (DQL) | 数据查询语言,主要用于从数据库中检索数据,最常用的语句是SELECT。 |
| Data Control Language (DCL) | 数据控制语言,用于控制数据库的访问权限和安全性。 |
DDL语句
数据库操作
- 查询
- 查询所有数据库
SHOW DATABASES; - 查询当前使用的数据库
SELECT DATABASE();
- 查询所有数据库
- 创建数据库
CREATE DATABASE [IF NOT EXISTS] 数据库名 [DEFAULT CHARACTER 字符集] [COLLATE 排序规则]; - 删除数据库
DROP DATABASE [IF EXISTS] 数据库名; - 使用数据库
USE 数据库名;
表操作
- 查询
- 查询当前数据库的所有表
SHOW TABLES; - 查询表结构
DESC 表名; - 查询创建表的语句
SHOW CREATE TABLE 表名;
- 查询当前数据库的所有表
- 创建表
CREATE TABLE [IF NOT EXISTS] 表名 ( 字段1 数据类型 [约束条件], 字段2 数据类型 [约束条件], ... [表级约束条件] ) [ENGINE=存储引擎] [DEFAULT CHARSET=字符集] [COLLATE=排序规则]; - 修改表
- 添加字段
ALTER TABLE 表名 ADD 字段名 数据类型 [约束条件] [AFTER 位置]; - 修改数据类型
ALTER TABLE 表名 MODIFY 字段名 新数据类型 [约束条件]; - 修改字段名和数据类型
ALTER TABLE 表名 CHANGE 旧字段名 新字段名 数据类型 [约束条件]; - 删除字段
ALTER TABLE 表名 DROP 字段名; - 重命名表
ALTER TABLE 旧表名 RENAME TO 新表名;
- 添加字段
- 删除表
DROP TABLE [IF EXISTS] 表名; - 删除并重新创建表
TRUNCATE TABLE 表名;
DML语句
插入数据
- 给指定字段插入数据
INSERT INTO 表名 (字段1, 字段2, ...) VALUES (值1, 值2, ...); - 给所有字段插入数据
INSERT INTO 表名 VALUES (值1, 值2, ...); - 批量插入数据
INSERT INTO 表名 (字段1, 字段2, ...) VALUES (值1a, 值2a, ...), (值1b, 值2b, ...), ...;
注意
- 插入数据时,确保字段和值的顺序和数量一致。
- 字符串和日期类型的值需要包含在引号中。
- 插入的数据大小,应该在字段的规定范围内。
更新数据(修改)
UPDATE 表名 SET 字段1=新值1, 字段2=新值2, ... [WHERE 条件];注意
- 如果没有指定WHERE条件,整张表的数据都会被修改。
删除数据
DELETE FROM 表名 [WHERE 条件];注意
- 如果没有指定WHERE条件,整张表的数据都会被删除。
- DELETE语句不能删除某一个字段的值(但是可以使用UPDATE设置为NULL)。
DQL语句
DQL:数据库查询语言(Data Query Language),用于查询数据库中的记录,查询关键字
SELECT。
- 语法
SELECT
字段列表
FROM
表名列表
WHERE
条件列表
GROUP BY
分组字段列表
HAVING
分组后条件列表
ORDER BY
排序字段列表
LIMIT
分页参数;基本查询
- 查询多个字段
SELECT 字段1, 字段2, ... FROM 表名; - 查询所有字段
SELECT * FROM 表名; - 设置别名(可选,AS可省略)
SELECT 字段1 AS 别名1, 字段2 AS 别名2, ... FROM 表名 AS 别名; - 去除重复记录
SELECT DISTINCT 字段 FROM 表名;
条件查询(WHERE)
- 语法
SELECT 字段列表 FROM 表名 WHERE 条件; - 常用条件运算符
| 比较运算符 | 说明 | 示例 |
|---|---|---|
= | 等于 | WHERE age = 30 |
!= 或 <> | 不等于 | WHERE status != 'active' |
> | 大于 | WHERE salary > 5000 |
< | 小于 | WHERE age < 18 |
>= | 大于等于 | WHERE score >= 60 |
<= | 小于等于 | WHERE price <= 100 |
BETWEEN ... AND ... | 在...之间 | WHERE age BETWEEN 18 AND 30 |
IN | 在...之中 | WHERE country IN ('USA', 'Canada') |
LIKE | 模糊匹配(_匹配单个字符,%匹配任意字符) | WHERE name LIKE 'J%n' |
IS NULL | 判断为空 | WHERE address IS NULL |
| 逻辑运算符 | 说明 | 示例 |
|---|---|---|
AND 或 && | 并且,同时满足 | WHERE age > 18 AND status = 'A' |
OR 或 || | 或者,满足其一即可 | WHERE city = 'New York' OR city = 'Los Angeles' |
NOT 或 ! | 非,取反 | WHERE NOT (status = 'inactive') |
聚合函数(COUNT, SUM, AVG, MAX, MIN)
介绍:将一列数据作为一个整体,进行纵向计算。
常用聚合函数
聚合函数 说明 示例 COUNT 计算记录的数量(行数) SELECT COUNT(*) FROM employees;SUM 计算数值的总和(求和) SELECT SUM(salary) FROM employees;AVG 计算数值的平均值 SELECT AVG(age) FROM employees;MAX 查找最大值 SELECT MAX(price) FROM products;MIN 查找最小值 SELECT MIN(score) FROM exams;语法
SELECT 聚合函数(字段列表) FROM 表名 [WHERE 条件];
分组查询(GROUP BY)
- 语法
SELECT 字段列表 FROM 表名 [WHERE 条件] GROUP BY 分组字段 [HAVING 分组后过滤条件]; WHERE与HAVING的区别- 执行时机不同:
WHERE在分组前过滤数据。HAVING在分组后过滤数据。
- 判断条件不同:
WHERE作用于行数据,不能使用聚合函数。HAVING作用于分组结果,可以使用聚合函数。
- 执行时机不同:
排序查询(ORDER BY)
- 语法
SELECT 字段列表 FROM 表名 ORDER BY 排序字段1 [ASC|DESC] , 排序字段2 [ASC|DESC], ...; - 排序方式
- 升序(ASC):默认方式,从小到大排序。
- 降序(DESC):从大到小排序。
注意
- 多字段排序时,先按第一个字段排序,如果第一个字段相同时,再按第二个字段排序,以此类推。
分页查询(LIMIT)
- 语法
SELECT 字段列表 FROM 表名 LIMIT 起始索引, 查询记录数;
注意
- 起始索引从0开始计数, 起始索引计算方式:
起始索引 = (页码 - 1) * 每页显示记录数。 - 分页查询是数据库的方言,不同数据库的语法可能有所不同,以上语法适用于MySQL数据库。
- 如果查询第一页数据,可以省略起始索引,直接使用
LIMIT 查询记录数。