1. 程式人生 > >多表查詢(內連線與外連線的混合使用)(union聯合)

多表查詢(內連線與外連線的混合使用)(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 ;
在這裡插入圖片描述