


-- -----------------------多表查询案例----------------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.idselect 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.idselect 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.hisalselect 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;