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

  • Post author:
  • Post category:其他




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



格式: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

;

在这里插入图片描述



版权声明:本文为weixin_42691149原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。