欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

SQL中Join關(guān)聯(lián)類型及實戰(zhàn)案例小結(jié)

 更新時間:2025年09月11日 10:26:42   作者:沒事學(xué)AI  
在SQL查詢中,Join用于將兩個或多個表中的記錄根據(jù)關(guān)聯(lián)字段組合起來,是關(guān)系型數(shù)據(jù)庫中數(shù)據(jù)查詢的核心操作之一,本文給大家介紹SQL中Join關(guān)聯(lián)類型及實戰(zhàn)案例,感興趣的朋友跟隨小編一起看看吧

一、Join關(guān)聯(lián)類型概述

在SQL查詢中,Join用于將兩個或多個表中的記錄根據(jù)關(guān)聯(lián)字段組合起來,是關(guān)系型數(shù)據(jù)庫中數(shù)據(jù)查詢的核心操作之一。不同的Join類型決定了如何處理兩個表中不匹配的記錄,其在數(shù)據(jù)整合、多表查詢場景中發(fā)揮著關(guān)鍵作用,是數(shù)據(jù)分析、業(yè)務(wù)系統(tǒng)開發(fā)中必須掌握的基礎(chǔ)技術(shù)點。

二、內(nèi)連接(INNER JOIN)

1. 技術(shù)原理

內(nèi)連接是最常用的Join類型之一,它只返回兩個表中關(guān)聯(lián)字段匹配的記錄。即只有當(dāng)兩個表中的行在連接條件上滿足匹配關(guān)系時,才會被包含在結(jié)果集中,不匹配的行將被過濾掉。

2. 案例與代碼實現(xiàn)

案例場景:現(xiàn)有學(xué)生表(students)和成績表(scores),需查詢有成績記錄的學(xué)生信息及對應(yīng)的成績。

  • 學(xué)生表(students)結(jié)構(gòu):id(學(xué)生ID)、name(學(xué)生姓名)
  • 成績表(scores)結(jié)構(gòu):id(成績ID)、student_id(關(guān)聯(lián)學(xué)生ID)、score(成績)

代碼實現(xiàn)

-- 創(chuàng)建學(xué)生表并插入數(shù)據(jù)
CREATE TABLE students (
    id INT PRIMARY KEY,
    name VARCHAR(50) NOT NULL
);
INSERT INTO students (id, name) VALUES
(1, '張三'),
(2, '李四'),
(3, '王五');
-- 創(chuàng)建成績表并插入數(shù)據(jù)
CREATE TABLE scores (
    id INT PRIMARY KEY,
    student_id INT,
    score INT,
    FOREIGN KEY (student_id) REFERENCES students(id)
);
INSERT INTO scores (id, student_id, score) VALUES
(1, 1, 90),
(2, 2, 85);
-- 內(nèi)連接查詢
SELECT s.id, s.name, sc.score
FROM students s
INNER JOIN scores sc ON s.id = sc.student_id;

查詢結(jié)果

idnamescore
1張三90
2李四85

三、左連接(LEFT JOIN/LEFT OUTER JOIN)

1. 技術(shù)原理

左連接以左表為基準(zhǔn),返回左表中的所有記錄,以及右表中與左表關(guān)聯(lián)字段匹配的記錄。如果右表中沒有匹配的記錄,則結(jié)果集中右表的對應(yīng)字段將顯示為NULL。

2. 案例與代碼實現(xiàn)

案例場景:使用上述學(xué)生表和成績表,查詢所有學(xué)生的信息及對應(yīng)的成績(包括沒有成績的學(xué)生)。

代碼實現(xiàn)

-- 左連接查詢
SELECT s.id, s.name, sc.score
FROM students s
LEFT JOIN scores sc ON s.id = sc.student_id;

查詢結(jié)果

idnamescore
1張三90
2李四85
3王五NULL

四、右連接(RIGHT JOIN/RIGHT OUTER JOIN)

1. 技術(shù)原理

