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

SQL多表聯(lián)查的幾種方法示例總結(jié)

 更新時間:2024年09月30日 09:37:19   作者:ZZDICT  
本文詳細(xì)介紹了SQL中不同類型的連接操作,包括內(nèi)連接、左外連接、右外連接、全外連接、交叉連接、自連接及其排除內(nèi)連接的特殊應(yīng)用,每種連接類型都提供了語法說明和具體示例,幫助理解如何在實際中應(yīng)用這些連接來處理和分析數(shù)據(jù),需要的朋友可以參考下

1. 內(nèi)連接(INNER JOIN)

語法:

SELECT 列名
FROM 表1
INNER JOIN 表2 ON 表1.列名 = 表2.列名;

示例:

SELECT employees.name, departments.department_name
FROM employees
INNER JOIN departments ON employees.department_id = departments.id;

2. 左外連接(LEFT JOIN)

語法:

SELECT 列名
FROM 表1
LEFT JOIN 表2 ON 表1.列名 = 表2.列名;

示例:

SELECT employees.name, departments.department_name
FROM employees
LEFT JOIN departments ON employees.department_id = departments.id;

3. 右外連接(RIGHT JOIN)

語法:

SELECT 列名
FROM 表1
RIGHT JOIN 表2 ON 表1.列名 = 表2.列名;

示例:

SELECT employees.name, departments.department_name
FROM employees
RIGHT JOIN departments ON employees.department_id = departments.id;

4. 全外連接(FULL JOIN)

語法:

SELECT 列名
FROM 表1
LEFT JOIN 表2 ON 表1.列名 = 表2.列名
UNION
SELECT 列名
FROM 表1
RIGHT JOIN 表2 ON 表1.列名 = 表2.列名;

示例:

SELECT employees.name, departments.department_name
FROM employees
LEFT JOIN departments ON employees.department_id = departments.id
UNION
SELECT employees.name, departments.department_name
FROM employees
RIGHT JOIN departments ON employees.department_id = departments.id;

5. 交叉連接(CROSS JOIN)

語法:

SELECT 列名
FROM 表1
CROSS JOIN 表2;

示例:

SELECT employees.name, departments.department_name
FROM employees
CROSS JOIN departments;

6. 自連接(SELF JOIN)

自聯(lián)接(Self Join)是指一個表與自身進(jìn)行聯(lián)接。這種操作通常用于表中記錄之間的比較或關(guān)聯(lián)。自聯(lián)接可以幫助解決例如員工與其經(jīng)理的關(guān)系、產(chǎn)品與產(chǎn)品之間的關(guān)系等問題。

自連接查詢,可以是內(nèi)連接查詢,也可以是外連接查詢。

語法:

SELECT 列名1, 列名2, ...
FROM 表名 AS 別名1
JOIN 表名 AS 別名2
ON 別名1.列名 = 別名2.列名
WHERE 條件;

示例:員工與經(jīng)理自聯(lián)接

假設(shè)我們有一個 employees 表,如下:

employees 表結(jié)構(gòu):

idnamemanager_id
1AliceNULL
2Bob1
3Carol1
4Dave2

查詢員工及其經(jīng)理的姓名

SELECT employees.name AS employee_name, manager.name AS manager_name
FROM employees
LEFT JOIN employees AS manager
ON employees.manager_id = manager.id;

7. 左外連接排除內(nèi)連接

定義:返回左表中所有記錄和右表中匹配的記錄,但排除那些在右表中也有匹配的記錄。

語法:

SELECT 列名
FROM 表1
LEFT JOIN 表2 ON 表1.列名 = 表2.列名
WHERE 表2.列名 IS NULL;

示例:

SELECT employees.name
FROM employees
LEFT JOIN departments ON employees.department_id = departments.id
WHERE departments.id IS NULL;

8. 右外連接排除內(nèi)連接

定義:返回右表中所有記錄和左表中匹配的記錄,但排除那些在左表中也有匹配的記錄。

