MySQL基础学习之DML,DQL(二)
这里写目录标题
- 一、DML
- 1、INSERT语句
- 1)、给指定列添加数据
- 2)、给全部列添加数据
- 3)、批量数据添加数据
- 4)、操作
- 2、UPDATE语句
- 3、DELETE语句
- 二、DQL
- 1、单表查询
- 1)查询语法
- 2)查询全部
- 3)查询部分
- 4)条件查询
- 5)聚合函数
- 6)排序查询
- 7)分组查询
- 8)分页查询
一、DML
1、INSERT语句
1)、给指定列添加数据
-- 标准语法
INSERT INTO 表名(列名1,列名2,...) VALUES (值1,值2,...);
2)、给全部列添加数据
-- 标准语法
INSERT INTO 表名 VALUES (值1,值2,值3,...);
3)、批量数据添加数据
-- 默认添加所有列数据 标准语法
INSERT INTO 表名 VALUES (值1,值2,值3,...),(值1,值2,值3,...),(值1,值2,值3,...);
4)、操作
#给指定列添加数据
insert into product(ID,NAME,PRICE,BRAND,STOCK) values(1,'YU7','32.99','小米','2');#默认全部列添加数据,注意插入数据要匹配表的字段数
insert into product VALUES(1,'SU7','30.99','小米','10','2025-07-10');#批量添加数据
insert into product(ID,NAME,PRICE,BRAND,STOCK) values
(1,'X1','22.99','宝马','4'),
(1,'X3','32.99','宝马','5'),
(1,'X5','42.99','宝马','6');insert into product values
(1,'GLA','25.99','奔驰','10','2025-07-10'),
(1,'GLB','28.99','奔驰','10','2025-07-10'),
(1,'GLC','33.99','奔驰','10','2025-07-10'),
(1,'GLE','63.99','奔驰','10','2025-07-10');
注意:
- 列名和值的数量以及数据类型要对应
- 除了数字类型,其他数据类型的数据都需要加引号(单双引号都可以,推荐单引号)
2、UPDATE语句
-- 标准语法
UPDATE 表名 SET 列名1 = 值1,列名2 = 值2,... [where 条件];
-- 标准语法
update product set CREATETIME = '2025-07-11' where BRAND = '宝马';
注意:
- 修改语句中必须加条件
- 如果不加条件,则将所有数据都修改(慎重)
3、DELETE语句
-- 标准语法
DELETE FROM 表名 [WHERE 条件];
注意:
- 修改语句中必须加条件
- 如果不加条件,则将所有数据都修改
- 如果在生产环境使用update和delete命令一定要慎重
二、DQL
1、单表查询
1)查询语法
select字段列表
from表名列表
where条件列表
group by分组字段
having分组之后的条件
order by排序
limit分页限定
2)查询全部
-- 标准语法
SELECT * FROM 表名;--查询product表中所有数据
select * from product
注意:
- 在代码开发中不要用select * ,因为对性能,查询速度都有影响。
3)查询部分
- 多个字段查询
-- 标准语法
SELECT 列名1,列名2,... FROM 表名;-- 查询名称、价格、品牌
select name,price,brand from product
- 去重查询
去重查询关键字:distinct,这是sql中常用的关键字。
-- 标准语法
SELECT DISTINCT 列名1,列名2,... FROM 表名;
--查询品牌
select distinct brand from product
--查询名称以及品牌
select distinct name,brand from product
从上面两个结果可以看出:
- 对单列使用distinct去除重复值时,会过滤掉多余重复相同的值,只返回唯一的值。
- 对多列数据进行去重处理,只需在DISTINCT关键字后依次列出需要去重的字段名,并用英文逗号隔开即可。
- 计算列的值(四则运算)
-- 标准语法
SELECT 列名1 运算符(+ - * /) 列名2 FROM 表名;
计算列的值
标准语法:
SELECT 列名1 运算符(+ - * /) 列名2 FROM 表名;
如果某一列为null,可以进行替换
ifnull(表达式1,表达式2)
表达式1:想替换的列
表达式2:想替换的值
- 起别名
-- 标准语法
SELECT 列名1,列名2,... AS 别名 FROM 表名;
-- 查询商品名称和库存,库存数量在原有基础上加10。进行null值判断。起别名为getSum
SELECT NAME,IFNULL(stock,0)+10 AS getsum FROM product;
4)条件查询
- 条件分类
项目 | Value |
---|---|
> | 大于 |
< | 小于 |
>= | 大于等于 |
<= | 小于等于 |
= | 等于 |
<> 或 != | 不等于 |
BETWEEN … AND … | 在某个范围之内(都包含) |
IN(…) | 多选一 |
LIKE 占位符 | 模糊查询 _单个任意字符 %多个任意字符 |
IS NULL | 是NULL |
IS NOT NULL | 不是NULL |
AND 或 && | 并且 |
OR 或 || | 或者 |
NOT 或 ! | 非,不是 |
- 条件查询优先级
- 括号:括号的条件会被优先处理。
- 逻辑运算符:and 、or
- 比较运算符:=,<>,!=,>,<>=,<=
- between和in
- like
- is null
- exists
- order by
- limit
- 条件查询语法
-- 标准语法
SELECT 列名 FROM 表名 WHERE 条件;
-- 查询库存大于20的商品信息
select * from product where STOCK >20-- 查询品牌为宝马的商品信息
select * from product where BRAND ='宝马'-- 查询金额在30~ 50之间的商品信息
select * from product where PRICE between 30 and 50;
select * from product where PRICE >30 and PRICE <50;-- 查查询库存为14,15,16的商品信息
select * from product where stock in (14,15,16);-- 查询库存为null的商品信息
select * FROM product where stock is null; -- 查询库存不为null的商品信息
select * FROM product where stock is not null; -- 查询名称以小米为开头的商品信息
SELECT * FROM product WHERE NAME LIKE '小米%';-- 查询名称第二个字是马的商品信息
select * from product where brand like '_马%'-- 查询名称为四个字符的商品信息
select * from product where brand like '____'
5)聚合函数
将一列数据作为一个整体,进行纵向的计算
项目 | Value |
---|---|
count(列名) | 统计数量(一般选用不为null的列) |
max(列名) | 最大值 |
min(列名) | 最小值 |
sum(列名) | 求和 |
avg(列名) | 平均值 |
- 聚合函数语法
-- 标准语法
SELECT 函数名(列名) FROM 表名 [WHERE 条件];-- 计算product表中总记录条数
SELECT COUNT(*) FROM product;-- 获取最高价格
SELECT MAX(price) FROM product;
-- 获取最高价格的商品名称
SELECT NAME,price FROM product WHERE price = (SELECT MAX(price) FROM product);-- 获取最低库存
SELECT MIN(stock) FROM product;
-- 获取最低库存的商品名称
SELECT NAME,stock FROM product WHERE stock = (SELECT MIN(stock) FROM product);-- 获取总库存数量
SELECT SUM(stock) FROM product;
-- 获取品牌为苹果的总库存数量
SELECT SUM(stock) FROM product WHERE brand='苹果';-- 获取品牌为小米的平均商品价格
SELECT AVG(price) FROM product WHERE brand='小米';
6)排序查询
- 排序分类
- 多个排序条件,当前边的条件值一样时,才会判断第二条件
- 对指定列排序,ASC升序(默认的) DESC降序
- 排序语法
-- 标准语法
SELECT 列名 FROM 表名 [WHERE 条件] ORDER BY 列名1 排序方式1,列名2 排序方式2;-- 按照库存升序排序asc可省略
select * from product order by stock;-- 查询名称中包含小米的商品信息。按照金额降序排序
select * from product where brand like '%小米%' order by price des
-- 按照金额升序排序,如果金额相同,按照库存降序排列
select * from product order by price,stock desc;
7)分组查询
-- 标准语法
SELECT 列名 FROM 表名 [WHERE 条件] GROUP BY 分组列名 [HAVING 分组后条件过滤] [ORDER BY 排序列名 排序方式];-- 按照品牌分组,获取每组商品的总金额
SELECT brand,SUM(price) FROM product GROUP BY brand;-- 对金额大于30元的商品,按照品牌分组,获取每组商品的总金额
SELECT brand,SUM(price) FROM product WHERE price > 4000 GROUP BY brand;-- 对金额大于30元的商品,按照品牌分组,获取每组商品的总金额,只显示总金额大于70的
select brand ,SUM(price) AS getSum from product where PRICE >30 group by brand having getSum >70;-- 对金额大于40元的商品,按照品牌分组,获取每组商品的总金额,只显示总金额大于70元的、并按照总金额的降序排列
select brand ,SUM(price) AS getSum from product where PRICE >30 group by brand having getSum >70 order by getSum Desc;
8)分页查询
-- 标准语法
SELECT * FROM 表名 LIMIT (页码-1)*每页数量, 每页数量;
-- 公式:开始索引 = (当前页码-1) * 每页显示的条数-- 每页显示2条数据
SELECT * FROM product LIMIT 0,2; -- 第一页 开始索引=(1-1) * 2
SELECT * FROM product LIMIT 2,2; -- 第二页 开始索引=(2-1) * 2
SELECT * FROM product LIMIT 4,2; -- 第三页 开始索引=(3-1) * 2
SELECT * FROM product LIMIT 6,2; -- 第四页 开始索引=(4-1) * 2