右連接與左連接邏輯相反,以右表為基準(zhǔn),返回右表中的所有記錄,以及左表中與右表關(guān)聯(lián)字段匹配的記錄。若左表中無匹配記錄,左表對應(yīng)字段顯示為NULL。

2. 案例與代碼實現(xiàn)

案例場景:使用上述學(xué)生表和成績表,查詢所有成績記錄及對應(yīng)的學(xué)生信息(若成績表中有無效學(xué)生ID,也會顯示)。

代碼實現(xiàn)

-- 向成績表插入一條無效學(xué)生ID的記錄
INSERT INTO scores (id, student_id, score) VALUES
(3, 4, 70);
-- 右連接查詢
SELECT s.id, s.name, sc.score
FROM students s
RIGHT JOIN scores sc ON s.id = sc.student_id;

查詢結(jié)果

idnamescore
1張三90
2李四85
NULLNULL70

五、全連接(FULL JOIN/FULL OUTER JOIN)

1. 技術(shù)原理

全連接返回左表和右表中的所有記錄,當(dāng)兩個表中的記錄匹配時,顯示組合后的結(jié)果;當(dāng)不匹配時,未匹配的一側(cè)字段顯示為NULL。需要注意的是,某些數(shù)據(jù)庫(如MySQL)不直接支持FULL JOIN,可通過左連接和右連接結(jié)合UNION實現(xiàn)。

2. 案例與代碼實現(xiàn)

案例場景:查詢所有學(xué)生和所有成績記錄的關(guān)聯(lián)信息,包括沒有成績的學(xué)生和沒有對應(yīng)有效學(xué)生的成績。

代碼實現(xiàn)(以支持FULL JOIN的數(shù)據(jù)庫為例)

SELECT s.id, s.name, sc.score
FROM students s
FULL JOIN scores sc ON s.id = sc.student_id;

MySQL中實現(xiàn)全連接

SELECT s.id, s.name, sc.score
FROM students s
LEFT JOIN scores sc ON s.id = sc.student_id
UNION
SELECT s.id, s.name, sc.score
FROM students s
RIGHT JOIN scores sc ON s.id = sc.student_id;

查詢結(jié)果

idnamescore
1張三90
2李四85
3王五NULL
NULLNULL70

六、交叉連接(CROSS JOIN)

1. 技術(shù)原理

交叉連接會返回兩個表中所有可能的記錄組合,即左表的每一行與右表的每一行都將形成一條新記錄,結(jié)果集的行數(shù)為兩個表行數(shù)的乘積,通常需要配合WHERE子句篩選有意義的數(shù)據(jù)。

2. 案例與代碼實現(xiàn)

案例場景:查詢學(xué)生表和課程表(courses)的所有可能組合,用于生成學(xué)生選課初始列表。

  • 課程表(courses)結(jié)構(gòu):id(課程ID)、name(課程名稱)

代碼實現(xiàn)

-- 創(chuàng)建課程表并插入數(shù)據(jù)
CREATE TABLE courses (
    id INT PRIMARY KEY,
    name VARCHAR(50) NOT NULL
);
INSERT INTO courses (id, name) VALUES
(1, '數(shù)學(xué)'),
(2, '語文');
-- 交叉連接查詢
SELECT s.name AS student_name, c.name AS course_name
FROM students s
CROSS JOIN courses c;

查詢結(jié)果

student_namecourse_name
張三數(shù)學(xué)
張三語文
李四數(shù)學(xué)
李四語文
王五數(shù)學(xué)
王五語文

七、自連接(SELF JOIN)

1. 技術(shù)原理

自連接是指表與自身進(jìn)行連接,將一張表當(dāng)作兩張不同的表來處理,通常用于查詢表中具有層級關(guān)系或關(guān)聯(lián)關(guān)系的記錄,如員工表中查詢員工及其所屬領(lǐng)導(dǎo)信息。

2. 案例與代碼實現(xiàn)

案例場景:在員工表(employees)中,查詢每個員工及其直接領(lǐng)導(dǎo)的姓名。

  • 員工表(employees)結(jié)構(gòu):id(員工ID)、name(員工姓名)、manager_id(領(lǐng)導(dǎo)ID,關(guān)聯(lián)自身id)

