MySQL基本查询
一.create
1.1 单行数据 + 全列插入
1.2 多行数据 + 指定列插入
1.3插入否则更新
1.4替换
二.Retrieve
2.1.SELECT列
2.1.1全列查询
2.1.2指定列查询
2.1.3查询字段为表达式
2.1.4 为查询结果指定别名
2.1.5结果去重
2.2WHERE 条件
2.2.1比较运算符
2.2.3逻辑运算符
2.3结果排序
2.4 筛选分页结果
三.Update
四.Delete
4.1删除数据
4.2截断表
五.聚合函数
一.create
语法:
INSERT [INTO] table_name
[(column [, column] ...)]
VALUES (value_list) [, (value_list)] ...
value_list: value, [, value] ...
案例:
-- 创建一张学生表
CREATE TABLE students (
id INT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
sn INT NOT NULL UNIQUE COMMENT '学号',
name VARCHAR(20) NOT NULL,
qq VARCHAR(20)
);
1.1 单行数据 + 全列插入
-- 插入两条记录,value_list 数量必须和定义表的列的数量及顺序一致
-- 注意,这里在插入的时候,也可以不用指定id,mysql会使用默认的值进行自增。
INSERT INTO students VALUES (100, 10000, '唐三藏', NULL);
INSERT INTO students VALUES (101, 10001, '孙悟空', '11111');
1.2 多行数据 + 指定列插入
-- 插入两条记录,value_list 数量必须和指定列数量及顺序一致
INSERT INTO students (id, sn, name) VALUES
(102, 20001, '曹孟德'),
(103, 20002, '孙仲谋');
SELECT * FROM students;
1.3插入否则更新
由于 主键 或者 唯一键 对应的值已经存在而导致插入失败
可以选择性的进行同步更新操作 语法
INSERT ... ON DUPLICATE KEY UPDATE
column = value [, column = value] ...
INSERT INTO students (id, sn, name) VALUES (100, 10010, '唐大师')
ON DUPLICATE KEY UPDATE sn = 10010, name = '唐大师';
-- 0 row affected: 表中有冲突数据,但冲突数据的值和 update 的值相等
-- 1 row affected: 表中没有冲突数据,数据被插入
-- 2 row affected: 表中有冲突数据,并且数据已经被更新
1.4替换
-- 主键 或者 唯一键 没有冲突,则直接插入;
-- 主键 或者 唯一键 如果冲突,则删除后再插入

二.Retrieve
2.1.SELECT列
语法:
SELECT
[DISTINCT] {* | {column [, column] ...}
[FROM table_name]
[WHERE ...]
[ORDER BY column [ASC | DESC], ...]
LIMIT ...
案例
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
);
2.1.1全列查询
通常情况下不建议使用 * 进行全列查询
1. 查询的列越多,意味着需要传输的数据量越大;
2. 可能会影响到索引的使用。
2.1.2指定列查询
指定列的顺序不需要按定义表的顺序来
2.1.3查询字段为表达式
表达式不包含字段
表达式包含一个字段
表达式包含多个字段
2.1.4 为查询结果指定别名
语法:
SELECT column [AS] alias_name [...] FROM table_name;
2.1.5结果去重
2.2WHERE 条件
2.2.1比较运算符
运算符 | 描述 | 示例 |
---|---|---|
= | 等于,判断列值是否与指定值相等 | SELECT * FROM users WHERE age = 25; |
!= 或 <> | 不等于,判断列值是否与指定值不相等 | SELECT * FROM products WHERE price != 100; |
> | 大于,判断列值是否大于指定值 | SELECT * FROM orders WHERE total_amount > 500; |
< | 小于,判断列值是否小于指定值 | SELECT * FROM employees WHERE salary < 3000; |
>= | 大于等于,判断列值是否大于或等于指定值 | SELECT * FROM students WHERE score >= 80; |
<= | 小于等于,判断列值是否小于或等于指定值 | SELECT * FROM tasks WHERE duration <= 2; |
BETWEEN | 检查列值是否在指定的范围内(包含边界值) | SELECT * FROM flights WHERE departure_time BETWEEN '2025-01-01' AND '2025-12-31'; |
IN | 检查列值是否在指定的列表中 | SELECT * FROM cities WHERE country IN ('China', 'USA', 'UK'); |
LIKE | 用于模糊匹配字符串,常与通配符 % (匹配任意数量的任意字符)和 _ (匹配单个任意字符)搭配使用 | SELECT * FROM customers WHERE name LIKE 'J%'; |
IS NULL | 检查列值是否为 NULL | SELECT * FROM employees WHERE manager_id IS NULL; |
IS NOT NULL | 检查列值是否不为 NULL | SELECT * FROM products WHERE description IS NOT NULL; |
2.2.3逻辑运算符
运算符 | 描述 | 示例 |
---|---|---|
AND | 逻辑与,连接两个条件,只有当两个条件都为真时,整个条件才为真 | SELECT * FROM employees WHERE department = 'Sales' AND salary > 5000; |
OR | 逻辑或,连接两个条件,只要其中一个条件为真,整个条件就为真 | SELECT * FROM products WHERE price < 100 OR category = 'Electronics'; |
NOT | 逻辑非,对一个条件取反 | SELECT * FROM users WHERE NOT age = 25; |
2.3结果排序
语法:
-- ASC 为升序(从小到大)
-- DESC 为降序(从大到小)
-- 默认为 ASC
SELECT ... FROM table_name [WHERE ...]
ORDER BY column [ASC|DESC], [...];
2.4 筛选分页结果
-- 起始下标为 0
-- 从 s 开始,筛选 n 条结果
SELECT ... FROM table_name [WHERE ...] [ORDER BY ...] LIMIT s, n
-- 从 0 开始,筛选 n 条结果
SELECT ... FROM table_name [WHERE ...] [ORDER BY ...] LIMIT n;
;
-- 从 s 开始,筛选 n 条结果,比第二种用法更明确,建议使用
SELECT ... FROM table_name [WHERE ...] [ORDER BY ...] LIMIT n OFFSET s;
三.Update
语法:
UPDATE table_name SET column = expr [, column = expr ...]
[WHERE ...] [ORDER BY ...] [ LIMIT ...]
四.Delete
4.1删除数据
语法:
DELETE FROM table_name [WHERE ...] [ORDER BY ...] [LIMIT ...]
4.2截断表
语法:
TRUNCATE [TABLE] table_name
1. 只能对整表操作,不能像 DELETE 一样针对部分数据操作;
2. 实际上MySQL 不对数据操作,所以比 DELETE 更快,但是TRUNCATE在删除数据的时候,并不经过真正的事物,所以无法回滚
3. 会重置 AUTO_INCREMENT 项
五.聚合函数
COUNT([DISTINCT] expr) 返回查询到的数据的 数量
SUM([DISTINCT] expr) 返回查询到的数据的 总和,不是数字没有意义
AVG([DISTINCT] expr) 返回查询到的数据的 平均值,不是数字没有意义
MAX([DISTINCT] expr) 返回查询到的数据的 最大值,不是数字没有意义
MIN([DISTINCT] expr) 返回查询到的数据的 最小值,不是数字没有意义