DQL
DQL-介绍
DQL英文全称是Data Query Language(数据查询语言),数据查询语言,用来查询数据库中表的记录。
查询关键字:SELECT
DQL-语法
SELECT字段列表FROM表名列表WHERE条件列表GROUP BY分组字段列表HAVING分组后条件列表ORDER BY排序字段列表LIMIT分页参数
查询类型
- 基本查询
- 条件查询(WHERE)
- 聚合函数(count、max, min,avg,sum)
- 分组查询(GROUP BY)
- 排序查询(ORDER BY)
- 分页查询(LIMIT)
基本查询
查询返回多个字段
SELECT 字段1,字段2,字段3....表名;
SELECT *FROM 表名
设置别名
SELECT 字段1 [AS 别名1],字段2 [AS别名2]...FROM 表名;
去除重复记录
SELECT DISTINCT 字段列表 FROM 表名;
案例
数据准备
create table emp(id int comment '编号',workno varchar (10) comment '工号',name varchar(10) comment '姓名',gender char(1) comment '性别',age tinyint unsigned comment '年龄',idcard char(18) comment '身份证号',workaddress varchar(50) comment '工作地址',entrydate date comment '入职时间') comment '员工表';
insert into emp (id, workno, name, gender, age, idcard, workaddress, entrydate)values (1, '1', '柳', '女', 20, '123456789012345678', '北京', '2000-01-01'),(2, '2', '张无忌','男', 18, '123456789012345670','北京','2005-09-01'),(3, '3', '韦一笑', '男',38, '123456789712345670','上海', '2005-08-01'),(4, '4', '赵敏', '女', 18, '123456757123845670','北京','2009-12-01'),(5, '5', '小昭', '女', 16, '123456769012345678','上海', '2007-07-01'),(6, '6', '杨道','男', 28, '12345678931234567X','北京','2006-01-01'),(6, '6', '杨道','男', 28, '12345678931234567X','北京','2006-01-01'),(8, '8', '黛绮丝', '女', 38, '123456157123645670','天津', '2015-05-01'),(9, '9','范凉凉', '女', 45, '123156789012345678','北京', '2010-04-01'),(10, '10', '陈友', '男', 53, '123456789012345670','上海', '2011-01-01'),(11, '11', '张士诚','男',55,'123567897123465670','江苏','2015-05-01'),(12, '12','常遇春', '男', 32, '123446757152345670','北京','2004-02-01'),(13,'13', '张三丰','男', 88, '123656789012345678','江苏', '2020-11-01'),(14, '14','灭绝','女', 65, '123456719012345670','西安','2019-05-01'),(15,'15', '胡青牛','男',70,'12345674971234567X','西安', '2018-04-01'),(16,'16', '周若','女',18, null, '北京', '2012-06-01')
案例
-基本查询
1.查询指定字段name, workno, age 返回
SELECT name,workno,age from emp;
2.查询所有字段返回
SELECT id, workno, name, gender, age, idcard, workaddress, entrydate from emp;
SELECT * FROM emp;
不建议使用,不直观,影响效率
3.查询所有员工的工作地址,起别名
SELECT workaddress AS '工作地址' from emp;
4.查询公司员工的上班地址(不要重复)
SELECT DISTINCT workaddress AS '工作地址' from emp;
DQL-条件查询
语法
SELECT 字段列表 FROM 表名 WHERE 条件列表;

案例
条件查询
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;
7.查询年龄在15岁(包含)到20岁(包含)之间的员工信息
SELECT * FROM emp WHERE age between 15 and 20;
8.查询性别为 女且年龄小于25岁的员工信息
SELECT * FROM emp WHERE age<25 and gender ='女'
9.查询年龄等于18或20或40的员工信息
SELECT * FROM emp WHERE age=18||age=20||age=40;
SELECT * FROM emp WHERE age in(18,20,40)
10.查询姓名为两个字的员工信息
SELECT * FROM emp WHERE name like '__';
11.查询身份证号最后一位是X的员工信息
SELECT * FROM emp WHERE idcard like '%X';
SELECT * FROM emp WHERE idcard like '_________________X';
DQL 聚合函数
介绍
将一列数据作为一个整体,进行纵向计算。
常见聚合函数

语法
SELECT 聚合函数(字段列表) FROM 表名;
案例
聚合函数
1.统计该企业员工数量
SELECT count(id) 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 ='西安';
DQL 分组查询
语法
SELECT 字段列表 FROM [WHERE 条件]GROUP BY 分组字段名[HAVING分组后过滤条件];
where与having区别
执行时机不同:where是分组之前进行过滤,不满足where条件,不参与分组;而having是分组之后对结果进行过滤。
判断条件不同:where不能对聚合函数进行判断,而having可以。
案例
分组查询
1.根据性别分组,统计男性员工 和 女性员工的数量
SELECT gender,count(*) FROM emp GROUP BY gender;
2.根据性别分组,统计男性员工 和 女性员工的平均年龄
SELECT gender,avg(*) FROM emp GROUP BY age;
3.查询年龄小于45的员工,并根据工作地址分组,获取员工数量大于等于3的工作地址
SELECT 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:降序
注意:如果是多字段排序,当第一个字段值相同时,才会根据第二个字段进行排序。
案例
排序查询
1.根据年龄对公司的员工进行升序排序
SELECT * FROM emp ORDER BY age;
2.根据入职时间,对员工进行降序排序
SELECT * FROM emp ORDER BY entrydate desc;
3.根据年龄对公司的员工进行升序排序,年龄相同,再按照入职时间进行降序排序
SELECT * FROM emp ORDER BY age,entrydate desc;
DQL 分页查询
语法
SELECT 字段列表FROM 表名 LIMIT 起始索引,查询记录数;
注意
起始索引从0开始,起始索引= (查询页码-1)*每页显示记录数。
分页查询是数据库的方言,不同的数据库有不同的实现, MySQL中是LIMIT.
如果查询的是第一页数据,起始索引可以省略,直接简写为limit 10。
注意
起始索引从0开始,起始索引= (查询页码-1)*每页显示记录数。
案例
-分页查询
1.查询第1页员工数据,每页展示10条记录
SELECT * FROM emp LIMIT 0,10;
2.查询第2页员工数据,每页展示10条记录
起始索引从0开始,起始索引= (查询页码-1)*每页显示记录数。
SELECT * FROM emp LIMIT 10,10;