代碼實現(xiàn)

-- 創(chuàng)建員工表并插入數(shù)據(jù)
CREATE TABLE employees (
    id INT PRIMARY KEY,
    name VARCHAR(50) NOT NULL,
    manager_id INT,
    FOREIGN KEY (manager_id) REFERENCES employees(id)
);
INSERT INTO employees (id, name, manager_id) VALUES
(1, '老板', NULL),
(2, '員工A', 1),
(3, '員工B', 1),
(4, '員工C', 2);
-- 自連接查詢
SELECT e.name AS employee_name, m.name AS manager_name
FROM employees e
LEFT JOIN employees m ON e.manager_id = m.id;

查詢結(jié)果

employee_namemanager_name
老板NULL
員工A老板
員工B老板
員工C員工A

到此這篇關(guān)于SQL中Join關(guān)聯(lián)類型及實戰(zhàn)案例小結(jié)的文章就介紹到這了,更多相關(guān)sql join關(guān)聯(lián)類型內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • mybatis動態(tài)sql常用場景總結(jié)

    mybatis動態(tài)sql常用場景總結(jié)

    在平時開發(fā)中針對動態(tài)sql經(jīng)常會使用到,為了加深對動態(tài)sql的熟練度,小編給大家分享一篇教程關(guān)于mybatis動態(tài)sql常用場景總結(jié),需要的朋友可以參考下
    2021-08-08
  • Sql Server之?dāng)?shù)據(jù)類型詳解

    Sql Server之?dāng)?shù)據(jù)類型詳解

    本文詳細(xì)講解了Sql Server中的數(shù)據(jù)類型,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-02-02
  • SQLServer2008R2版安裝和測試的實現(xiàn)

    SQLServer2008R2版安裝和測試的實現(xiàn)

    本文主要介紹了在Windows10上安裝和配置SQL?Server?2008R2,內(nèi)容涵蓋了安裝過程中的注意事項,如安裝.NET?Framework?3.5、處理遠(yuǎn)程過程調(diào)用失敗等常見問題,感興趣的可以了解一下
    2024-12-12
  • MyBatis SQL xml處理小于號與大于號正確的格式

    MyBatis SQL xml處理小于號與大于號正確的格式

    這篇文章主要介紹了MyBatis SQL xml處理小于號與大于號正確的格式,需要的朋友可以參考下
    2018-06-06
  • sql基本函數(shù)大全

    sql基本函數(shù)大全

    sql基本函數(shù)大全...
    2007-03-03
  • SQLServer 快速備份的十種方法

    SQLServer 快速備份的十種方法

    本文中我們將分十種方法來討論如何進(jìn)行SQL Server的快速備份。
    2009-07-07
  • SQL Server游標(biāo)的介紹與使用

    SQL Server游標(biāo)的介紹與使用

    今天小編就為大家分享一篇關(guān)于SQL Server游標(biāo)的介紹與使用,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2019-01-01
  • sql中時間以5分鐘半個小時任意間隔分組的實現(xiàn)方法

    sql中時間以5分鐘半個小時任意間隔分組的實現(xiàn)方法

    這篇文章主要介紹了sql中時間以5分鐘半個小時任意間隔分組的實現(xiàn)方法,在文中給大家提到了sql server時間查詢的代碼,需要的朋友可以參考下
    2019-06-06
  • SELECT...INTO的具體用法

    SELECT...INTO的具體用法

    本文主要介紹了SELECT...INTO的具體用法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-04-04
  • SQL SERVER 利用存儲過程查看角色和用戶信息的寫法

    SQL SERVER 利用存儲過程查看角色和用戶信息的寫法

    SQL SERVER 利用存儲過程查看角色(服務(wù)器/數(shù)據(jù)庫)和用戶信息,感興趣的朋友可以了解下,或許對你有所幫助
    2013-01-01

最新評論