mysql表的內連和外連實戰(zhàn)記錄
在MySQL中,內連(INNER JOIN)和外連(OUTER JOIN)是用于聯(lián)接多個表的操作。接下來,我分別給大家介紹下二者。
(一)內連接
1、什么叫內連接
在MySQL中, 內連接 實際上就是利用 where 子句對兩種表形成的笛卡兒積進行篩選,我們前面學習的查詢都是內連接,也是在開發(fā)過程中使用的最多的連接查詢。
2、語法格式
?? 以下是內連接的基本語法:
SELECT 列名
FROM 表1
INNER JOIN 表2 ON 表1.關聯(lián)列 = 表2.關聯(lián)列;注:內連會返回同時存在于表1和表2中的行,并且僅包括滿足關聯(lián)條件的行。
3、案例:顯示SMITH的名字和部門名稱(來自oracle 9i的經典測試表)
之前我們通過笛卡爾積可以對其進行操作,今天我們通過內連接的方式來進行有關操作。具體如下:
用前面的寫法:
select ename, dname from EMP, DEPT where EMP.deptno=DEPT.deptno and ename='SMITH';
結果展示:

用標準的內連接寫法:
select ename, dname from EMP inner join DEPT on EMP.deptno=DEPT.deptno and ename='SMITH';
結果展示:



【小結】
- 內連接的關鍵點是只返回兩個表中連接條件滿足的行,而不包括任何一個表中沒有匹配的行;
- 如果某行在其中一個表中沒有匹配的行,則不會包含在結果中
- 需要注意的是,內連接并不包括符合條件但值為NULL的行。如果你需要包含這些行,可以使用接下來講到的外連接
(二)外連接
1、什么叫外連接
在MySQL中,外連接是一種用于檢索兩個或多個表之間的數(shù)據的方法,它包括左外連接、右外連接和全外連接。
2、左外連接 左外連
返回左表中的所有行,以及右表中與左表滿足聯(lián)接條件的行;
如果右表中沒有匹配的行,則返回 NULL 值。
?? 語法如下:select 字段名 from 表名1 left join 表名2 on 連接條件
2.1案例演示
首先,我先建立兩張表以供實現(xiàn)需要。具體如下: 表一:

表二:

需求: 查詢所有學生的成績,如果這個學生沒有成績,也要將學生的個人信息顯示出來
當左邊表和右邊表沒有匹配時,也會顯示左邊表的數(shù)據:
select * from stu left join exam on stu.id=exam.id;

3、右外連接 右外連
- 與左外連相反,返回右表中的所有行,以及左表中與右表滿足聯(lián)接條件的行;
- 如果左表中沒有匹配的行,則返回 NULL 值。
?? 語法如下:select 字段名 from 表名1 right join 表名2 on 連接條件
3.1案例演示
需求 :對 stu 表和 exam 表聯(lián)合查詢,把所有的成績都顯示出來,即使這個成績沒有學生與它對應,也要 顯示出來
select * from stu right join exam on stu.id=exam.id;

4、全外連接
- 全外連返回左表和右表中的所有行,并將它們聯(lián)接在一起;
- 如果某個表中沒有匹配的行,則返回 NULL 值;
- MySQL不直接支持全外連,可以使用UNION操作符來模擬實現(xiàn)。
5、練習演示
需求 :列出部門名稱和這些部門的員工信息,同時列出沒有員工的部門
現(xiàn)在有這樣的場景,一家公司為了業(yè)務架構的完整設置了某個部門,但是暫時這個部門還沒有人,隨著之后公司的發(fā)展這個部門才會發(fā)揮作用。

方法展示:
代碼展示:
select dname,ename,dept.deptno from dept left join emp on dept.deptno=emp.deptno order by dept.deptno asc;
輸出顯示:

(三)實戰(zhàn)OJ
大家看完上訴可以通過下面這兩道題目練練手:
(四)總結
通過內連和外連操作,可以根據表之間的關聯(lián)條件將數(shù)據聯(lián)接起來,并進行靈活的查詢和分析。具體選擇哪種聯(lián)接類型取決于你的需求和數(shù)據結構。
到此這篇關于mysql表的內連和外連的文章就介紹到這了,更多相關mysql表內連和外連內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

