Java基础学完,继续深耕11.01(0503)SQL语句--DQL

DQL

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

关键字:SELECT

--  =================== DQL: 基本查询 ======================
-- 1. 查询指定字段 name,entry_date 并返回
select name,entry_date from emp;
-- 2. 查询返回所有字段
 -- 方式一 推荐(直观,效率高)
select id, username, password, name, gender, phone, job, salary, entry_date, image, create_time, update_time from emp;
 -- 方式二 不推荐
select * from emp;
-- 3. 查询所有员工的 name,entry_date, 并起别名(姓名、入职日期) as可省略
select name as 姓名,entry_date as 入职日期 from emp;

select name  姓名,entry_date  入职日期 from emp;
-- 4. 查询已有的员工关联了哪几种职位(不要重复) - distinct
select distinct job from emp;

--  =================== DQL: 条件查询 ======================
-- 1. 查询 姓名 为 柴进 的员工
select * from emp where name = '柴进';
-- 2. 查询 薪资小于等于5000 的员工信息
select * from emp where salary <= 5000;
-- 3. 查询 没有分配职位 的员工信息
select * from emp where job is null;
-- 4. 查询 有职位 的员工信息
select * from emp where job is not null ;
-- 5. 查询 密码不等于 '123456' 的员工信息
select * from emp where password != '123456';
select * from emp where password <> '123456';
-- 6. 查询 入职日期 在 '2000-01-01' (包含)  '2010-01-01'(包含) 之间的员工信息
select * from emp where entry_date between '2000-01-01' and '2010-01-01';
-- select * from emp where entry_date between '最小值' and '最大值';
-- 7. 查询 入职时间 在 '2000-01-01' (包含)  '2010-01-01'(包含) 之间 且 性别为女 的员工信息
select * from emp where (entry_date between '2000-01-01' and '2010-01-01') and gender = 2;
-- 8. 查询 职位是 2 (讲师), 3 (学工主管), 4 (教研主管) 的员工信息
select * from emp where job = 2 or job = 3 or job = 4;
select * from emp where job in (2,3,4);
-- 9. 查询 姓名 为两个字的员工信息(模糊查询 like _:单个字符  %:任意个字符
select * from emp where name like '__';
-- 10. 查询 姓 '' 的员工信息
select * from emp where name like '%';
-- 11. 查询 姓名中包含 '' 的员工信息
select * from emp where name like '%%';

--  =================== DQL: 分组查询 ======================
-- 聚合函数
-- 注意:所有的聚合函数不参与null的统计
-- 1. 统计该企业员工数量-count
-- count(字段)
select count(id)from emp;
-- count(*)-推荐
select count(*) from emp;
-- count(常量)-推荐
select count(1) from emp;
-- 2. 统计该企业员工的平均薪资
select avg(emp.salary) from emp;
-- 3. 统计该企业员工的最低薪资
select min(emp.salary) from emp;
-- 4. 统计该企业员工的最高薪资
select max(emp.salary) from emp;
-- 5. 统计该企业每月要给员工发放的薪资总额(薪资之和)
select sum(emp.salary) from emp;

where与having的区别:

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

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

分组之后,查询的字段一般为聚合函数和分组字段,查询其他字段无任何意义。

执行顺序: where  >  聚合函数 > having 。
-- 注意:一旦进行了分组操作,select后的字段列表不能随意书写,能写的一般是 分组字段 + 聚合函数
-- 1. 根据性别分组 , 统计男性和女性员工的数量
select emp.gender,count(*) from emp group by gender;
-- 2. 先查询入职时间在 '2015-01-01' (包含) 以前的员工 , 并对结果根据职位分组 , 获取员工数量大于等于2的职位
select job,count(*) from emp where entry_date <= '2015-01-01' group by job having count(*) >= 2;

DQL语句中where与having的区别?

执行时机不同(where -> group by -> having)

判断条件不同(having后可以用聚合函数,where不可以)

--  =================== 排序查询 ======================
-- 1. 根据入职时间, 对员工进行升序排序
select * from emp order by entry_date;
-- 2. 根据入职时间, 对员工进行降序排序
select * from emp order by entry_date desc ;
-- 3. 根据 入职时间 对公司的员工进行 升序排序 , 入职时间相同 , 再按照 更新时间 进行降序排序
select * from emp order by entry_date,update_time desc ;

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

注意:项目开发中,前端传递过来的是页码,需要转换为起始索引

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

-- 3. 查询 第2页 员工数据, 每页展示5条记录
select * from emp limit 10,5;
-- 4. 查询 第3页 员工数据, 每页展示5条记录
select * from emp limit 15,5;
-- 页码
-- 起始索引 = (页码 - 1* 每页的记录数

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值