語法:

SELECT 列名
FROM 表1
RIGHT JOIN 表2 ON 表1.列名 = 表2.列名
WHERE 表1.列名 IS NULL;

示例:

SELECT departments.department_name
FROM departments
RIGHT JOIN employees ON departments.id = employees.department_id
WHERE employees.id IS NULL;

9. 全外連接排除內(nèi)連接

定義:返回兩個表的所有記錄,但排除那些在兩個表中都匹配的記錄。

語法:

SELECT 列名
FROM 表1
LEFT JOIN 表2 ON 表1.列名 = 表2.列名
WHERE 表2.列名 IS NULL
UNION
SELECT 列名
FROM 表2
RIGHT JOIN 表1 ON 表2.列名 = 表1.列名
WHERE 表1.列名 IS NULL;

示例:

SELECT employees.name
FROM employees
LEFT JOIN departments ON employees.department_id = departments.id
WHERE departments.id IS NULL
UNION
SELECT departments.department_name
FROM departments
RIGHT JOIN employees ON departments.id = employees.department_id
WHERE employees.id IS NULL;

總結(jié)

  • 內(nèi)連接:僅返回兩個表中匹配的記錄。
  • 左外連接:返回左表的所有記錄和右表中匹配的記錄,右表中沒有匹配的記錄顯示為 NULL。
  • 右外連接:返回右表的所有記錄和左表中匹配的記錄,左表中沒有匹配的記錄顯示為 NULL。
  • 全外連接:返回兩個表的所有記錄,通過 UNION 模擬。
  • 交叉連接:返回兩個表的笛卡爾積。
  • 自連接:表與自身的聯(lián)接,常用于記錄間的比較。
  • 左外連接排除內(nèi)連接:返回左表中的記錄,這些記錄在右表中沒有匹配項。
  • 右外連接排除內(nèi)連接:返回右表中的記錄,這些記錄在左表中沒有匹配項。
  • 全外連接排除內(nèi)連接:返回兩個表的所有記錄,排除那些在兩個表中都有匹配的記錄。

聯(lián)合查詢 

聯(lián)合查詢(也稱為集合操作)用于將多個 SELECT 查詢的結(jié)果集合并在一起。

1.  UNION

  • 功能:將兩個或多個 SELECT 查詢的結(jié)果集合并為一個結(jié)果集,并去除重復(fù)行。
  • 語法
    SELECT column1, column2 FROM table1
    UNION
    SELECT column1, column2 FROM table2;
    

    注意:所有 SELECT 查詢必須具有相同數(shù)量的列,并且對應(yīng)列的類型應(yīng)兼容。

2.  UNION ALL

  • 功能:將兩個或多個 SELECT 查詢的結(jié)果集合并為一個結(jié)果集,包括所有重復(fù)行。
  • 語法
    SELECT column1, column2 FROM table1
    UNION ALL
    SELECT column1, column2 FROM table2;
    

    注意:比 UNION 更高效,因為它不去重。

3. INTERSECT

  • 功能:返回兩個 SELECT 查詢結(jié)果中的交集,即兩個查詢中都存在的行。
  • 語法
    SELECT column1, column2 FROM table1
    INTERSECT
    SELECT column1, column2 FROM table2;
    
  • 注意:MySQL 8.0 及之前的版本不直接支持 INTERSECT,可以使用 INNER JOIN 來實現(xiàn)類似功能。

4. EXCEPT (或 MINUS)

  • 功能:返回在第一個 SELECT 查詢中存在但在第二個 SELECT 查詢中不存在的行。
  • 語法
    SELECT column1, column2 FROM table1
    EXCEPT
    SELECT column1, column2 FROM table2;
    

    注意:MySQL 8.0 及之前的版本不直接支持 EXCEPT??梢允褂?nbsp;LEFT JOIN 和 IS NULL 實現(xiàn)類似功能。

三表聯(lián)查 

