mysql表的內(nèi)連和外連實(shí)戰(zhàn)記錄
在MySQL中,內(nèi)連(INNER JOIN)和外連(OUTER JOIN)是用于聯(lián)接多個(gè)表的操作。接下來(lái),我分別給大家介紹下二者。
(一)內(nèi)連接
1、什么叫內(nèi)連接
在MySQL中, 內(nèi)連接 實(shí)際上就是利用 where 子句對(duì)兩種表形成的笛卡兒積進(jìn)行篩選,我們前面學(xué)習(xí)的查詢都是內(nèi)連接,也是在開(kāi)發(fā)過(guò)程中使用的最多的連接查詢。
2、語(yǔ)法格式
?? 以下是內(nèi)連接的基本語(yǔ)法:
SELECT 列名
FROM 表1
INNER JOIN 表2 ON 表1.關(guān)聯(lián)列 = 表2.關(guān)聯(lián)列;注:內(nèi)連會(huì)返回同時(shí)存在于表1和表2中的行,并且僅包括滿足關(guān)聯(lián)條件的行。
3、案例:顯示SMITH的名字和部門名稱(來(lái)自oracle 9i的經(jīng)典測(cè)試表)
之前我們通過(guò)笛卡爾積可以對(duì)其進(jìn)行操作,今天我們通過(guò)內(nèi)連接的方式來(lái)進(jìn)行有關(guān)操作。具體如下:
用前面的寫法:
select ename, dname from EMP, DEPT where EMP.deptno=DEPT.deptno and ename='SMITH';
結(jié)果展示:
用標(biāo)準(zhǔn)的內(nèi)連接寫法:
select ename, dname from EMP inner join DEPT on EMP.deptno=DEPT.deptno and ename='SMITH';
結(jié)果展示:
【小結(jié)】
- 內(nèi)連接的關(guān)鍵點(diǎn)是只返回兩個(gè)表中連接條件滿足的行,而不包括任何一個(gè)表中沒(méi)有匹配的行;
- 如果某行在其中一個(gè)表中沒(méi)有匹配的行,則不會(huì)包含在結(jié)果中
- 需要注意的是,內(nèi)連接并不包括符合條件但值為NULL的行。如果你需要包含這些行,可以使用接下來(lái)講到的外連接
(二)外連接
1、什么叫外連接
在MySQL中,外連接是一種用于檢索兩個(gè)或多個(gè)表之間的數(shù)據(jù)的方法,它包括左外連接、右外連接和全外連接。
2、左外連接 左外連
返回左表中的所有行,以及右表中與左表滿足聯(lián)接條件的行;
如果右表中沒(méi)有匹配的行,則返回 NULL 值。
?? 語(yǔ)法如下:select 字段名 from 表名1 left join 表名2 on 連接條件
2.1案例演示
首先,我先建立兩張表以供實(shí)現(xiàn)需要。具體如下: 表一:
表二:
需求: 查詢所有學(xué)生的成績(jī),如果這個(gè)學(xué)生沒(méi)有成績(jī),也要將學(xué)生的個(gè)人信息顯示出來(lái)
當(dāng)左邊表和右邊表沒(méi)有匹配時(shí),也會(huì)顯示左邊表的數(shù)據(jù):
select * from stu left join exam on stu.id=exam.id;
3、右外連接 右外連
- 與左外連相反,返回右表中的所有行,以及左表中與右表滿足聯(lián)接條件的行;
- 如果左表中沒(méi)有匹配的行,則返回 NULL 值。
?? 語(yǔ)法如下:select 字段名 from 表名1 right join 表名2 on 連接條件
3.1案例演示
需求 :對(duì) stu 表和 exam 表聯(lián)合查詢,把所有的成績(jī)都顯示出來(lái),即使這個(gè)成績(jī)沒(méi)有學(xué)生與它對(duì)應(yīng),也要 顯示出來(lái)
select * from stu right join exam on stu.id=exam.id;
4、全外連接
- 全外連返回左表和右表中的所有行,并將它們聯(lián)接在一起;
- 如果某個(gè)表中沒(méi)有匹配的行,則返回 NULL 值;
- MySQL不直接支持全外連,可以使用UNION操作符來(lái)模擬實(shí)現(xiàn)。
5、練習(xí)演示
需求 :列出部門名稱和這些部門的員工信息,同時(shí)列出沒(méi)有員工的部門
現(xiàn)在有這樣的場(chǎng)景,一家公司為了業(yè)務(wù)架構(gòu)的完整設(shè)置了某個(gè)部門,但是暫時(shí)這個(gè)部門還沒(méi)有人,隨著之后公司的發(fā)展這個(gè)部門才會(huì)發(fā)揮作用。
方法展示:
代碼展示:
select dname,ename,dept.deptno from dept left join emp on dept.deptno=emp.deptno order by dept.deptno asc;
輸出顯示:
(三)實(shí)戰(zhàn)OJ
大家看完上訴可以通過(guò)下面這兩道題目練練手:
(四)總結(jié)
通過(guò)內(nèi)連和外連操作,可以根據(jù)表之間的關(guān)聯(lián)條件將數(shù)據(jù)聯(lián)接起來(lái),并進(jìn)行靈活的查詢和分析。具體選擇哪種聯(lián)接類型取決于你的需求和數(shù)據(jù)結(jié)構(gòu)。
到此這篇關(guān)于mysql表的內(nèi)連和外連的文章就介紹到這了,更多相關(guān)mysql表內(nèi)連和外連內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
MySQL觸發(fā)器實(shí)現(xiàn)兩表數(shù)據(jù)同步的代碼詳解
在數(shù)據(jù)庫(kù)應(yīng)用中,我們經(jīng)常需要對(duì)數(shù)據(jù)進(jìn)行某些操作,并在操作完成后進(jìn)行相應(yīng)的處理,這時(shí)候,可以使用觸發(fā)器來(lái)實(shí)現(xiàn)這些功能,MySQL提供了強(qiáng)大的觸發(fā)器功能,本文將給大家詳細(xì)介紹MySQL觸發(fā)器實(shí)現(xiàn)兩表數(shù)據(jù)同步,需要的朋友可以參考下2023-12-12MySQL5.7.24版本的數(shù)據(jù)庫(kù)安裝過(guò)程圖文詳解
這篇文章主要介紹了MySQL5.7.24版本的數(shù)據(jù)庫(kù)安裝過(guò)程,需要的朋友可以參考下2018-11-11mysql存儲(chǔ)過(guò)程中使用游標(biāo)的實(shí)例
使用MYSQL存儲(chǔ)過(guò)程,可以實(shí)現(xiàn)諸多的功能,下面將為您介紹一個(gè)MYSQL存儲(chǔ)過(guò)程中使用游標(biāo)的實(shí)例2014-01-01mysql where中如何判斷不為空的實(shí)現(xiàn)
本文主要介紹了mysql where中如何判斷不為空的實(shí)現(xiàn),本文將針對(duì)這些空演示如何判斷是否為空,以及如何寫sql過(guò)濾,包括使用判空函數(shù),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2022-03-03