最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

一文帶你徹底搞懂MySQL數(shù)據(jù)庫(kù)中的內(nèi)外連接

 更新時(shí)間:2026年05月14日 08:47:25   作者:重生之小比特  
在 MySQL 多表查詢中,表連接是最核心,最常用的知識(shí)點(diǎn),這篇博客將用最通俗的語(yǔ)言,帶你徹底搞懂內(nèi)連接、左外連接、右外連接,看完直接上手寫 SQL

在 MySQL 多表查詢中,表連接是最核心、最常用的知識(shí)點(diǎn),不管是業(yè)務(wù)開發(fā)還是面試,都是高頻考點(diǎn)。這篇博客我用最通俗的語(yǔ)言,帶你徹底搞懂內(nèi)連接、左外連接、右外連接,看完直接上手寫 SQL。

一、先搞懂:為什么需要表連接?

實(shí)際業(yè)務(wù)里,數(shù)據(jù)不會(huì)只存在一張表中。比如:

  • 員工信息存在 emp
  • 部門信息存在 dept
  • 學(xué)生信息存在 stu 表,成績(jī)存在 exam

同時(shí)查員工 + 部門、學(xué)生 + 成績(jī),就必須用表連接,把多張表按關(guān)聯(lián)字段拼起來(lái)查詢。

表連接本質(zhì):把多張表按關(guān)聯(lián)條件組合,返回符合要求的結(jié)果集。

二、內(nèi)連接(INNER JOIN):只保留匹配的數(shù)據(jù)

1. 核心概念

內(nèi)連接 = 取兩張表的交集只返回兩張表能匹配上的數(shù)據(jù),匹配不上的直接丟棄

我們平時(shí)寫的 from 表1,表2 where 條件,本質(zhì)就是內(nèi)連接。

2. 標(biāo)準(zhǔn)語(yǔ)法

SELECT 字段名 
FROM 表1 
INNER JOIN 表2 
ON 連接條件 
AND 其他篩選條件;
  • INNER JOIN:內(nèi)連接關(guān)鍵字
  • ON:寫表與表之間的關(guān)聯(lián)條件(必須有)
  • AND:額外的篩選條件

3. 實(shí)戰(zhàn)案例

需求:查詢員工 SMITH 的名字和所屬部門名稱。

-- 老式寫法(等價(jià)內(nèi)連接)
SELECT ename, dname 
FROM emp, dept 
WHERE emp.deptno = dept.deptno 
AND ename = 'SMITH';

-- 標(biāo)準(zhǔn)內(nèi)連接寫法(推薦)
SELECT ename, dname 
FROM emp 
INNER JOIN dept 
ON emp.deptno = dept.deptno 
AND ename = 'SMITH';

結(jié)果:只返回 SMITH 及其對(duì)應(yīng)部門,無(wú)匹配的數(shù)據(jù)不會(huì)出現(xiàn)。

三、外連接:保留 “不匹配” 的數(shù)據(jù)

外連接和內(nèi)連接最大區(qū)別:會(huì)保留某張表的全部數(shù)據(jù),即使另一張表沒(méi)有匹配項(xiàng),也會(huì)顯示,補(bǔ) NULL。

外連接分兩種:左外連接(LEFT JOIN)、右外連接(RIGHT JOIN)

1. 左外連接(LEFT JOIN):左邊表全顯示

核心概念

  • 左表完全顯示
  • 右表只顯示匹配上的數(shù)據(jù)
  • 匹配不上 → 右表字段補(bǔ) NULL

標(biāo)準(zhǔn)語(yǔ)法

SELECT 字段名 
FROM 表1(左表)
LEFT JOIN 表2(右表)
ON 連接條件;

實(shí)戰(zhàn)案例

先建測(cè)試表:

-- 學(xué)生表
CREATE TABLE stu (id INT, name VARCHAR(30));
INSERT INTO stu VALUES(1,'jack'),(2,'tom'),(3,'kity'),(4,'nono');

-- 成績(jī)表
CREATE TABLE exam (id INT, grade INT);
INSERT INTO exam VALUES(1, 56),(2,76),(11, 8);

需求:查詢所有學(xué)生的成績(jī),沒(méi)成績(jī)的學(xué)生也要顯示。

SELECT * 
FROM stu 
LEFT JOIN exam 
ON stu.id = exam.id;

結(jié)果:

  • jack、tom:有成績(jī),正常顯示
  • kity、nono:無(wú)成績(jī),成績(jī)字段顯示 NULL
  • 成績(jī)表 11 號(hào):不匹配學(xué)生,不顯示

2. 右外連接(RIGHT JOIN):右邊表全顯示

核心概念

  • 右表完全顯示
  • 左表只顯示匹配上的數(shù)據(jù)
  • 匹配不上 → 左表字段補(bǔ) NULL

標(biāo)準(zhǔn)語(yǔ)法

SELECT 字段名 
FROM 表1
RIGHT JOIN 表2(右表)
ON 連接條件;

實(shí)戰(zhàn)案例

需求:顯示所有成績(jī),哪怕沒(méi)有學(xué)生對(duì)應(yīng)也要顯示。

SELECT * 
FROM stu 
RIGHT JOIN exam 
ON stu.id = exam.id;

結(jié)果:

  • 成績(jī) 1、2、11 全部顯示
  • 11 號(hào)成績(jī)無(wú)匹配學(xué)生,學(xué)生字段補(bǔ) NULL

四、高頻練習(xí):部門 + 員工(經(jīng)典面試題)

需求:列出所有部門名稱 + 員工信息,包括沒(méi)有員工的部門。

兩種等價(jià)寫法:

-- 方法1:部門左連接員工(推薦)
SELECT d.dname, e.* 
FROM dept d 
LEFT JOIN emp e 
ON d.deptno = e.deptno;

-- 方法2:?jiǎn)T工右連接部門
SELECT d.dname, e.* 
FROM emp e 
RIGHT JOIN dept d 
ON d.deptno = e.deptno;

效果:所有部門都顯示,沒(méi)員工的部門,員工字段為 NULL。

五、一張圖總結(jié):內(nèi)連接 vs 左 / 右連接

表格

連接類型關(guān)鍵字保留數(shù)據(jù)適用場(chǎng)景
內(nèi)連接INNER JOIN兩張表的交集只查匹配數(shù)據(jù)
左外連接LEFT JOIN左表全部數(shù)據(jù)以左表為主,查全部 + 關(guān)聯(lián)
右外連接RIGHT JOIN右表全部數(shù)據(jù)以右表為主,查全部 + 關(guān)聯(lián)

簡(jiǎn)單記:

  • 要交集 → 內(nèi)連接
  • 要某張表全量數(shù)據(jù) → 左 / 右連接
  • 左連接 = 左邊全顯;右連接 = 右邊全顯

到此這篇關(guān)于一文帶你徹底搞懂MySQL數(shù)據(jù)庫(kù)中的內(nèi)外連接的文章就介紹到這了,更多相關(guān)MySQL數(shù)據(jù)庫(kù)內(nèi)外連接內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評(píng)論

远安县| 定襄县| 汉中市| 朝阳市| 榆中县| 上饶县| 常熟市| 大田县| 富平县| 台安县| 灌南县| 察哈| 洮南市| 大城县| 台南县| 温州市| 阳信县| 淅川县| 凤凰县| 新兴县| 修文县| 平昌县| 恩平市| 易门县| 郯城县| 南阳市| 新宾| 汶上县| 梨树县| 繁峙县| 家居| 兰溪市| 宜州市| 红桥区| 彭阳县| 江口县| 沙雅县| 浦城县| 崇礼县| 贵阳市| 天祝|