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