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

MySQL 多表連接操作方法(INNER JOIN、LEFT JOIN、RIGHT JOIN、FULL OUTER JOIN)

 更新時間:2025年04月30日 14:56:15   作者:今天你睡了嘛  
多表連接是一種將兩個或多個表中的數(shù)據(jù)組合在一起的 SQL 操作,通過連接,我們可以根據(jù)表之間的關(guān)系(如主鍵和外鍵)提取相關(guān)聯(lián)的數(shù)據(jù),本文給大家介紹MySQL 多表連接操作方法(INNER JOIN、LEFT JOIN、RIGHT JOIN、FULL OUTER JOIN),感興趣的朋友一起看看吧

一、 什么是多表連接?

多表連接是一種將兩個或多個表中的數(shù)據(jù)組合在一起的 SQL 操作。通過連接,我們可以根據(jù)表之間的關(guān)系(如主鍵和外鍵)提取相關(guān)聯(lián)的數(shù)據(jù)。連接操作是關(guān)系型數(shù)據(jù)庫的核心功能之一,廣泛應(yīng)用于數(shù)據(jù)分析、報表生成等場景。

二、 MySQL 支持的連接類型

連接類型作用特點適用場景MySQL 支持連接方式
INNER JOIN返回兩個表中匹配的行。只返回滿足連接條件的記錄。需要獲取兩個表中完全匹配的數(shù)據(jù)。支持內(nèi)連接
LEFT JOIN返回左表中的所有行,以及右表中匹配的行。如果右表中沒有匹配的行,則返回 NULL。左表為主,右表為輔。需要獲取左表中的所有數(shù)據(jù),即使右表中沒有匹配的記錄。支持左外連接
RIGHT JOIN返回右表中的所有行,以及左表中匹配的行。如果左表中沒有匹配的行,則返回 NULL。右表為主,左表為輔。需要獲取右表中的所有數(shù)據(jù),即使左表中沒有匹配的記錄。支持右外連接
FULL OUTER JOIN返回左表和右表中的所有行。如果某一行在另一個表中沒有匹配的行,則返回 NULL。返回兩個表的并集。需要獲取兩個表中的所有數(shù)據(jù),即使沒有匹配的記錄。不支持,但可以通過 UNION 模擬實現(xiàn)全連接

注意:

1、OUTER JOIN 是一種連接類型,它包括了 LEFT JOIN、RIGHT JOINFULL OUTER JOIN。它與 INNER JOIN 不同,OUTER JOIN 會返回不僅包括匹配的行,還包括不匹配的行(用 NULL 填充)。OUTER JOINLEFT JOIN、RIGHT JOINFULL OUTER JOIN 的總稱。

2、默認(rèn)情況下,JOININNER JOIN 的簡寫形式。

三、 多表連接的語法

多表連接的基本語法如下:

SELECT 列名
FROM 表1
連接類型 JOIN 表2
ON 表1.列 = 表2.列;
  • 連接類型:可以是 INNER JOIN、LEFT JOIN、RIGHT JOIN 等。
  • ON 子句:指定連接條件,通常是主鍵和外鍵的關(guān)系。

四、實戰(zhàn)示例 數(shù)據(jù)準(zhǔn)備

創(chuàng)建兩個表 PersonAddress,并插入測試數(shù)據(jù):

CREATE TABLE Person (
    personId INT PRIMARY KEY,
    firstName VARCHAR(50),
    lastName VARCHAR(50)
);
CREATE TABLE Address (
    addressId INT PRIMARY KEY,
    personId INT,
    city VARCHAR(50),
    state VARCHAR(50)
);
INSERT INTO Person (personId, firstName, lastName) VALUES
(1, 'Allen', 'Wang'),
(2, 'Bob', 'Alice'),
(3, 'Charlie', 'Brown');
INSERT INTO Address (addressId, personId, city, state) VALUES
(1, 2, 'New York City', 'New York'),
(2, 3, 'Leetcode', 'California'),
(3, 4, 'Mountain View', 'California');

(1) INNER JOIN 示例

返回 PersonAddress 表中匹配的行:

SELECT p.firstName, p.lastName, a.city, a.state
FROM Person p
INNER JOIN Address a ON p.personId = a.personId;

結(jié)果

firstNamelastNamecitystate
BobAliceNew York CityNew York
CharlieBrownLeetcodeCalifornia

(2) LEFT JOIN 示例

返回 Person 表中的所有行,以及 Address 表中匹配的行:

SELECT p.firstName, p.lastName, a.city, a.state
FROM Person p
LEFT JOIN Address a ON p.personId = a.personId;

結(jié)果

firstNamelastNamecitystate
AllenWangNULLNULL
BobAliceNew York CityNew York
CharlieBrownLeetcodeCalifornia

(3) RIGHT JOIN 示例

返回 Address 表中的所有行,以及 Person 表中匹配的行:

SELECT p.firstName, p.lastName, a.city, a.state
FROM Person p
RIGHT JOIN Address a ON p.personId = a.personId;

結(jié)果

firstNamelastNamecitystate
BobAliceNew York CityNew York
CharlieBrownLeetcodeCalifornia
NULLNULLMountain ViewCalifornia

