1. 程式人生 > >MySQL中的多表查詢

MySQL中的多表查詢

MySQL中的多表查詢

單表查詢一般不能滿足專案的需求,在真實的開發過程中,有很多需求都是要涉及到多表查詢,

在此總結一下MySQL中的多表查詢:

一、內連線查詢

指所有的查詢出的結果都能在連線表中有對應的記錄;
以員工表和部門表為例:
element表:
img
department表:
img

可以發現在人力資源部沒有員工,趙七沒有對應的部門,
如果要查詢員工姓名和相關部門名稱,此時應該使用內連線,關鍵字(inner join)
在此說一下關聯查詢sql編寫的思路:

  1. 確定所連線的表
  2. ——要查詢的欄位
  3. ——連線條件和連線方式
select
e.empName, d.deptName from t_employee e INNER JOIN t_dept d ON e.dept = d.id;

查詢結果:沒有趙七
img

內連線的特點:只查詢在連線表中能夠有對應的記錄(就是在員工表中有外來鍵對應)

二、左外連線查詢

指以左邊的表中的資料為基準,去匹配右面表中的資料,
如果匹配到就顯示出來,如果匹配不到就顯示為null;
例如:在上一個例子中,我要顯示趙七,怎麼辦???關鍵字( left outer join)

SELECT e.empName, d.deptName
	from t_employee e
	LEFT
OUTER JOIN t_dept d on d.id = e.dept;

查詢結果:趙七沒有對應部門img

三、右外連線

如:查詢所有部門的對應員工。。。關鍵字( right outer join)

SELECT e.empName, d.deptName
	from t_employee e
	RIGHT OUTER JOIN t_dept d 
	on d.id = e.dept;

查詢結果:人力部門沒人:
img

四、全外連線

將兩張表中的所有欄位都查出來,沒有對應的值就顯示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;

查詢結果:
img
如果在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;

查詢結果:
img