SQL 查询中各个关键字的执行先后顺序:
FROM > ON > JOIN > WHERE > GROUP BY > WITH > HAVING > SELECT > DISTINCT > ORDER BY > LIMIT
介绍 MySQL 表的基础语法,涵盖表的创建、数据插入(含冲突处理)、多场景查询(全列、指定列、表达式)、条件筛选(比较与逻辑运算符)、结果排序、聚合函数(计数、求和、平均、极值)以及日期、字符串和数学函数的使用。通过示例演示核心命令与避坑指南,帮助掌握数据库增删查改及常用函数应用。

SQL 查询中各个关键字的执行先后顺序:
FROM > ON > JOIN > WHERE > GROUP BY > WITH > HAVING > SELECT > DISTINCT > ORDER BY > LIMIT
使用 CREATE TABLE 语法创建表。
CREATE TABLE 表名 (字段名 1 字段类型,字段名 2 字段类型);
示例:创建一个学生信息表,包含学生名、学号(主键)、电话号码(唯一键),且不能为空。首先创建数据库 message,然后创建表结构。
CREATE TABLE student (
id INT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(20) NOT NULL COMMENT '同学姓名',
phone VARCHAR(20) UNIQUE NOT NULL COMMENT '电话号码'
);
核心语法:INSERT INTO 表名 (数据字段) VALUES (插入数据)。
INSERT INTO 表名 (字段名称) VALUES (插入的数据);
如果不填数据字段,默认是全列插入。
填充表名后面的数据字段即可。
INSERT INTO 表名 (字段 1, 字段 2) VALUES (值 1, 值 2), (值 3, 值 4);
如果因为主键或者唯一键的冲突导致插入失败,可以使用 ON DUPLICATE KEY UPDATE 进行更新。
INSERT INTO student(id, name, phone)
VALUES(12321, '王五', '15098706751')
ON DUPLICATE KEY UPDATE id = 09089, phone = '18927390098';
为了方便演示,先创建测试数据:
CREATE TABLE exam_result (
id INT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(20) NOT NULL COMMENT '同学姓名',
chinese FLOAT DEFAULT 0.0 COMMENT '语文成绩',
math FLOAT DEFAULT 0.0 COMMENT '数学成绩',
english FLOAT DEFAULT 0.0 COMMENT '英语成绩'
);
INSERT INTO exam_result (name, chinese, math, english)
VALUES ('唐三藏', 67, 98, 56), ('孙悟空', 87, 78, 77), ('猪悟能', 88, 98, 90),
('曹孟德', 82, 84, 67), ('刘玄德', 55, 85, 45), ('孙权', 70, 73, 78), ('宋公明', 75, 65, 30);
在 SELECT 后面直接使用 * 代表全列查询。
SELECT * FROM 表名;
在 SELECT 后面增加要查询的字段,如果有多个用逗号分开即可。
SELECT 字段 1, 字段 2 FROM 表名;
注意:指定列的查询顺序可以不按表的定义顺序来。
SELECT 后面的查询字段可以带表达式,依然用逗号区分。
SELECT 字段 1 + 字段 2 AS 总分 FROM 表名;
在表达式后面用空格分开,直接写别名。
SELECT name AS 姓名 FROM 表名;
WHERE 子句用于增加筛选条件,语法为:
SELECT ...... FROM ..... WHERE......
包括 =, >, <, >=, <=, <> 等。
包括 AND, OR, NOT。
例如:查找英语高于 60 分的同学。
SELECT * FROM exam_result WHERE english > 60;
查找数学和英语成绩之和超过 120 的同学。
SELECT * FROM exam_result WHERE math + english > 120;
使用 LIKE 进行模糊匹配。
例如:查找姓孙的同学。
SELECT * FROM exam_result WHERE name LIKE '孙%';
没有 ORDER BY 子句的查询,返回的顺序是未定义的。
-- ASC 为升序(从小到大)
-- DESC 为降序(从大到小)
-- 默认为 ASC
SELECT ... FROM .... ORDER BY .......
SELECT * FROM exam_result ORDER BY english DESC;
只有前一个字段的值相同时,才会执行后一个字段的排序。
SELECT * FROM exam_result ORDER BY chinese DESC, math DESC;
聚合函数支持将字段名组合进行参数传递。
COUNT(字段);
SUM(字段);
AVG(字段);
MAX(字段); MIN(字段);
使用方法和聚合函数类似。
CURDATE(): 获取当前日期CURTIME(): 获取当前时间NOW(): 获取当前日期的时间示例:创建一个留言表,记录人留的字段,自动记录时间(可以用 CURRENT_TIMESTAMP 作为缺省值)。
CREATE TABLE message (
id INT PRIMARY KEY AUTO_INCREMENT,
content TEXT,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
常用函数包括连接字符串、查找子串位置等。
CONCAT(str1, str2): 连接字符串INSTR(str, substr): 由 1 开始计算下标,不是从 0 开始包括取整、绝对值、幂运算等常用数学处理函数。

微信公众号「极客日志」,在微信中扫描左侧二维码关注。展示文案:极客日志 zeeklog
在线格式化和美化您的 SQL 查询(它支持各种 SQL 方言)。 在线工具,SQL 美化和格式化在线工具,online
解析 INSERT 等受限 SQL,导出为 CSV、JSON、XML、YAML、HTML 表格(见页内语法说明)。 在线工具,SQL转CSV/JSON/XML在线工具,online
CSV 与 JSON/XML/HTML/TSV/SQL 等互转,单页多 Tab。 在线工具,CSV 工具包在线工具,online
将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online
将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online
将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online