MySQL筆記3——內連線/外連線、多表連線
一、內連線
1、等值連線
* 特點:條件為等量關係
# 語法
select
別名1.欄位,別名2.欄位
from
表1 別名1
join
表2 別名2
on
連線條件
where
其他條件
案例:查詢每個員工的員工名字和部門名字
案例:查詢每個員工的員工名字、員工編號和部門名字、工作地點
select
e.empno,e.ename,p.pname,p.loc
from
emp e
join
dept d
on
e.deptno=d.deptno;#兩張表之間的連線關係就是他們的deptno欄位相等,等值連線
2、非等值連線
- 特點:連線條件中的關係為非等量關係
示例:現有如下兩張表,找出每個員工的薪資等級,要求顯示員工名、工資、工資等級
select
e.ename,e.sal,s.grade
from emp e
join salgroud s
on
e.sal between s.losal and s.hisal;
# 條件為:e表中的sal(工資)欄位介於s表中losal欄位和hisal欄位之間
# 條件為非等量關係,因此成非等值連線
3、自連線
- 特點:一張表看做兩張表,自己連線自己
示例:現有下表,找出每個員工的上級領導,要求顯示員工名和領導名
員工的領導編號=領導的員工編號。因為領導也是員工,在員工表中。
因此連線條件為:員工表的領導編號=領導表的員工編號
select
a.ename as '員工',b.ename as '領導'
from
emp a #emp表起別名a看成員工表
join
emp b #emp表起別名b看成領導表
on
a.mgr=b.empno;
#條件:員工表的領導編號=領導表的員工編號
#這種把一張表看成兩張表的連線方式成為自連線
上面的查詢由於KING員工是大BOSS上面已經沒領導了,KING的MGR欄位為NULL。因此上述語句匹配時沒有匹配到,丟失了KING的資料。下面介紹使用外連線查詢時如何全部查出。
二、外連線
- 內連線:假設A表和B表進行連線,使用內連線的話,凡是A表和B表能夠匹配上的記錄都查詢出來,這就是外連線。A、B兩張表無主副之分,兩張表是平等的。
- 外連線:假設A表和B表進行連線,使用外連線的話,AB兩張表中有一張是主表,一張表是副表。在查詢時主要查詢主表中的資料,附帶著查詢副表,當副表中的資料沒有和主表中的資料匹配上時,副表自動模擬出NULL與之匹配
外連線最重要的特點是:主表中的資料能完整的全部查出,不會導致資料的丟失
①左外連線
任何一個左連線都有一個右連線的寫法,同樣任何一個右連線都有一個左連線的寫法
左邊的表是主表
#語法,只要在join關鍵字前加left,代表join左邊的表是主表,右邊的表是副表
select
別名1.欄位,別名2.欄位
from
表1 別名1
left join
表2 別名2
on
連線條件
where
其他條件
示例:還是上面的示例,查詢所有員工的領導。在使用內連線的時候,由於KING的領導為NULL,因此匹配條件不滿足,導致匹配結果中沒有KING。下面看使用左外連線如何查詢出全部員工的領導
select
a.ename,b.ename
from emp a
left join emp b
on a.mgr=b.empno;
# 語法和使用內連線的時候基本一樣,只是在join前面加了left
# 加了left後表示a表是主表,b表是副表。在查詢時要對a表中
# 要查詢的欄位全部顯示出來,即使匹配條件可能不滿足,但是a表中
# 要查詢的欄位也要顯示,而b表中不滿足匹配條件的模擬出NULL與之匹配
KIING在a表中的MGR(欄位)在執行匹配條件時找不到b表中與之對應的EMPNO欄位。因此副表b會模擬出一個NULL值與a表中KING的MGR欄位匹配,最終滿足條件顯示
②右外連結
右邊的表是主表
還是上面的例子,使用右外連線
select
a.ename,b.ename
from emp b
right join emp a
on a.mgr=b.empno;
# 右連線時,join右邊的表為主編,即a表變成主表,b表為副表。KIING在a表中的
# MGR(欄位)在執行匹配條件時找不到b表中與之對應的EMPNO欄位。因此副表b會模擬
# 出一個NULL值與a表中KING的MGR欄位匹配,最終滿足條件顯示
示例:查詢那個部門下沒有員工
通過表可知40部門下沒員工可是怎麼查詢出呢
select
a.*,b.*
from dept a
left join emp b
on a.mgr=b.empno;
查詢結果如下圖
在加過濾條件即可篩選出資料了
select a.*,b.*
from dept a
left join emp b
on a.mgr=b.empno;
where b.ename(或者empno/job/mgr等欄位) is null;
在把emp表中的欄位不顯示即可
最終查詢程式碼
select a.*
from dept a
left join emp b
on a.mgr=b.empno;
where b.ename(或者empno/job/mgr等欄位) is null;
③全連線
不用,用的少
三、多張表連線
select
欄位
from
A表
join
B表
on
A表和B表之間的連線關係
join
C表
on
A表、B表連線之後新表和C表之間的連線關係
join
……
on
……
示例:找出每個員工的部門名稱和工資等級
select
e.ename '姓名',d.dname '部門名稱',s.grade '工資等級'
from emp e
join dept d
on
e.deptno=d.deptno
join salgrade s
on
e.sal between s.losal and s.hisal;
示例:找出每個員工所在的部門名稱、薪資等級、上級領導
select
e.ename,d.dname,s.grade,e1.ename
from
emp e
join
dept d
on
e.deptno=d.deptno
join
salgrade s
on
e.sal between s.losal and s.hisal
left join #e表是主表,e1是副表,主表中的mgr欄位不等於副表的empno欄位時,副表自動模擬出一個NULL值與之匹配
emp e1
on
e.mgr=e1.empn
相關文章
- MYSQL學習筆記23: 多表查詢(自連線內連線+左右外連線)MySql筆記
- MYSQL語法:左連線、右連線、內連線、全外連線MySql
- 內連線、外連線
- MySQL學習筆記之多表連線MySql筆記
- SQL的四種連線:內連線 左外連線 右外連線 全連線SQL
- Oracle內連線、外連線、右外連線、全外連線小總結Oracle
- 例項解析外連線 內連線 自連線 全連線
- 【SQL】Oracle的內連線、左外連線、右外連線及全外連線SQLOracle
- sql 內連線和外連線SQL
- 內連線、外連線總結
- 深入理解SQL的四種連線-左外連線、右外連線、內連線、全連線SQL
- 多表外連線的使用
- Oracle 表連線方式詳解(外連結、內連線、自連線)Oracle
- 3.DQL資料查詢語言(內連線,外連線,自連線)
- 內連線、左連線、右連線
- Mysql——內外連線,事物,索引MySql索引
- 【janes】多表查詢 外連線
- sql內連結,外連線SQL
- 資料庫外連線,自然連線,內連線,條件連線,等值連線關係及詳解資料庫
- mysql 左連線,右連線,內連結,exists等MySql
- 多表的連線
- mysql INNER JOIN、LEFT JOIN、RIGHT JOIN;內連線(等值連線)、左連線、右連線MySql
- oracle sql內連線_左(右)連線_全外連線_幾種寫法OracleSQL
- mysql左外連線MySql
- 外連線轉換為內連線的情況
- 轉載:內連線與外連線的區別
- 你真的會玩SQL嗎?內連線、外連線SQL
- Oracle左外連線、右外連線、完全外連線以及(+)號用法Oracle
- Oracle 左外連線、右外連線、全外連線小總結Oracle
- sql和hql中join語句區別,以及hibernate中內連線,迫切內連線,左外連線,迫切左外連線,右外連線的區別(合集)...SQL
- 外連線與連線順序
- SQL SERVER 自連線、外連線SQLServer
- 行的儲存(塊內連線與塊外連線)
- SQL Server中內連線和外連線的區別SQLServer
- mysql 外連線總結MySql
- 內聯,左外聯,右外聯,全連線,交叉連線 的區別
- T-SQL學習中–內聯接,外連線,交叉連線SQL
- oracle外連線Oracle