Mysql中的關聯查詢(內鏈接,外鏈接,自鏈接)

 轉自:http://www.javashuo.com/article/p-baetxczj-dn.htmlmysql

在使用數據庫查詢語句時,單表的查詢有時候不能知足項目的業務需求,在項目開發過程當中,有不少需求都是要涉及到多表的鏈接查詢,總結一下mysql中的多表關聯查詢sql

一,內鏈接查詢

是指全部查詢出的結果都是可以在鏈接的表中有對應記錄的。數據庫

以t_employee(員工表)和t_dept(部門表)爲例:oracle

t_employee表中的記錄以下:dept表明該員工所在的部門spa

 

t_dept表中記錄以下:.net

 

能夠發現,其中人力資源部裏沒有員工(這裏只是舉例,可能與實際不符,但主要在於邏輯關係),而趙七沒有對應的部門,如今想要查詢出員工姓名以及其對應的部門名稱:3d

此時,就要使用內鏈接查詢,關鍵字(inner join)code

在這裏說一下關聯查詢sql編寫的思路,1,先肯定所鏈接的表,2,再肯定所要查詢的字段,3,肯定鏈接條件以及鏈接方式blog

1 select 
2 e.empName,d.deptName
3 from t_employee e
4 INNER JOIN t_dept d
5 ON e.dept = d.id;

查詢的結果以下:資源

其中,沒有部門的人員和部門沒有員工的部門都沒有被查詢出來,這就是內鏈接的特色,只查詢在鏈接的表中可以有對應的記錄,其中e.dept = d.id是鏈接條件

二,左外鏈接查詢

是指以左邊的表的數據爲基準,去匹配右邊的表的數據,若是匹配到就顯示,匹配不到就顯示爲null。例如:

查詢全部員工姓名以及他所在的部門名稱:在內鏈接中趙七沒有被查出來,由於他沒有對應的部門,如今想要把趙七也查出來,就要使用左外鏈接:

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

在這裏,t_employee就是左表,也就是基準表,用基準表的數據去匹配右表的數據,因此左表的記錄是所有會查詢出來的,若是右表沒有記錄對應的話就顯示null

查詢結果:

關鍵字是left outer join,等效於left join,在關聯查詢中,作外鏈接查詢就是左鏈接查詢,二者是一個概念

三,右外鏈接是同理的,只是基準表的位置變化了而已

好比:查詢全部的部門和對應的員工:

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

這裏只是把left修改爲了right,可是基準表變化了,是以右表的數據去匹配左表,因此左外鏈接能作到的查詢,右外鏈接也能作到
查詢結果:

四,全外鏈接

顧名思義,把兩張表的字段都查出來,沒有對應的值就顯示null,可是注意:mysql是沒有全外鏈接的(mysql中沒有full outer join關鍵字),想要達到全外鏈接的效果,能夠使用union關鍵字鏈接左外鏈接和右外鏈接。例如:

1 select e.empName,d.deptName
2      FROM t_employee e 
3      left JOIN t_dept d
4      ON e.dept = d.id
5 UNION
6 select e.empName,d.deptName
7      FROM t_employee e 
8      RIGHT JOIN t_dept d
9      ON e.dept = d.id;

查詢結果:

若是在oracle中,直接就使用full outer join關鍵字鏈接兩表就好了

五,自鏈接查詢

自鏈接查詢就是當前表與自身的鏈接查詢,關鍵點在於虛擬化出一張表給一個別名

例如:查詢員工以及他的上司的名稱,因爲上司也是員工,因此這裏虛擬化出一張上司表

1 SELECT e.empName,b.empName
2      from t_employee e
3      LEFT JOIN t_employee b
4      ON e.bossId = b.id;

查詢結果:

在這裏,b表是虛擬化出的表,咱們能夠經過查詢瞭解b表的記錄:

1 SELECT e.empName,b.empName,b.*
2      from t_employee e
3      LEFT JOIN t_employee b
4      ON e.bossId = b.id;

查詢結果:

後面的四個字段就是虛擬化出的b表的全部記錄,但看這四個字段其實就是記錄全部是上司的員工的信息

因此,自鏈接查詢通常用做表中的某個字段的值是引用另外一個字段的值,好比權限表中,父權限也屬於權限。

相關文章
相關標籤/搜索