DQL--Data Query Language
DQL-语法
SELECT
字段列表
FROM
表名列表
WHERE
条件列表
GROUP BY
分组字段列表
HAVING
分组后的条件列表
ORDER BY
排序字段列表
LIMIT
分页参数
DQL-基本查询
查询多个字段
SELECT 字段1,字段2,字段3... FROM 表名;
SELECT * FROM 表名;
设置表名
SELECT 字段1 [AS 别名1],字段2 [AS 别名2],... FROM 表名;
去除重复记录
SELECT DISTINCT 字段列表 FROM 表名;
案例:查询公司员工的上班地址(不要重复)
select distinct workplace from emp;
DQL-条件查询
语法
SELECT 字段列表 FROM 表名 WHERE 条件列表;
条件
案例:
查询年龄等于88的员工信息
select * from emp where age=88;
查询年龄小于20的员工信息
select * from emp where age<20;
查询年龄小于等于20的员工信息
select * from emp where age<=20;
查询没有身份证号的员工信息
select * from emp where idcard is null;
查询有身份证号的员工信息
select * from emp where idcard is not null;
查询年龄不等于88的员工信息
select * from emp where age <> 88;
查询年龄在15岁(包含)到20岁(包含)之间的员工信息
select * from emp where age >= 15 and age <= 20;
select * from emp where age >=15 && age <=20;
select * from emp where age between 15 and 20;
查询性别为女,且年龄小于25岁的员工信息
select * from emp where gender='女' and age < 25;
查询年龄等于18或20或40的员工信息
select * from emp where age in(18,20,40);
select * from emp where age = 18 or age = 20 or age = 40;
查询姓名为两个字的员工信息
select * from emp where name like '__';
查询身份证号最后一位是x的员工信息
select * from emp where idcard like '%x';
DQL-聚合函数
什么是聚合函数?(介绍)
将一列数据作为一个整体,进行纵向计算
常见的聚合函数
语法
SELECT 聚合函数(字段列表) FROM 表名;
案例:
统计该企业员工数量
select count(*) from emp;
select count(id) from emp;
统计该企业员工的平均年龄
select avg(age) from emp;
统计该企业员工的最大年龄
select max(age) from emp;
统计该企业员工的最小年龄
select min(age) from emp;
统计西安地区员工的年龄之和
select sum(age) from emp where workaddress = '西安';
注意:null值不参与所有聚合函数运算
DQL-分组查询
语法
SELECT 字段列表 FROM 表名 [WHERE 条件] GROUP BY 分组字段名 [HAVING 分组后过滤条件];
where与having的区别
执行时机不同:where是分组之前进行过滤,不满足where条件,不参与分组;而having是分组之后对结果进行筛选
判断条件不同:where不能对聚合函数进行判断,而having可以
案例:
根据性别分组,统计男性员工和女性员工的数量
select gender,count(*) from emp group by gender;
根据性别分组,统计男性员工和女性员工的平均年龄
select gender,avg(age) from emp group by gender;
查询年龄小于45的员工,并根据工作地址分组,获取员工数量大于等于3的工作地址
select workaddress,count(*) as workaddress_count from emp where age < 45 group by workaddress having count(*) >= 3;
注意:
执行顺序:where > 聚合函数 > having
分组之后,查询的字段一般为聚合函数和分组字段,查询其他字段毫无意义
DQL-排序查询
语法
SELECT 字段列表 FROM 表名 ORDER BY 字段1 排序方式1,字段2 排序方式2;
排序方式
ASC:升序(默认值)
DESC:降序
案例:
根据年龄对公司的员工进行升序排序
select * from emp order by age;
根据入职时间,对员工进行降序排序
select * from emp order by entrydate;
根据年龄对公司的员工进行升序排序,年龄相同,再按照入职时间进行降序排序
select * from emp order by age,entrydate desc;
注意:如果是多字段排序,当第一个字段值相同时,才会根据第二个字段进行排序
DQL-分页查询
语法
SELECT 字段列表 FROM 表名 LIMIT 起始索引,查询记录数;
注意:
起始索引从0开始,起始索引 = (查询页码 - 1)* 每页显示记录数
分页查询是数据库的方言,不同数据库有不同的实现,比如MySQL中是LIMIT
如果查询的是第一页数据,起始索引可以省略,直接简写为limit 10
案例:
查询第1页员工数据,每页展示10条记录
select * from emp limit 10;
查询第2页员工数据,每页展示10条记录
select * from emp limit 10,10;
DQL-案例练习
查询年龄为20,21,22,23岁的女性员工信息
select * from emp where gender = '女' and age in(20,21,22,23);
查询性别为男,并且年龄在20~40(含)以内的姓名为三个字的员工
select * from emp where gender = '男' and age between 20 and 40 and name like '___';
统计员工表中,年龄小于60岁的,男性员工和女性员工的人数
select gender,count(*) from emp where age < 60 group by gender;
查询所有年龄小于等于35岁员工的姓名和年龄,并对查询结果按升序排序,如果年龄相同按入职时间降序排序
select name,age from emp where age <= 35 order by age,entrydate desc;
查询性别为男,且年龄在20~40(含)以内的前5个员工信息,对查询的结果按年龄升序排序,年龄相同按入入职时间升序排序
select * from emp where gender = '男' and age between 20 and 40 order by age,entrydate limit 5;
- 感谢你赐予我前进的力量