-- -----------------------多表查询案例----------------
use itheima;
create table salary_grade(
grade int,
losal int, -- 最低薪资
hisal int -- 最高薪资
)comment '薪资等级表';
insert into salary_grade values (1,0,3000),(2,3001,5000);
insert into salary_grade values (3,5001,8000);
insert into salary_grade values (4,8001,10000);
insert into salary_grade values (5,10001,15000);
insert into salary_grade values (6,15001,20000);
insert into salary_grade values (7,20001,25000);
insert into salary_grade values (8,25001,30000);
-- 查询员工的姓名、年龄、职位、部门信息
-- 表:emp,dept
-- 连接条件:emp,dept_id
-- 连接条件:emp.dept_id = dept.id -- 如果不写连接条件会重复
select e.name,e.age,e.job,d.name from emp e ,dept d where e.dept_id = d.id -- 要查询对应的部门信息,要写连接条件where e.dept_id = d.id
-- 2.查询年龄小于30岁的员工的姓名、年龄、职位、部门信息(显示内连接)
-- 表emp,dept
-- 连接条件:emp.dept_id = dept.id
select e.name,e.age,e.job,d.name from emp e join dept d on e.dept_id = d.id where e.age < 30;
-- 3.查询拥有员工的id,部门名称
-- 表emp,dept -- distinct 是对查询结果去重复
-- 连接条件:emp.dept_id = dept.id
select distinct e.id,d.name from emp e ,dept d where e.dept_id = d.id;
-- 4.查询所有年龄大于40岁的员工,及其归属的部门名称,如果员工没有分配部门,也需要展示出来
-- 表emp,dept -- 这里用左外连接,将左表的信息全部查询出来
-- 连接条件:emp.dept_id = dept.id -- 可以把两张表,对应的信息查询出来,这也是主键和外键关联的作用 -- 被外键关联的对象应该具有主键或者外键的约束
select e.*,d.name from emp e left join dept d on e.dept_id = d.id where age>40;
-- 5.查询所有员工的工资等级
-- 表:emp,salary_grade
-- 连接条件:emp.salary >= salary_grade.losal and emp.salary <- salary_grade.hisal
select e.*,s.grade,s.losal,s.hisal from emp e ,salary_grade s where e.salary >= s.losal and e.salary<=s.hisal;
select e.*,s.grade from emp e ,salary_grade s where e.salary >= s.losal and e.salary<=s.hisal;