1.DQL语法
select
字段列表
from
表名列表
where
条件列表
group by
分组字段列表
having
分组后条件列表
order by
排序字段列表
limit
分页参数
基本查询
条件查询(where)
聚合函数(count、max、min、avg、sum )
分组查询(group by)
排序查询(order by)
分页查询 (limit)
2.基础查询
1.查询指定字段
select 字段1,字段2,字段3 from 表名;
例:
select name,workno,age from employee;
2.查询所有字段返回
select 字段1,字段2,字段3 from 表名;
select * from 表名;
例:
select id,workno,name,gender,age,idcard,workaddress,entrydate from employee;
select * from employee;
3.设置别名
select 字段 as 别名 from 表名;
例:
select workaddress as '工作地址' from employee;
select workaddress as from employee;
4.去除重复记录
select distinct 字段列表 from 表名;
例:
select distinct workaddress '工作地址' from employee;
select distinct workaddress from employee;
3.条件查询
1.语法
select 字段列表 from 表名 where 条件列表;
2.条件
比较运算符 | 功能 |
> | 大于 |
>= | 大于等于 |
< | 小于 |
<= | 小于等于 |
= | 等于 |
<> 或 != | 不等于 |
between ... and .. | 在某个范围之内(含最小、最大值) |
in(...) | 在 in 之后的列表中的值,多选一 |
like 占位符 | 模糊匹配(_匹配单个字符,%匹配任意字符) |
is NULL | 是 NULL |
逻辑运算符 | 功能 |
and 或 && | 并且(多个条件同时成立) |
OR 或 || | 或者(多个条件任意一个成立) |
NOT 或 ! | 非、不是 |
例:
select * from employee where age = 88;
select * from employee where age <30;
select * from employee where idcard is NULL;
select * from employee where idcard is not null;
select * from employee where age != 88;
select *from employee where age in(19,20,21);
//查找名字是两个字的员工
select *from employee where name like '__';//注意这里面是两个下划线
//查找身份证最后一位是X的员工
select *from employee where idcard like '%X';
select *from employee where idcard like '_________________X';// 17个下划线
4.聚合函数
1.聚合函数:将一列数据作为一个整体,进行纵向计算。
函数 | 功能 |
count | 统计数量 |
max | 最大值 |
min | 最小值 |
sum | 求和 |
avg | 平均值 |
2.语法:
select 聚合函数 (字段列表) from 表名;
例:
select count(*) from employee;
select count(id) from employee;
select * from employee where workaddress = '西安';
select sum(age) from employee where workaddress = '西安';
注意:NULL 值不参与所有聚合函数运算。
5.分组查询
1.语法
select 字段列表 from 表名 (where 条件)group by 分组字段名 (having 分组后过滤条件)
注意:
- 执行顺序:where > 聚合函数 > having
- 分组之后,查询的字段一般为聚合函数和分组字段,查询其他字段无任何意义。
2.where 和 having 的区别
- 执行时间不同:where 是分组之前进行过滤,不满足 where 条件,不参与分组;而 having 是分组之后对结果进行过滤。
- 判断条件不同:where 不能对聚合函数进行判断,而 having 可以。
例:
//查询性别分组,统计男性员工 和 女性员工 的数量
select gender,count(*) from employee group by gender;
//根据性别分组,统计男性员工 和 女性员工 的平均年龄
select gender,avg(age) from employee group by gender;
//查询员工年龄小于30,并根据工作地址分组
select workaddress,count(*) from employee where age < 30 group by workaddress ;
//查询员工年龄小于30,并根据工作地址分组,获取员工数量大于等于2的工作地址
select workaddress,count(*) from employee where age < 30 group by workaddress having count(*) >= 2;
6.排序查询
1.语法
select 字段列表 from 表名 order by 字段1 排序方式1,字段2 排序方式2;
例:
//年龄升序排序
select * from employee order by age asc;
//年龄进行倒序
select * from employee order by age desc;
//先按照年龄升序排序,再根据入职时间降序
select * from employee order by age asc, entrydate desc;
7.分页查询
1.语法
select 字段列表 from 表名 limit 起始索引,查询记录数;
注意 :
- 起始索引从0开始,起始索引 = (查询页码 - 1)* 每页显示记录数。
- 分页查询是数据库的方言,不同的数据库有不同的实现,MySQL中是limit。
- 如果索引的是第一页数据,起始索引可以省略,直接简写成 limit 10。
例:
//查询第一页员工数据,每页展示10条记录
select * from employee limit 0,10;
//查询第二页员工数据,每页展示10条数据
select *from employee limit 10,10;
8.执行顺序
9.课后训练
为了对大家的知识进行巩固,我准备了下面一些例题,大家可以试试看。稍后我会把答案放置评论区。
1.查询年龄为20,21,24的女性员工信息
2.查询性别为男,并且年龄在25-29(含)岁以内的姓名为三个字的员工
3.年龄小于60岁,男性员工和女性员工的人数
4.查询年龄小于等于35岁的员工姓名和年龄,并对查询结果按年龄升序排序,如果年龄相同,按入职时间降序排序
5.性别为男,且年龄在23-25之间的前5个员工的信息,并对查询结果按年龄升序排序,如果年龄相同,按入职时间降序排序
本节知识讲解就到此结束啦,下期再见!