目录
一、DQL-基础查询
1.语法
2.例子
二、DQL-条件查询
1.语法
2.条件
3.例子
三、聚合函数
1.介绍
2.常见聚合函数
3.语法
4.例子
四、 分组查询
1,语法
2.where与having区别
3.注意
4.例子
五、排序查询
1.语法
2.排序方式
3.注意
4.例子
六、分页查询
1.语法
2.技巧
3.分页查询的使用场景
4.例子
七、总案例练习
1.DQL语法总结:
2.执行顺序
3.案例
1.1查询多个字段
SELECT 字段1,字段2,字段3... FROM 表名;
SELECT * FROM表名;
1.2设置别名
SELECT 字段1 [AS 别名1], 字段2 [AS别名2].. .FROM 表名;
1.3去除重复记录
SELECT DISTINCT 字段列表 FROM 表名;
2.1要求①查询指定字段 name,workno,age并返回
②查询所有字段返回
③查询所有员工的工作地址,起别名
④查询公司员工的上班地址(不要重复)
2.2代码:
先创建查询要用的数据,代码在下面一并给了
#创建表结构
CREATE TABLE emp (
`id` int DEFAULT NULL COMMENT '编号',
`workno` varchar(10) DEFAULT NULL,
`name` varchar(10) DEFAULT NULL COMMENT '员工姓名',
`gender` char(1) DEFAULT NULL COMMENT '性别',
`age` tinyint unsigned DEFAULT NULL COMMENT '年龄',
`idcard` char(18) DEFAULT NULL comment '身份证',
`workaddress` varchar(50) DEFAULT NULL comment '工作地址',
`entrydate` date DEFAULT NULL COMMENT '入职时间'
) COMMENT '员工信息表';
#插入数据
insert into emp values (1,1,'柳岩','女',20,'123456789012345678','北京','2000-01-01'),
(2,2,'张无忌','男',18,'123456789012345670','北京','2005-09-01'),
(3,3,'韦一笑','男',38,'12345678901234567X','上海','2005-08-01'),
(4,4,'赵敏','女',18,'123456789012345670','北京','2009-12-01'),
(5,5,'小昭','女',16,'123456757123845670','上海','2007-07-01'),
(6,6,'杨逍','男',28,'123456789012345673','北京','2006-01-01'),
(7,7,'范瑶','男',40,'123456789012345670','北京','2005-05-01'),
(8,8,'黛绮丝','女',88,'123456789012345670','天津','2015-05-01'),
(9,9,'范凉凉','女',45,null,'北京','2010-04-01'),
(10,10,'陈友谅','男',53,'123456789012345678','上海','2011-01-01');
# 1.查询指定字段 name,workno,age并返回
select name,workno,age from emp;
# 2.查询所有字段返回
select *from emp;
# 3.查询所有员工的工作地址,起别名
select workaddress as '工作地址' from emp;
# 4.查询公司员工的上班地址(不要重复)
select distinct workaddress from emp;
2.3查询结果:
SELECT 字段列表 FROM 表名 WHERE 条件列表;
注:between...and...这个运算符中,between后面必须跟着最小值,and后面必须跟着最大值。
3.1要求
-- 条件查询
-- 1.查询年龄等于88的员工
-- 2.查询年龄小于20的员工信息
-- 3.查询年龄小于等于20的员工信息
-- 4.查询没有身份证号的员工信息
-- 5.查询有身份证号的员工信息
-- 6.查询年龄不等于88的员工信息
-- 7.查询年龄在15岁(包含)到20岁(包含)之间的员工信息
-- 8.查询性别为女且年龄小于25岁的员工信息
-- 9.查询年龄等于18或20或40的员工信息
-- 10.查询姓名为两个字的员工信息
-- 11.查询身份证号最后一位是X的员工信息
3.2代码
-- 条件查询
-- 1.查询年龄等于88的员工
select * from emp where age=88;
-- 2.查询年龄小于20的员工信息
select *from emp where age <20;
-- 3.查询年龄小于等于20的员工信息
select * from emp where age <=20;
-- 4.查询没有身份证号的员工信息
select * from emp where idcard is null;
-- 5.查询有身份证号的员工信息
select * from emp where idcard is not null;
-- 6.查询年龄不等于88的员工信息
select * from emp where age !=88;
select * from emp where age <> 88;
-- 7.查询年龄在15岁(包含)到20岁(包含)之间的员工信息
select * from emp where age between 15 and 20;
select * from emp where age >=15 && age <=20;
select * from emp where age >=15 and age <=20;
-- 8.查询性别为女且年龄小于25岁的员工信息
select * from emp where gender ='女' and age <25;
-- 9.查询年龄等于18或20或40的员工信息
select *from emp where age in (18,20,40);
select * from emp where age =18 or age = 28 or age = 40;
-- 10.查询姓名为两个字的员工信息
select * from emp where name like '__';
-- 11.查询身份证号最后一位是X的员工信息
select * from emp where idcard like '%X';
3.3结果:
结果1:
结果2:
结果3:
结果4:
结果5:
结果6:
结果7:
结果8:
结果9:
结果10:
结果11:
将一列数据作为一个整体,进行纵向计算。
SELECT 聚合函数(字段列表) FROM 表名;
注意:
①聚合函数和字段列表外面这个括号之间没有空格奥,他俩是挨着的,要不就报错
报错详情参考我这篇文章
解决!mysql报错 FUNCTION test.sum does not exist. Check the ‘Function Name Parsing and Resolutio-CSDN博客
②null值不参与所有聚合函数运算。
4.1要求:
①.统计该企业员工数量
②.统计该企业员工的平均年龄
③.统计该企业员工的最大年龄
④.统计该企业员工的最小年龄
⑤.统计西安地区员工的年龄之和
4.2代码:
# 聚合函数
# 1.统计该企业员工数量
select count(*) from emp;
# 2.统计该企业员工的平均年龄
select avg(age) from emp;
# 3.统计该企业员工的最大年龄
select max(age) from emp;
# 4.统计该企业员工的最小年龄
select min(age) from emp;
# 5.统计上海地区员工的年龄之和
select sum(age) from emp where workaddress ='上海';
4.3结果图:
结果1:
结果2:
结果3:
结果4:
结果5:
SELECT 字段列表 FROM 表名 [WHERE条件 ] GROUP BY 分组字段名 [HAVING分组后过滤条件];
①执行时机不同: where是分组之前进行过滤,不满足where条件,不参与分组;而having是分组之后对结果进行过滤。
②判断条件不同: where不能对聚合函数进行判断,而having可以。
4.1要求:
①根据性别分组,统计男性员工和女性员工的数量
②根据性别分组,统计男性员工和女性员工的平均年龄
③查询年龄小于45的员工,并根据工作地址分组,获取员工数量大于等于3的工作地址
4.2 代码:
#分组查询
# 1.根据性别分组,统计男性员工和女性员工的数量
select gender, count(*) from emp group by gender;
# 2.根据性别分组,统计男性员工和女性员工的平均年龄
select gender,avg(age) from emp group by gender;
# 3.查询年龄小于45的员工,并根据工作地址分组,获取员工数量大于等于3的工作地址
select workaddress,count(*) from emp where age<45 group by workaddress having count(*)>=3;
4.3结果:
结果一:
结果二:
结果三:
SELECT 字段列表 FROM 表名 ORDER BY 字段1 排序方式1,字段2排序方式2;
ASC:升序(默认值)DESC:降序,ASC因为是默认的,也可以省略不写,升序就是从小到大,降序是从大到小。
如果是多字段排序,当第一个字段值相同时,才会根据第二个字段进行排序。
4.1要求:
①根据年龄对公司的员工进行升序排序
②根据入职时间,对员工进行降序排序
③根据年龄对公司的员工进行升序排序,年龄相同,再按照入职时间进行降序排序
4.2代码:
# 排序查询
# 1.根据年龄对公司的员工进行升序排序(从小到大)
select * from emp order by age asc;
# 2.根据入职时间,对员工进行降序排序
select * from emp order by entrydate desc;
# 3.根据年龄对公司的员工进行升序排序,年龄相同,再按照入职时间进行降序排序
select * from emp order by age asc,entrydate desc;
4.3结果:
结果一:
结果二:
结果三:
SELECT 字段列表 FROM 表名 LIMIT 起始索引,查询记录数;
4.1要求:
①查询第1页员工数据,每页展示5条记录
②查询第2页员工数据,每页展示3条记录
4.2代码:
# 1.查询第1页员工数据,每页展示5条记录
select * from emp limit 0,5;
# 2.查询第2页员工数据,每页展示3条记录
select * from emp limit 3,3;
4.3结果:
结果一:
结果二:
3.1要求:
①.查询年龄为20,21,22,23岁的女性员工信息。
②.查询性别为男,并且年龄在20-40岁(含)以内的姓名为三个字的员工。
③.统计员工表中,年龄小于60岁的,男性员工和女性员工的人数。
④.查询所有年龄小于等于35岁员工的姓名和年龄,并对查询结果按年龄升序排序,如果年龄相同按入职时间降序排序。
⑤.查询性别为男,且年龄在20-40岁(含)以内的前5个员工信息,对查询的结果按年龄升序排序,年龄相同按入职时间升序排序。
3.2代码:
-- DQL 语句练习-------------
# 1.查询年龄为20,21,22,23岁的女性员工信息。
select * from emp where age in(20,21,22) and gender ='女';
# 2.查询性别为男,并且年龄在20-40岁(含)以内的姓名为三个字的员工。
select * from emp where (age between 20 and 40) and (name like '___') and gender ='男' ;
# 3.统计员工表中,年龄小于60岁的,男性员工和女性员工的人数。
select gender ,count(*) from emp where age <60 group by gender;
# 4.查询所有年龄小于等于35岁员工的姓名和年龄,并对查询结果按年龄升序排序,如果年龄相同按入职时间降序排序。
select name,age from emp where age <=35 order by age asc ,entrydate desc;
# 5.查询性别为男,且年龄在20-40岁(含)以内的前5个员工信息,对查询的结果按年龄升序排序,年龄相同按入职时间升序排序。
select * from emp where gender='男' and (age between 20 and 40 ) order by age asc ,entrydate asc limit 0,5 ;
3.3结果图:
结果一:
结果二:
结果三:
结果四:
结果五:
结束啦~觉得有用的友友点赞或评论支持一下我呀~