定義:將三個表通過指定的連接條件聯(lián)接在一起,通常用于從多個表中獲取相關(guān)數(shù)據(jù)。

語法格式

SELECT 列名1, 列名2, ...
FROM 表1
JOIN 表2 ON 表1.列名 = 表2.列名
JOIN 表3 ON 表2.列名 = 表3.列名
WHERE 條件
GROUP BY 列名
HAVING 條件
ORDER BY 列名 [ASC|DESC]
LIMIT n OFFSET m;

假設(shè)我們有以下三個表:

  • employees(員工表):包含員工的基本信息。
  • departments(部門表):包含部門的信息。
  • salaries(薪資表):包含員工的薪資信息。

表結(jié)構(gòu)示例:

employees 表:

idnamedepartment_id
1Alice1
2Bob2
3Carol1

departments 表:

iddepartment_name
1HR
2IT

salaries 表:

employee_idsalary
170000
280000
375000

查詢語句

SELECT employees.name, departments.department_name, salaries.salary
FROM employees
INNER JOIN departments ON employees.department_id = departments.id
INNER JOIN salaries ON employees.id = salaries.employee_id;

/*
解釋:

INNER JOIN departments ON employees.department_id = departments.id:

將 employees 表與 departments 表通過 department_id 和 id 列進(jìn)行連接,提取部門名稱。
INNER JOIN salaries ON employees.id = salaries.employee_id:

將 employees 表與 salaries 表通過 id 和 employee_id 列進(jìn)行連接,提取薪資信息。
SELECT employees.name, departments.department_name, salaries.salary:

從連接后的結(jié)果中選擇員工姓名、部門名稱和薪資信息。
*/

四表聯(lián)查

定義:將四個表通過指定的連接條件聯(lián)接在一起,用于從多個表中獲取更復(fù)雜的數(shù)據(jù)。

語法格式

SELECT 列名1, 列名2, ...
FROM 表1
JOIN 表2 ON 表1.列名 = 表2.列名
JOIN 表3 ON 表2.列名 = 表3.列名
JOIN 表4 ON 表3.列名 = 表4.列名
WHERE 條件
GROUP BY 列名
HAVING 條件
ORDER BY 列名 [ASC|DESC]
LIMIT n OFFSET m;

四表聯(lián)查示例

假設(shè)我們有以下四個表:

  • employees(員工表):包含員工的基本信息。
  • departments(部門表):包含部門的信息。
  • salaries(薪資表):包含員工的薪資信息。
  • projects(項目表):包含項目的信息。

表結(jié)構(gòu)示例:

employees 表:

idnamedepartment_id
1Alice1
2Bob2
3Carol1

departments 表:

iddepartment_name
1HR
2IT

salaries 表:

employee_idsalary
170000
280000
375000

projects 表:

project_idproject_namedepartment_id
1Project X1
2Project Y2

查詢語句

SELECT employees.name, departments.department_name, salaries.salary, projects.project_name
FROM employees
INNER JOIN departments ON employees.department_id = departments.id
INNER JOIN salaries ON employees.id = salaries.employee_id
INNER JOIN projects ON departments.id = projects.department_id;

/*
解釋:

INNER JOIN departments ON employees.department_id = departments.id:

將 employees 表與 departments 表通過 department_id 和 id 列進(jìn)行連接,提取部門名稱。
INNER JOIN salaries ON employees.id = salaries.employee_id:

將 employees 表與 salaries 表通過 id 和 employee_id 列進(jìn)行連接,提取薪資信息。
INNER JOIN projects ON departments.id = projects.department_id:

將 departments 表與 projects 表通過 department_id 和 department_id 列進(jìn)行連接,提取項目名稱。
SELECT employees.name, departments.department_name, salaries.salary, projects.project_name:

從連接后的結(jié)果中選擇員工姓名、部門名稱、薪資信息和項目名稱。
*/

總結(jié) 

