SQL 查询中各个关键字的执行先后顺序:
FROM > ON > JOIN > WHERE > GROUP BY > WITH > HAVING > SELECT > DISTINCT > ORDER BY > LIMIT
一、数据增操作
1. 基本创建
创建一张表使用 CREATE TABLE 语法。
CREATE TABLE 表名 (字段名 1 字段类型,字段名 2 字段类型);
例如创建一个学生信息表,包含学生名、学号(主键)、电话号码(唯一键),且都不能为空。首先创建数据库 message。

现在创建表,定义字段、数据类型及约束。

2. 单行数据 + 全列插入
插入核心语法:INSERT INTO 表名(数据字段)VALUES(插入数据)。
INSERT INTO 表名 (字段名称) VALUES (插入的数据);
如果不填数据字段,默认是全列插入。

显示结果:

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);

1. 全列查询
通常 SELECT 后面直接使用 * 代表全列查询。

2. 指定列查询
在 SELECT 后面增加要查询的字段,如果有多个用逗号分开即可查询指定的字段。
注意:指定列的查询顺序可以不按表的定义顺序来。

3. 按表达式查询
SELECT 后面的查询字段可以带表达式,依然用逗号区分。


4. 给查询结果更换别名
在表达式后面用空格分开,直接写别名。

三、WHERE 条件
SELECT 后面的语句是用来指定查找的内容,比较运算符就是对内容增加比较逻辑,语法为:
SELECT ...... FROM ..... WHERE......
快速上手:WHERE 之后空行,再按照语言的表达输出表达式即可。
1. 比较运算符

2. 逻辑运算符

3. 举例:比较 + 逻辑运算符
例如:对下面的表完成数据指定查询。

查找英语高于 60 分的同学:

查找数学和英语成绩之和超过 120 的同学:

语文和数学成绩之和,在 [120~150] 的同学:

4. 举例:数据匹配
例如:查找姓孙的同学:

例如:找孙某同学:

四、结果排序
语法:没有 ORDER BY 子句的查询,返回的顺序是未定义的,永远不要依赖这个顺序。
WHERE 是用来增加筛选条件的,这里的排序不属于筛选!
-- ASC 为升序(从小到大)
-- DESC 为降序(从大到小)
-- 默认为 ASC
SELECT ... FROM .... ORDER BY .......
1. 单字段排序
例如:查英语降序:

2. 多字段排序
注意:只有前一个字段的值相同时,才会执行后一个字段的排序。

五、聚合函数
这些聚合函数支持将字段名组合进行参数传递,具体如下参考:
1. 返回查询数据数量
COUNT(字段);
例如:查有几个人。

2. 返回查询的数据总和
SUM(字段);
例如:查语文和数学成绩总和。

3. 查平均值
AVG(字段);
例子:查语文平均成绩。

4. 查最大/小值
MAX/MIN(字段);
例如:查数学最高分。

六、日期函数
1. 接口
下面是日期函数调用,使用方法和聚合函数一样:

举例:
获取当前日期:

获取当前时间:

获取当前日期的时间:

创建一个留言表:记录人留的字段,自动记录时间(可以用
CURRENT_TIMESTAMP作为缺省值)

自动补充时间:

形成留言的效果:

七、字符串函数
1. 接口

举例:
连接字符串:

查询:
INSTR是由 1 开始计算下标,不是从 0 开始。

搭配字段使用:

八、数学函数



