菜鸟之路Day30一一MySQL之DML&DQL
作者:blue
时间:2025.5.8
文章目录
- 菜鸟之路Day30一一MySQL之DML&DQL
- 一.DML
- 0.概述
- 1.插入语句(insert)
- 2.更新语句(update)
- 3.删除语句(delete)
- 二.DQL
- 1.基本查询
- 2.条件查询
- 3.聚合函数
- 4.分组查询
- 5.排序查询
- 6.分页查询
一.DML
0.概述
DML(数据操作语言),用来对数据库中表的数据记录进行增,删,改操作
1.插入语句(insert)
指定字段添加数据:insert into 表名(字段名1,字段名2)values(值1,值2);
全部字段添加数据:insert into 表名 values (值1,值2,..);
批量添加数据(指定字段):insert into 表名(字段名1,字段名2)values(值1,值2),(值1,值2)
批量添加数据(全部字段):insert into 表名 values (值1,值2,….),(值1,值2,….);
练习:
-- 1.为tb_emp表,字段(username,name,gender)插入一条数据
insert into tb_emp(username,name,gender,create_time,update_time)
values ('xiaomu','木',2,now(),now());
-- 2.为tb_emp表,全部字段插入一条数据
insert into tb_emp
values (null,'xiaolan','12345','蓝',1,null,null,null,now(),now());
-- 3.为tb_emp表,字段(username,name,gender)批量插入数据
insert into tb_emp(username,name,gender,create_time,update_time)
values ('ning','宁',2,now(),now()),
('lan','岚',1,now(),now());
2.更新语句(update)
修改数据:update 表名 set 字段名1=值1,字段名2=值2,…[where 条件];
练习:
-- 1.将tb_emp表,id为2的用户,用户名改成zhangsan
update tb_emp set username='zhangsan',update_time=now() where id=2;
-- 2.将tb_emp表,所有用户的入职时间改为2010-01-01
update tb_emp set entry_time='2010-01-01',update_time=now();
注意:在更新语句中如果没有加条件就会更新整张表的数据
3.删除语句(delete)
删除数据:delete from 表名 [where 条件];
练习:
-- 1.将tb_emp表中,id为1的用户删除
delete from tb_emp where id=1;
-- 2.将tb_emp表中,所有用户都删除
delete from tb_emp;
DELETE语句不能删除某一个字段的值(如果要操作,可以使用UPDATE,将该字段的值置为NULL)
先插入十五条数据,做为数据库中可被查询的数据
-- 插入数据 1
insert into tb_emp (id, username, password, name, gender, image, job, entry_time, create_time, update_time)
values (1,'john_doe','password123','John Doe', 1, 'john.jpg', 1, '2012-05-15', now(), now());
-- 插入数据 2
insert into tb_emp (id, username, password, name, gender, image, job, entry_time, create_time, update_time)
values (2,'jane_smith','securepass','Jane Smith', 2, 'jane.jpg', 2, '2015-09-20', now(), now());
-- 插入数据 3
insert into tb_emp (id, username, password, name, gender, image, job, entry_time, create_time, update_time)
values (3,'mike_johnson','mypassword','Mike Johnson', 1, 'mike.jpg', 3, '2018-03-10', now(), now());
-- 插入数据 4
insert into tb_emp (id, username, password, name, gender, image, job, entry_time, create_time, update_time)
values (4,'lisa_brown','pass1234','Lisa Brown', 2, 'lisa.jpg', 1, '2019-11-25', now(), now());
-- 插入数据 5
insert into tb_emp (id, username, password, name, gender, image, job, entry_time, create_time, update_time)
values (5,'david_wilson','secretpass','David Wilson', 1, 'david.jpg', 2, '2020-07-08', now(), now());
-- 插入数据 6
insert into tb_emp (id, username, password, name, gender, image, job, entry_time, create_time, update_time)
values (6,'susan_lee','susanpass','Susan Lee', 2, 'susan.jpg', 3, '2013-06-12', now(), now());
-- 插入数据 7
insert into tb_emp (id, username, password, name, gender, image, job, entry_time, create_time, update_time)
values (7,'tom_wang','tom1234','Tom Wang', 1, 'tom.jpg', 4, '2016-08-18', now(), now());
-- 插入数据 8
insert into tb_emp (id, username, password, name, gender, image, job, entry_time, create_time, update_time)
values (8,'amy_zhang','amysecure','Amy Zhang', 2, 'amy.jpg', 1, '2017-10-22', now(), now());
-- 插入数据 9
insert into tb_emp (id, username, password, name, gender, image, job, entry_time, create_time, update_time)
values (9,'peter_liu','peterpass','Peter Liu', 1, 'peter.jpg', 2, '2021-02-03', now(), now());
-- 插入数据 10
insert into tb_emp (id, username, password, name, gender, image, job, entry_time, create_time, update_time)
values (10,'emily_zhou','emily123','Emily Zhou', 2, 'emily.jpg', 3, '2022-04-16', now(), now());
-- 插入数据 11
insert into tb_emp (id, username, password, name, gender, image, job, entry_time, create_time, update_time)
values (11,'jack_chen','jackpass','Jack Chen', 1, 'jack.jpg', 4, '2014-07-28', now(), now());
-- 插入数据 12
insert into tb_emp (id, username, password, name, gender, image, job, entry_time, create_time, update_time)
values (12,'linda_wu','lindasecure','Linda Wu', 2, 'linda.jpg', 1, '2019-01-09', now(), now());
-- 插入数据 13
insert into tb_emp (id, username, password, name, gender, image, job, entry_time, create_time, update_time)
values (13,'brian_huang','brianpass','Brian Huang', 1, 'brian.jpg', 2, '2020-05-21', now(), now());
-- 插入数据 14
insert into tb_emp (id, username, password, name, gender, image, job, entry_time, create_time, update_time)
values (14,'grace_he','grace123','Grace He', 2, 'grace.jpg', 3, '2023-03-14', now(), now());
-- 插入数据 15
insert into tb_emp (id, username, password, name, gender, image, job, entry_time, create_time, update_time)
values (15,'kevin_zhang','kevinpass','Kevin Zhang', 1, 'kevin.jpg', 4, '2011-09-06', now(), now());
二.DQL
DQL用来查询数据库中的数据
1.基本查询
查询多个字段:select 字段1,字段2,字段3 from 表名;
查询所有字段(通配符):select * from 表名;
设置别名:select 字段1 [as 别名1],字段2 [as 别名2]from 表名;
去除重复记录:select distinct 字段列表 from 表名;
练习:
-- 1.查询指定字段name,entry_time 并返回
select name,entry_time from tb_emp;
-- 2.查询表所有内容
select * from tb_emp;
-- 3.查询指定字段name,entry_time 并取别名 姓名,入职日期
select name as '姓名',entry_time as '入职日期' from tb_emp;
-- 4.查询员工关联了哪几种职业(不要重复)
select distinct job from tb_emp
2.条件查询
select 字段 from 表名 where 条件
部分练习:
-- 5.查询id为6的员工
select * from tb_emp where id=6;
-- 6.查询id小于6的员工信息
select * from tb_emp where id<6;
-- 7.查询id在6-10之间的员工信息
select * from tb_emp where id>=6 and id<=10;
select * from tb_emp where id between 6 and 10;
3.聚合函数
介绍:将一列数据作为一个整体,进行纵向计算
select 聚合函数(字段列表) from 表名;
函数 | 功能 |
---|---|
count | 统计数量 |
max | 最大值 |
min | 最小值 |
avg | 平均值 |
sum | 求和 |
练习:
-- 8.统计员工数量
select count(*) from tb_emp;
-- 9.查询最早入职员工
select min(entry_time) from tb_emp;
-- 10.查询最晚入职员工
select max(entry_time) from tb_emp;
-- 11.求所有员工id总和
select sum(id) from tb_emp;
-- 12.求所有员工id平均数
select avg(id) from tb_emp;
注意:null值不参与所有聚合函数运算
统计数量可以使用:count(*) count(字段) count(常量),推荐使用第一种
4.分组查询
分组查询:select 字段列表 from 表名 [where 条件] group by 分组字段名 [having 分组后过滤条件];
练习:
-- 13.根据性别分组,统计男性和女性员工的数量 - count(*)
select gender,count(*) from tb_emp group by gender;
-- 14.先查询入职时间在‘2020-01-01’(包含)以前的员工,并对结果根据职位分组,获取员工数量大于等于2的职位
select job,count(*) from tb_emp where entry_time <= '2020-01-01' group by job having count(*) >= 2;
Q:where与having的区别
A:1.执行时机不同:where是分组之前进行过滤,不满足where条件,不参与分组;而having是分组之后对结果进行过滤。
2.判断条件不同:where不能对聚合函数进行判断,而having可以
注意事项
分组之后,查询的字段一般为聚合函数和分组字段,查询其他字段无任何意义
执行顺序:where>聚合函数>having
5.排序查询
select 字段列表 from 表名 [where 条件列表] [group by 分组字段] order by 字段1 排序方式1,字段2 排序方式2;
-- 排序方式:ASC:升序(默认值) DESC:降序
练习:
-- 15.根据入职时间对员工进行,升序排序
select * from tb_emp order by entry_time ASC;
-- 16.根据入职时间对员工进行,降序排序
select * from tb_emp order by entry_time DESC;
-- 17.根据入职时间对员工进行升序排序,若入职时间相同,根据更新时间降序排序
select * from tb_emp order by entry_time ASC,update_time DESC;
注意事项:如果是多字段排序,当第一个字段值相同时,才会对第二个字段进行排序
6.分页查询
select 字段列表 from 表名 limit 起始索引,查询记录数
-- 起始索引 = (页码-1)* 每页记录数
练习:
-- 18.查询第一页,展示5条记录
select * from tb_emp limit 0,5;
-- 19.查询第二页,展示5条记录
select * from tb_emp limit 5,5;
-- 20.查询第三页,展示5条记录
select * from tb_emp limit 10,5;
注意:如果查询的是第一页的数据