MySQL之多表查詢自連接方式
一、引言
自連接,顧名思義就是自己連接自己。
自連接的語法結(jié)構(gòu):
表 A 別名 A join 表 A 別名 B ON 條件 ...;
注意:
- 1、這種語法有一個關(guān)鍵字:join
- 2、自連接查詢可以是內(nèi)連接的語法,可以是外連接的語法(當(dāng)然包括左外連接和右外連接)
接下來去工具 DataGrip 通過兩個需求去演示一下 自連接查詢 的語法。
二、實操
(0)兩張表的結(jié)構(gòu)以及數(shù)據(jù)展示
- 員工表 emp
- 部門表 dept
(1)查詢員工及其所屬領(lǐng)導(dǎo)的名字
1、分析
在表 emp 中沒有直接的表示出某某的直屬領(lǐng)導(dǎo)是誰,只有一個所屬領(lǐng)導(dǎo)id號(managerid)
而對于一個企業(yè)的領(lǐng)導(dǎo),它也是企業(yè)的員工。
表結(jié)構(gòu):emp。
單靠單表查詢是不可能完成所要的需求的。所以要對自己進(jìn)行子連接查詢。
把emp看成兩張表:員工表和領(lǐng)導(dǎo)表(仔細(xì)深思一下)
這就是它們之間的編寫思路
2、編寫SQL語句
/*類似于內(nèi)連接,有null 的值時沒有顯示*/ SELECT a.name,b.name FROM emp AS a JOIN emp AS b WHERE a.managerid=b.id;
(2)直詢所有員工emp及其領(lǐng)導(dǎo)的名字emp ,如果員工沒有領(lǐng)導(dǎo),也需要查詢出來。
1、分析
如果這個員工的字段 managerid = null ,也需要把這個員工查詢出來。
這時只能用到外連接
因為內(nèi)連接只能查詢到交集的數(shù)據(jù),外連接才會包含左表或者右表的數(shù)據(jù)
表結(jié)構(gòu):emp a , emp b
2、編寫SQL語句
/*查出直屬領(lǐng)導(dǎo)為 null 也要顯示*/ SELECT a.name AS '員工',b.name AS '領(lǐng)導(dǎo)' FROM emp AS a LEFT OUTER JOIN emp AS b ON a.managerid=b.id;
這樣就通過兩個自連接查詢完成兩個需求。
在自連接查詢的時候,一定注意要給表名起別名。
要不然我們會不清楚條件,以及返回的字段到底是哪一張表當(dāng)中的字段。
總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
python 連接數(shù)據(jù)庫mysql解壓版安裝配置及遇到問題
今天學(xué)習(xí)python連接數(shù)據(jù)庫,就想安裝一下mysql數(shù)據(jù)庫,沒想到小小的數(shù)據(jù)庫也遇到了不少挫折,所以我就把自己的安裝過程以及問題寫出來分享給大家,需要的朋友可以參考下2019-06-06MySQL中int?(10)?和?int?(11)?的區(qū)別
這篇文章主要介紹了MySQL中int?(10)?和?int?(11)?的區(qū)別,根據(jù)mysql?中整數(shù)數(shù)據(jù)類型、不同類型的取值范圍、不同數(shù)據(jù)類型的默認(rèn)顯示寬度展開對int的介紹,需要的朋友可以參考一下2022-01-01MySQL 5.7并發(fā)復(fù)制隱式bug實例分析
這篇文章主要給大家介紹了關(guān)于MySQL 5.7并發(fā)復(fù)制隱式bug的相關(guān)資料,文中介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用mysql5.7具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2018-11-11MySQL數(shù)據(jù)權(quán)限的實現(xiàn)詳情
這篇文章主要介紹了MySQL數(shù)據(jù)權(quán)限的實現(xiàn)詳情,文章通過實際案例,從代碼實戰(zhàn)的角度來實現(xiàn)這樣的一個數(shù)據(jù)權(quán)限。具體詳細(xì)介紹,具有一定的參考價值2022-08-08MySQL數(shù)據(jù)庫遷移data文件夾位置詳細(xì)步驟
這篇文章主要介紹了MySQL數(shù)據(jù)庫遷移data文件夾詳細(xì)步驟,需要的朋友可以參考下2014-03-03