多表查詢(內連線與外連線的混合使用)(union聯合)
阿新 • • 發佈:2019-02-01
內連線與外連線的混合使用:
格式: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
;