⚡ 智能摘要
这份 SQL 速查表收集了开发人员日常工作中常用的命令,并按任务进行了分类。每个部分都提供了精确的语法和简明的描述,涵盖了数据库创建、数据类型、查询、筛选、连接和索引等内容。
- 🗄️ 结构化命令: CREATE DATABASE、CREATE TABLE、ALTER、RENAME 和 DROP 定义和重塑模式。
- 🔢 资料类型: 数值、文本、日期和二进制类型设置每一列的存储大小和有效范围。
- 🔎 检索命令: 使用 WHERE、IN、LIKE 和 REGEXP 的 SELECT 语句可以将结果集缩小到重要的行。
- ✍️ 修改命令: INSERT、UPDATE 和 DELETE 都会更改存储的行,并且每个操作都接受一个可选条件。
- 📊 聚合命令: 按 COUNT、MIN、MAX、SUM 和 GROUP BY 分组 AVG 汇总数据,并筛选分组。
- 🔗 组合指令: JOIN 将相邻的表合并,而 UNION 将两个查询的结果堆叠在一起。

创建数据库和表命令
每个 SQL 会话都以一个数据库和至少一个用于保存行的表开始。
| 命令 |
描述 |
CREATE DATABASE database1; |
创建数据库 |
CREATE DATABASE IF NOT EXISTS database1; |
IF NOT EXISTS 允许您指示 MySQL 服务器在创建数据库之前会检查是否存在名称相似的数据库。 |
CREATE DATABASE IF NOT EXISTS database1 CHARACTER SET latin1 COLLATE latin1_swedish_ci; |
latin1 字符集使用 latin1_swedish_ci 排序规则,即瑞典语不区分大小写的排序规则。 |
SHOW DATABASES; |
运行此 SQL 命令即可查看现有数据库列表。 |
CREATE TABLE [IF NOT EXISTS] TableName (fieldname dataType [optional parameters]) ENGINE = storage Engine; |
创建表语法 |
SQL 数据类型速查表
列的数据类型决定了它可以存储的内容以及每一行占用的空间大小。
数字数据类型
| 命令 |
描述 |
TINYINT( ) |
-128 至 127 为正常值,0 至 255 为无符号值。 |
SMALLINT( ) |
-32768 至 32767 正常
0 至 65535 无符号。 |
MEDIUMINT( ) |
-8388608 至 8388607 正常
0 至 16777215 无符号。 |
INT( ) |
-2147483648 至 2147483647 正常
0 至 4294967295 无符号。 |
BIGINT( ) |
-9223372036854775808 至 9223372036854775807 正常
0 至 18446744073709551615 无符号。 |
FLOAT |
带有浮动小数点的小近似数。 |
DOUBLE( , ) |
一个带有浮点小数点的较大近似值。 |
DECIMAL( , ) |
精确的定点数。是存储货币值的首选方式。 |
文本数据类型
| 命令 |
描述 |
CHAR( ) |
长度固定的段落,长度为 0 到 255 个字符。 |
VARCHAR( ) |
长度可变的段落,长度范围为 0 到 65535 个字符。 |
TINYTEXT |
最大长度为 255 个字符的字符串。 |
TEXT |
最大长度为 65535 个字符的字符串。 |
BLOB |
最大长度为 65535 字节的二进制数据。 |
MEDIUMTEXT |
最大长度为 16777215 个字符的字符串。 |
MEDIUMBLOB |
最大长度为 16777215 字节的二进制数据。 |
LONGTEXT |
最大长度为 4294967295 个字符的字符串。 |
LONGBLOB |
最大长度为 4294967295 字节的二进制数据。 |
日期/时间数据类型
| 命令 |
描述 |
DATE |
YYYY-MM-DD |
DATETIME |
YYYY-MM-DD HH:MM:SS |
TIMESTAMP |
YYYY-MM-DD HH:MM:SS,以 UTC 格式存储,并转换为会话时区。 |
TIME |
时:分:秒 |
其他数据类型
| 命令 |
描述 |
ENUM |
从预定义的文本值列表中选择一个文本值进行存储。 |
SET |
它还用于存储从预定义文本值列表中选择的文本值。它可以存储多个值。 |
BOOL |
TINYINT(1) 的同义词,用于存储布尔值。 |
BINARY |
与 CHAR 类似;区别在于文本以二进制格式存储。 |
VARBINARY |
与 VARCHAR 类似;区别在于文本以二进制格式存储。 |
SQL SELECT 语句命令
SELECT 是用于从表中读取行的命令。
| 命令 |
描述 |
SELECT * FROM table1; |
从表中选择每一列。 |
SELECT t1, t2, t3, t4 FROM table1; |
我们只对获取 t1、t2、t3 和 t4 字段感兴趣。 |
SELECT CONCAT(t1, ' (', t3, ')'), t4 FROM table2; |
将列值合并到单个输出列中 |
SELECT column_name | value | expression [AS] alias_name; |
别名字段名称语法 |
带有 AND、OR、IN、NOT IN 命令的 SQL WHERE 子句
WHERE 子句用于筛选行,下面的运算符可以组合使用。
| 命令 |
描述 |
SELECT * FROM tableName WHERE condition; |
WHERE 子句语法 |
SELECT * FROM table1 WHERE t1 = 2 AND t2 = 2008; |
WHERE 子句与 AND 逻辑运算符结合使用 |
SELECT * FROM table1 WHERE t1 = 1 OR t1 = 2; |
WHERE 子句与 OR 逻辑运算符结合使用 |
SELECT * FROM table2 WHERE t1 IN (1,2,3); |
WHERE 子句与 IN 关键字结合使用 |
SELECT * FROM table2 WHERE t1 NOT IN (1,2,3); |
WHERE 子句与 NOT IN 关键字结合使用 |
SELECT * FROM table2 WHERE t3 = 'Female'; |
WHERE 子句与等于 (=) 比较运算符结合使用 |
SELECT * FROM table3 WHERE t3 > 2000; |
WHERE 子句与大于 (>) 比较运算符结合使用 |
SELECT * FROM table1 WHERE t1 <> 1; |
WHERE 子句与不等于 (<>) 比较运算符结合使用 |
SQL 命令 INSERT INTO 表
| 命令 |
描述 |
INSERT INTO table_name(column_1, column_2, ...) VALUES (value_1, value_2, ...); |
SQL INSERT 命令的基本语法 |
INSERT INTO table1 (t1,t2,t3,t4) VALUES (X1,X2,X3,X4); |
将数据插入表中 |
INSERT INTO table_1 SELECT * FROM table_2; |
从另一个表插入数据到一个表中 |
SQL DELETE 命令
| 命令 |
描述 |
DELETE FROM table_name [WHERE condition]; |
删除一行 MySQL |
SQL更新命令
| 命令 |
描述 |
UPDATE table_name SET column_name = new_value [WHERE condition]; |
更新命令语法 |
SQL 中的 ORDER BY:DESC 和 ASC 命令
| 命令 |
描述 |
SELECT statement... [WHERE condition | GROUP BY field_name(s) HAVING condition] ORDER BY field_name(s) [ASC | DESC]; |
ORDER BY 子句基本语法 |
SELECT {fieldName(s) | *} FROM tableName(s) [WHERE condition] ORDER BY fieldname(s) ASC | DESC [LIMIT N]; |
DESC 和 ASC 语法 |
SQL GROUP BY 和 HAVING 子句命令
通过...分组 将行折叠成组,并在形成组后进行 HAVING 筛选。
通过...分组
| 命令 |
描述 |
SELECT statements... GROUP BY column_name1[, column_name2, ...] [HAVING condition]; |
GROUP BY 语法 |
的Grouping 和聚合函数
| 命令 |
描述 |
SELECT t2, COUNT(t1) FROM table1 GROUP BY t2; |
假设我们想要数据库中 t2 列值的总数。 |
HAVING 子句
| 命令 |
描述 |
SELECT * FROM table2 GROUP BY t1_id, t4 HAVING t1_id = x1; |
返回表2中t1_id为x1的所有行的t4值。 |
SQL 通配符命令为 Like、NOT Like、Escape、( %)、( _ )
通配符允许 LIKE 匹配部分字符串。
% 是百分比通配符命令。 MySQL
| 命令 |
描述 |
SELECT statements... WHERE fieldname LIKE 'xxx%'; |
% 百分比通配符的基本语法,可匹配任意数量的字符 |
_ 下划线通配符命令
| 命令 |
描述 |
SELECT * FROM table1 WHERE t3 LIKE 'x2_'; |
下划线与一个字符完全匹配。 |
不像通配符命令
| 命令 |
描述 |
SELECT * FROM table1 WHERE t3 NOT LIKE 'x2_'; |
假设我们想要查找表 1 中 t3 值与模式不匹配的行。 |
转义关键字通配符命令
| 命令 |
描述 |
LIKE '67#%' ESCAPE '#'; |
检查字符串“67%”,因为 # 会转义通配符。 |
SQL 正则表达式 (REGEXP)
| 命令 |
描述 |
SELECT statements... WHERE fieldname REGEXP 'pattern'; |
正则表达式匹配的基本语法 |
正则表达式元字符
| 命令 |
描述 |
* |
星号 (*) 元字符匹配其前面字符串的零个或多个实例。 |
+ |
加号(+)元字符匹配其前面字符串的一个或多个实例。 |
? |
问号(?)元字符匹配其前面字符串的零个或一个实例。 |
. |
点(.)元字符匹配除换行符之外的任何单个字符。 |
[abc] |
字符列表 [abc] 匹配任何包含在其中的字符。 |
[^abc] |
字符列表 [^abc] 匹配除其所括字符之外的任何字符。 |
[A-Z] |
[AZ] 范围匹配任何大写字母。 |
[a-z] |
[az] 范围匹配任何小写字母。 |
[0-9] |
[0-9] 范围对应 0 到 9 之间的任何数字。 |
^ |
插入符号 (^) 将比赛锚定在比赛的开头。 |
| |
竖线(|)用于分隔不同的选项。 |
[[:<:]] |
[[:<:]] 标记用于匹配单词的开头。 |
[[:>:]] |
[[:>:]] 标记用于匹配单词的结尾。 |
[:class:] |
[:class:] 标记匹配字符类,例如 [:alpha:] 表示字母,[:space:] 表示空格,[:punct:] 表示标点符号,[:upper:] 表示大写字母。 |
SQL 函数命令
字符串函数
| 命令 |
描述 |
SELECT t1_id, t2, UCASE(t2) FROM table1; |
UCASE 函数接受一个字符串作为参数,并将所有字母转换为大写。 |
数值函数
| 命令 |
描述 |
例如: |
DIV |
整数除法 |
SELECT 23 DIV 6; |
/ |
分部 |
SELECT 23 / 6; |
- |
小组tracTION |
SELECT 23 - 6; |
+ |
增加 |
SELECT 23 + 6; |
* |
乘法 |
SELECT 23 * 6 AS multiplication_result; |
% or MOD |
系数 |
SELECT 23 % 6; or SELECT 23 MOD 6; |
FLOOR |
去掉数字的小数部分,并向下取整到最接近的整数。 |
SELECT FLOOR(23 / 6) AS floor_result; |
ROUND |
将带有小数位的数字四舍五入到最接近的整数。 |
SELECT ROUND(23 / 6) AS round_result; |
存储函数
| 命令 |
描述 |
CREATE FUNCTION sf_name ([parameter(s)]) |
强制性的。说明 MySQL 服务器创建一个名为 sf_name 的函数,其中可选参数在括号中定义。 |
RETURNS data type |
必填项。指定函数返回的数据类型。 |
DETERMINISTIC |
无论向该函数提供相同的参数,它都会返回相同的值。 |
STATEMENTS |
函数执行的程序代码。 |
SQL 聚合函数命令
| 命令 |
描述 |
SELECT COUNT(t1_id) FROM table1 WHERE t1_id = 2; |
计数功能 |
SELECT MIN(t3) FROM table2; |
MIN功能 |
SELECT MAX(t3) FROM table2; |
MAX功能 |
SELECT SUM(t4) FROM table3; |
SUM功能 |
SELECT AVG(t4) FROM table3; |
AVG function |
SQL IS NULL 和 IS NOT NULL 命令
A 无 是一个缺失值,因此必须使用 IS NULL 而不是 equals 运算符进行测试。
| 命令 |
描述 |
SELECT COUNT(t3) FROM table1; |
COUNT 函数会忽略列中的 NULL 值。 |
CREATE TABLE table2(
t1_number int NOT NULL,
t2_names varchar(255),
t3 varchar(6)
); |
NOT NULL 禁止列中出现空值。 |
column_name IS NULL
column_name IS NOT NULL |
NULL 关键字基本语法 |
SELECT * FROM table1 WHERE t2_number IS NULL; |
IS NULL 的示例 |
SELECT * FROM table1 WHERE t2_number IS NOT NULL; |
IS NOT NULL 的示例 |
SQL AUTO_INCREMENT 命令
| 命令 |
描述 |
CREATE TABLE table1 (
t1_id int(11) AUTO_INCREMENT,
t2_name varchar(150) DEFAULT NULL,
t3 varchar(500) DEFAULT NULL,
PRIMARY KEY (t1_id)
); |
自动增量语法 |
SQL — ALTER、DROP、RENAME、MODIFY
这些命令会修改一个已经包含数据的表。
| 命令 |
描述 |
ALTER TABLE table_name ADD COLUMN column_name data_type; |
ALTER 语法 |
DROP TABLE sample_table; |
DROP TABLE 语法 |
RENAME TABLE current_table_name TO new_table_name; |
RENAME 命令语法 |
ALTER TABLE table1 CHANGE COLUMN t1_names t1name char(250) NOT NULL; |
更改关键字 |
ALTER TABLE table1 MODIFY t1name char(50) NOT NULL; |
修改关键字 |
ALTER TABLE table1 ADD t4 date NULL AFTER t3; |
关键字之后 |
SQL 限制和偏移
| 命令 |
描述 |
SELECT {fieldname(s) | *} FROM tableName(s) [WHERE condition] LIMIT N; |
LIMIT 关键字语法 |
SELECT * FROM table1 LIMIT 1, 2; |
LIMIT 查询中的偏移量:跳过 1 行,然后返回 2 行。 |
SQL 子查询命令
| 命令 |
描述 |
SELECT t1_name FROM table1 WHERE category_id = (SELECT MIN(t1_id) FROM table2); |
子查询 |
SQL JOINS 命令
JOINS 把两个表中的列合并到一个结果集中。
| 命令 |
描述 |
SELECT * FROM table1 CROSS JOIN table2; |
交叉连接 |
SELECT table1.t1, table1.t2, table2.t1
FROM table1, table2
WHERE table2.id = table1.table2_id; |
INNER JOIN |
SELECT A.t1, B.t2, B.t3
FROM table2 AS A
LEFT JOIN table1 AS B
ON B.table2_id = A.id; |
LEFT JOIN |
SELECT A.t1, A.t2, B.t3
FROM table1 AS A
RIGHT JOIN table2 AS B
ON B.id = A.table2_id; |
正确加入 |
SELECT A.t1, B.t2, B.t3
FROM table2 AS A
LEFT JOIN table1 AS B
USING (table2_id); |
“ON” 和 “USING” 子句 |
SQL UNION 命令
UNION 将两个查询的行堆叠在一起,而 JOIN 则将它们扩展到更多列中。
| 命令 |
描述 |
SELECT column1, column2 FROM table1
UNION
SELECT column1, column2 FROM table2; |
UNION 语法。重复行将被删除。 |
SELECT column1, column2 FROM table1
UNION ALL
SELECT column1, column2 FROM table2; |
UNION ALL 会保留重复的行。 |
视图中的 SQL 命令
观看数 将查询语句以特定名称存储起来,以便像表一样重复使用。
| 命令 |
描述 |
CREATE VIEW view_name AS SELECT statement; |
视图语法 |
DROP VIEW general_v_movie_rentals; |
Dropping 意见 |
SQL 索引命令
索引是一种查找结构,它可以大大加快对列的搜索速度。
| 命令 |
描述 |
CREATE INDEX id_index ON table_name(column_name); |
添加索引基本语法 |
DROP INDEX index_id ON table_name; |
删除索引基本语法 |
常见问题