(4) FULL OUTER JOIN 模擬

MySQL 不支持 FULL OUTER JOIN,但可以通過 UNION 模擬實現(xiàn):

SELECT p.firstName, p.lastName, a.city, a.state
FROM Person p
LEFT JOIN Address a ON p.personId = a.personId
UNION
SELECT p.firstName, p.lastName, a.city, a.state
FROM Person p
RIGHT JOIN Address a ON p.personId = a.personId;

結(jié)果

firstNamelastNamecitystate
AllenWangNULLNULL
BobAliceNew York CityNew York
CharlieBrownLeetcodeCalifornia
NULLNULLMountain ViewCalifornia

五、連接的性能優(yōu)化

(1) 索引的使用

在連接字段(如 personId)上創(chuàng)建索引,可以顯著提高查詢性能:

CREATE INDEX idx_personId ON Address(personId);

注意:本文的測試數(shù)據(jù)創(chuàng)建了主鍵,默認(rèn)創(chuàng)建了索引 (2) 查詢優(yōu)化技巧

  • 避免使用 SELECT *,明確指定需要的列。
  • 使用 EXPLAIN 分析查詢計劃,確保查詢使用了索引。
  • 在連接條件中使用等值比較(=),避免使用復(fù)雜表達(dá)式。

到此這篇關(guān)于MySQL 多表連接(INNER JOIN、LEFT JOIN、RIGHT JOIN、FULL OUTER JOIN)的文章就介紹到這了,更多相關(guān)MySQL 多表連接內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Mysql修改datadir導(dǎo)致無法啟動問題解決方法

    Mysql修改datadir導(dǎo)致無法啟動問題解決方法

    這篇文章主要介紹了Mysql修改datadir導(dǎo)致無法啟動問題解決方法,本文原因是SELINUX導(dǎo)致,用關(guān)閉SELINUX的方法解決了這個問題,需要的朋友可以參考下
    2015-02-02
  • 解決Mysql 8.0.17 winx64版本安裝過程中遇到的問題

    解決Mysql 8.0.17 winx64版本安裝過程中遇到的問題

    這篇文章主要介紹了Mysql 8.0.17 winx64版本安裝過程中遇到的問題 ,非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-08-08
  • mysql自增navicat_navicat如何設(shè)置主鍵自增

    mysql自增navicat_navicat如何設(shè)置主鍵自增

    通過Navicat設(shè)置MySQL表的主鍵自增,步驟包括:打開Navicat連接數(shù)據(jù)庫,選擇表并設(shè)計,右擊id字段設(shè)置為主鍵,然后勾選自動遞增功能,這樣每次插入新記錄時,id字段都會自動遞增
    2025-01-01
  • Mysql 實現(xiàn)字段拼接的三個函數(shù)

    Mysql 實現(xiàn)字段拼接的三個函數(shù)

    這篇文章主要介紹了Mysql 實現(xiàn)字段拼接的三個函數(shù),幫助大家更好的理解和使用MySQL 數(shù)據(jù)庫,感興趣的朋友可以了解下
    2020-11-11
  • MySQL中FOR UPDATE的具體用法

    MySQL中FOR UPDATE的具體用法

    本文主要介紹了MySQL中FOR UPDATE的具體用法,它在事務(wù)中起到了鎖定數(shù)據(jù)行的關(guān)鍵作用,確保了數(shù)據(jù)的一致性和可靠性,下面就來具體的介紹一下應(yīng)用場景等,感興趣的可以了解一下
    2024-02-02
  • centos 6下安裝innodb_ruby

    centos 6下安裝innodb_ruby

    innodb_ruby 是使用 Ruby 編寫的 InnoDB 文件格式解析器。innodb_ruby 的目的是暴露一些其他隱藏的 InnoDB 原理。這些代碼并不適合生產(chǎn)環(huán)境使用。
    2017-01-01
  • mysql charset=utf8你真的弄明白意思了嗎

    mysql charset=utf8你真的弄明白意思了嗎

    這篇文章主要介紹了mysql charset=utf8你真的弄明白意思了嗎?文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-01-01
  • MySQL 4種導(dǎo)入數(shù)據(jù)的方法

    MySQL 4種導(dǎo)入數(shù)據(jù)的方法

    這篇文章主要介紹了MySQL 導(dǎo)入 導(dǎo)出數(shù)據(jù)的方法,文中講解非常詳細(xì),代碼幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下
    2020-07-07
  • DOS命令行窗口mysql中文顯示亂碼問題解決方法

    DOS命令行窗口mysql中文顯示亂碼問題解決方法

    MySQL的默認(rèn)編碼是Latin1,不支持中文,如何修改MySQL的默認(rèn)編碼呢,下面為大家詳細(xì)介紹下
    2014-05-05
  • 詳解mysql中的靜態(tài)變量的作用

    詳解mysql中的靜態(tài)變量的作用

    這篇文章主要介紹了詳解mysql中的靜態(tài)變量的作用的相關(guān)資料,希望通過本大家能理解掌握MySQL 靜態(tài)變量的用法,需要的朋友可以參考下
    2017-09-09

最新評論