到此這篇關(guān)于SQL多表聯(lián)查的幾種方法的文章就介紹到這了,更多相關(guān)SQL多表聯(lián)查內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Windows環(huán)境MySQL全量備份+增量備份的實現(xiàn)

    Windows環(huán)境MySQL全量備份+增量備份的實現(xiàn)

    本文主要介紹了Windows環(huán)境MySQL全量備份+增量備份的實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2024-08-08
  • 解決xmapp啟動mysql出現(xiàn)Error: MySQL shutdown unexpectedly.問題

    解決xmapp啟動mysql出現(xiàn)Error: MySQL shutdown unexpec

    這篇文章主要介紹了解決xmapp啟動mysql出現(xiàn)Error: MySQL shutdown unexpectedly.問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-06-06
  • MySQL給查詢記錄增加序列號的實現(xiàn)方法

    MySQL給查詢記錄增加序列號的實現(xiàn)方法

    這篇文章主要介紹了MySQL給查詢記錄增加序列號的實現(xiàn)方法,文中通過代碼示例講解的非常詳細(xì),對大家的學(xué)習(xí)或工作有一定的參考價值,需要的朋友可以參考下
    2023-11-11
  • MySql中流程控制函數(shù)/統(tǒng)計函數(shù)/分組查詢用法解析

    MySql中流程控制函數(shù)/統(tǒng)計函數(shù)/分組查詢用法解析

    這篇文章主要介紹了MySql中流程控制函數(shù)/統(tǒng)計函數(shù)/分組查詢用法解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-07-07
  • MySQL中常用查看鎖和事務(wù)的SQL語句詳解

    MySQL中常用查看鎖和事務(wù)的SQL語句詳解

    這篇文章主要介紹了MySQL中常用查看鎖和事務(wù)的SQL語句,用于查看鎖和事務(wù)的狀態(tài),本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-07-07
  • mysql技巧:提高插入數(shù)據(jù)(添加記錄)的速度

    mysql技巧:提高插入數(shù)據(jù)(添加記錄)的速度

    這篇文章主要介紹了mysql技巧:提高插入數(shù)據(jù)(添加記錄)的速度,需要的朋友可以參考下
    2014-12-12
  • Mysql中g(shù)roup by 使用中發(fā)現(xiàn)的問題

    Mysql中g(shù)roup by 使用中發(fā)現(xiàn)的問題

    當(dāng)使用MySQL的GROUP BY語句時,根據(jù)指定的列對結(jié)果進(jìn)行分組,這種情況通常是由于在 GROUP BY 中選擇的字段與其他非聚合字段不兼容,或者在 SELECT 子句中沒有正確使用聚合函數(shù)所導(dǎo)致的,本文給大家介紹Mysql中g(shù)roup by 使用中發(fā)現(xiàn)的問題,感興趣的朋友跟隨小編一起看看吧
    2024-06-06
  • mysql模糊查詢like和regexp小結(jié)

    mysql模糊查詢like和regexp小結(jié)

    在mysql中實現(xiàn)模糊查詢有兩種方法一種是LIKE/NOT LIKE,另一種是REGEXP/NOT REGEXP方法,下面我來給大家介紹它們的用法,希望此教程對各位同學(xué)會有所幫助。
    2014-09-09
  • MySql用DATE_FORMAT截取DateTime字段的日期值

    MySql用DATE_FORMAT截取DateTime字段的日期值

    MySql截取DateTime字段的日期值可以使用DATE_FORMAT來格式化,使用方法如下
    2014-08-08
  • 解決Navicat for Mysql連接報錯1251的問題(連接失敗)

    解決Navicat for Mysql連接報錯1251的問題(連接失敗)

    記得在之前給大家介紹過Navicat for Mysql連接報錯的問題,可能寫的不夠詳細(xì),今天在稍作修改補充下,對Navicat for Mysql連接報錯1251問題感興趣的朋友跟隨小編一起看看吧
    2021-05-05

最新評論