0
点赞
收藏
分享

微信扫一扫

【MySQL】-DQL(基本、条件、分组、排序、分页)详细版

DQL全称Data Query Language(数据查询语言),用来查询数据库表中的记录

关键字:SELECT

语法:【MySQL】-DQL(基本、条件、分组、排序、分页)详细版_字段

一、基本查询

语法:

查询多个字段:select 字段1,字段2,字段3 from 表名;

查询所有字段(通配符):select * from 表名;

设置别名:select 字段1 [as 别名1],字段2[as 别名2], from 表名;

去除重复记录:select distinct 字段列表 from 表名;

-- DQL
-- 1.查询指定字段 name entrydate并返回
select name,entrydate from tb_emp;

-- 2.查询返回所有字段
-- 推荐
select id, username, password, name, gender, image, job, entrydate, create_time, update_time from tb_emp;

-- 不推荐,不直观,性能低
select * from tb_emp;

-- 3. 查询所有员工的name entrydate,并起别名(姓名,入职日期)
select name as 姓名,entrydate as 入职日期 from tb_emp;
select name 姓名,entrydate 入职日期 from tb_emp;

-- 4.查询已有的员工关联了哪几种职位(不要重复)
select distinct job from tb_emp;

注意* 号代表所有字段,在实际开发中尽量少用(不直观,影响效率

【MySQL】-DQL(基本、条件、分组、排序、分页)详细版_字段_02

【MySQL】-DQL(基本、条件、分组、排序、分页)详细版_字段_03

【MySQL】-DQL(基本、条件、分组、排序、分页)详细版_MySQL_04

【MySQL】-DQL(基本、条件、分组、排序、分页)详细版_表名_05


二、条件查询

语法:

条件查询:select 字段列表 from 表名 where 条件列表

常见运算符:【MySQL】-DQL(基本、条件、分组、排序、分页)详细版_MySQL_06【MySQL】-DQL(基本、条件、分组、排序、分页)详细版_表名_07

-- 1.查询 姓名 为 杨逍 的员工
select *from tb_emp where name = '杨逍';


-- 2. 查询 id小于等于5 的员工信息
select *from tb_emp where id<=5;


-- 3.查询 没有分配职位的员工信息
select *from tb_emp where job is null;


-- 4.查询有职位的员工信息
select *from tb_emp where job is not null;


-- 5.查询 密码不等于‘123456’的员工信息
select *from tb_emp where password !='123456';
select *from tb_emp where password <>'123456';


-- 6.查询入职日期在‘2000-01-01(包含)’到‘2010-01-01’(包含)之间的员工信息
select *from tb_emp where entrydate >='2000-01-01' and entrydate <='2010-01-01';
select *from tb_emp where entrydate between '2000-01-01' and '2010-01-01';


-- 7.查询入职时间在‘2000-01-01(包含)’到‘2010-01-01’(包含)之间 性别为女的员工信息
select *from tb_emp where entrydate between '2000-01-01' and '2010-01-01' and gender = 2;


-- 8.查询 职位是2,3,4的员工信息
select *from tb_emp where job = 2 or job=3 or job=4;
select *from tb_emp where job in(2,3,4);


-- 9.查询 姓名为两个字的员工信息
select *from tb_emp where name like '__';


-- 10.查询 姓‘张’的员工信息
select *from tb_emp where name like '张%';

这里只展示 9,10的结果

【MySQL】-DQL(基本、条件、分组、排序、分页)详细版_表名_08

【MySQL】-DQL(基本、条件、分组、排序、分页)详细版_表名_09

三、分组查询

1.聚合函数

将一列数据作为一个整体,进行纵向计算

语法:select 聚合函数(字段列表)from 表名;【MySQL】-DQL(基本、条件、分组、排序、分页)详细版_MySQL_10

-- 聚合函数
-- 1.统计该企业员工数量 -- count
-- A count(字段)
select count(id) from tb_emp;
-- B count(常量)
select count(1) from tb_emp;
-- C count(*)--推荐
select count(*) from tb_emp;

-- 2.统计该企业最早入职的员工 -min
select min(entrydate) from tb_emp;
    
    

-- 3.统计该企业最迟入职的员工 --max
select max(entrydate) from tb_emp;

-- 4.统计该企业员工 ID 的平均值 --avg
select avg(id) from tb_emp;

-- 5.统计该企业员工的ID之和 --sum
select sum(id) from tb_emp;

注意:null值不参与所有聚合函数运算,统计数量推荐使用count(*)

【MySQL】-DQL(基本、条件、分组、排序、分页)详细版_字段_11

【MySQL】-DQL(基本、条件、分组、排序、分页)详细版_MySQL_12

【MySQL】-DQL(基本、条件、分组、排序、分页)详细版_表名_13

2.分组

语法:select 字段列表 from 表名 [where 条件] group by 分组字段名[having 分组后过滤条件]

where 与 having 区别:

1.执行时机不同,where是分组之前进行过滤,不满足where条件,不参与分组,而having是分组之后对结果进行过滤。

2.判断条件不同:where不能对聚合函数进行判断,而having可以

-- 分组
-- 1.根据性别分组,统计男性和女性员工的数量
select gender,count(*) from tb_emp group by gender;


-- 2.先查询入职时间在'2015-01-01'(包含)以前的员工,并对结果根据职位分组,获取员工数量大于等于2的职位
select job,count(*) from tb_emp where entrydate<='2015-01-01' group by job having count(*)>=2;

【MySQL】-DQL(基本、条件、分组、排序、分页)详细版_表名_14

【MySQL】-DQL(基本、条件、分组、排序、分页)详细版_表名_15

注意:分组之后,查询的字段一般为聚合函数和分组字段,查询其他字段毫无意义

执行顺序:where>聚合函数>having

四、排序查询

语法:

条件查询:select 字段列表 from 表名 [where 条件列表][group by 分组字段]order by 字段1 排序方式1,字段2 排序方式2...;

排序方式:ASC:升序(默认值)   DESC:降序

-- 排序查询
-- 1.根据入职时间,对员工进行升序排序
select * from tb_emp order by entrydate asc;
select * from tb_emp order by entrydate;

-- 2.根据入职时间,对员工进行降序
select  * from tb_emp order by entrydate desc ;

-- 3.根据入职时间,进行升序排序,入职时间相同,再按照更新时间进行降序排序
select * from tb_emp order by entrydate , update_time desc ;

【MySQL】-DQL(基本、条件、分组、排序、分页)详细版_聚合函数_16

【MySQL】-DQL(基本、条件、分组、排序、分页)详细版_字段_17

【MySQL】-DQL(基本、条件、分组、排序、分页)详细版_MySQL_18

注意:如果是多个字段排序,当第一个字段值相同时,才会根据第二个字段进行排序

五、分页查询

语法:

分页查询:select 字段列表 from 表名 limit 起始索引,查询记录数;

-- 分页查询
-- 1.从起始索引为0 开始查询员工数据,每页展示5条记录
select  * from tb_emp limit 0,5;

-- 2.查询 第1页员工数据,每页展示5条记录
select * from tb_emp limit 0,5;

-- 3. 查询 第2页 员工数据,每页展示5条记录
select * from tb_emp limit 5,5;

-- 4.查询 第3页 员工数据,每页展示5 条记录
select * from tb_emp limit 10,5;

注意事项:

1.起始索引从0开始,起始索引 = (查询页码-1)*每页显示记录数

2.分页查询是数据库的方言,不同的数据库有不同实现,MySQL中是LIMIT

3.如果查询的是第一页数据,起始索引可以省略,直接简写为limit 10;

举报

相关推荐

0 条评论