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

SQL中Join關(guān)聯(lián)類型及實(shí)戰(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)類型及實(shí)戰(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ù)點(diǎn)。

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

1. 技術(shù)原理

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

2. 案例與代碼實(shí)現(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(成績)

代碼實(shí)現(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. 案例與代碼實(shí)現(xiàn)

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

代碼實(shí)現(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. 案例與代碼實(shí)現(xiàn)

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

代碼實(shí)現(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實(shí)現(xiàn)。

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

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

代碼實(shí)現(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中實(shí)現(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. 案例與代碼實(shí)現(xiàn)

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

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

代碼實(shí)現(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. 案例與代碼實(shí)現(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)

代碼實(shí)現(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)類型及實(shí)戰(zhàn)案例小結(jié)的文章就介紹到這了,更多相關(guān)sql join關(guān)聯(lián)類型內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評論

上杭县| 罗城| 原平市| 若羌县| 昌邑市| 建昌县| 利辛县| 衡阳县| 淮北市| 新沂市| 临洮县| 广安市| 柳河县| 大竹县| 新密市| 伊吾县| 仙游县| 西吉县| 资兴市| 克什克腾旗| 安乡县| 普洱| 眉山市| 张家口市| 东丽区| 固镇县| 宽甸| 邯郸县| 绩溪县| 凭祥市| 道孚县| 保定市| 新民市| 巨鹿县| 贵德县| 厦门市| 峡江县| 津市市| 织金县| 三亚市| 珲春市|