MySQL中的多表查詢
阿新 • • 發佈:2019-01-07
MySQL中的多表查詢
單表查詢一般不能滿足專案的需求,在真實的開發過程中,有很多需求都是要涉及到多表查詢,
在此總結一下MySQL中的多表查詢:
一、內連線查詢
指所有的查詢出的結果都能在連線表中有對應的記錄;
以員工表和部門表為例:
element表:
department表:
可以發現在人力資源部沒有員工,趙七沒有對應的部門,
如果要查詢員工姓名和相關部門名稱,此時應該使用內連線,關鍵字(inner join):
在此說一下關聯查詢sql編寫的思路:
- 確定所連線的表
- ——要查詢的欄位
- ——連線條件和連線方式
select e.empName, d.deptName
from t_employee e
INNER JOIN t_dept d
ON e.dept = d.id;
查詢結果:沒有趙七
內連線的特點:只查詢在連線表中能夠有對應的記錄(就是在員工表中有外來鍵對應)
二、左外連線查詢
指以左邊的表中的資料為基準,去匹配右面表中的資料,
如果匹配到就顯示出來,如果匹配不到就顯示為null;
例如:在上一個例子中,我要顯示趙七,怎麼辦???關鍵字( left outer join)
SELECT e.empName, d.deptName
from t_employee e
LEFT OUTER JOIN t_dept d
on d.id = e.dept;
查詢結果:趙七沒有對應部門
三、右外連線
如:查詢所有部門的對應員工。。。關鍵字( right outer join)
SELECT e.empName, d.deptName
from t_employee e
RIGHT OUTER JOIN t_dept d
on d.id = e.dept;
查詢結果:人力部門沒人:
四、全外連線
將兩張表中的所有欄位都查出來,沒有對應的值就顯示null,
如果要達到全外連線的效果,可以使用union關鍵字連線左外連線和右外連線。關鍵字( union)
例如:
select e.empName,d.deptName
FROM t_employee e
left JOIN t_dept d
ON e.dept = d.id
UNION
select e.empName,d.deptName
FROM t_employee e
RIGHT JOIN t_dept d
ON e.dept = d.id;
查詢結果:
如果在oracle中,直接就使用 full outer join 關鍵字連線兩表就行了;
五、自連線查詢
自連線:當前表與自身的連線查詢, 關鍵點:虛擬化一張表給別名
例如:查詢員工以及他的上司的名稱。。。關鍵字:left join
由於上司也是員工,所以虛擬化出一張上司表
SELECT e.empName, b.empName
from t_employee e
LEFT JOIN t_employee b
ON e.bossId = b.id;
查詢結果: