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

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

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

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

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

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

  • 員工信息存在 emp
  • 部門信息存在 dept
  • 學生信息存在 stu 表,成績存在 exam

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

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

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

1. 核心概念

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

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

2. 標準語法

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

3. 實戰(zhàn)案例

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

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

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

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

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

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

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

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

核心概念

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

標準語法

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

實戰(zhàn)案例

先建測試表:

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

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

需求:查詢所有學生的成績,沒成績的學生也要顯示。

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

結(jié)果:

  • jack、tom:有成績,正常顯示
  • kity、nono:無成績,成績字段顯示 NULL
  • 成績表 11 號:不匹配學生,不顯示

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

核心概念

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

標準語法

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

實戰(zhàn)案例

需求:顯示所有成績,哪怕沒有學生對應也要顯示。

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

結(jié)果:

  • 成績 1、2、11 全部顯示
  • 11 號成績無匹配學生,學生字段補 NULL

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

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

兩種等價寫法:

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

-- 方法2:員工右連接部門
SELECT d.dname, e.* 
FROM emp e 
RIGHT JOIN dept d 
ON d.deptno = e.deptno;

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

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

表格

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

簡單記:

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

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

相關(guān)文章

最新評論

武鸣县| 龙南县| 湘西| 德庆县| 花莲市| 和田县| 大理市| 大理市| 岳西县| 苗栗市| 昌邑市| 余江县| 工布江达县| 西峡县| 新巴尔虎右旗| 甘南县| 鄢陵县| 拜城县| 长子县| 墨脱县| 富裕县| 灵宝市| 东丰县| 乌兰察布市| 武夷山市| 剑川县| 秦安县| 河东区| 安吉县| 永福县| 新泰市| 临邑县| 衢州市| 交城县| 五寨县| 治多县| 广水市| 六安市| 靖西县| 响水县| 前郭尔|