多表查询(内连接与外连接的混合使用)(union联合)

内连接与外连接的混合使用:

格式:select*from表1 left other join 表2 on 条件 inner join 表3 on条件

在这里插入图片描述
查询工资高于公司平均工资的所有员工列:显示员工信息,部门名称,上级领导,工资等级
如下:

 SELECT e.* ,d.dname 部门名称,m.ename 上级领导 ,s.grade 工资等级
 FROM emp e
 LEFT OUTER JOIN emp m ON e.mgr=m.id 
 INNER JOIN dept d ON e.dept_id=d.id 
 INNER JOIN salarygrade s ON e.salary 
 BETWEEN s.losalary AND hisalary 
 AND e.salary>( SELECT AVG(salary) FROM emp) LIMIT 0, 1000;

union联合:

格式: 左连接+union+右连接

在这里插入图片描述

左连接:

使用左表的每一条数据与右边的每一条数据组合,不管条件是否满足,左表的数据都会显示出来。
格式:
select 字段 from 表1 left outer join 表2,… on 清除笛卡尔积的条件 and 其他的条件

如: 查询出所有的员工,显示所有的员工信息,并且需要显示该员工所属的部门名称。 SELECT * FROM emp e
LEFT OUTER JOIN dept d ON e.dept_id = d.id;
在这里插入图片描述

右连接:

使用右表的每一条数据与左边的每一条数据组合,不管条件是否满足,右表的数据都会显示出来。
格式:
select 字段 from 表1 right outer join 表2,… on 清除笛卡尔积的条件 and 其他的条件
如:

查询出所有的员工信息,并且要显示员工所属的部门名称,不管该部门是否存在员工,都需要显示。

SELECT * FROM emp e RIGHT OUTER JOIN dept d ON e.dept_id = d.id ;
在这里插入图片描述

union:

会把两个sql语句的查询结果合并,如果是重复的数据只会显示一次。
格式:
select * from 表1 left outer join 表2 on 清除笛卡尔积的条件 union
select * from 表1 right outer join 表2 on 清除笛卡尔积的条件

如: SELECT * FROM emp e LEFT OUTER JOIN dept d ON e.dept_id = d.id UNION
SELECT * FROM emp e RIGHT OUTER JOIN dept d ONe.dept_id = d.id ;
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_42691149/article/details/82563128
今日推荐