偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

MySQL的三條JOIN子句使用指南

譯文
數(shù)據(jù)庫 MySQL
我們在進行單個SQL查詢時,JOIN語句往往被用于從共享著公共字段的多張表中,連接并獲取數(shù)據(jù)。本文將以示例的形式,向您展示如何在MySQL中,使用INNER JOIN、OUTER JOIN和 CROSS JOIN。

[[425332]]

【51CTO.com快譯】眾所周知,關系型數(shù)據(jù)庫中的每張表都包含了唯一或通用的數(shù)據(jù),而且各個表之間都存在著邏輯上的聯(lián)系。例如,相同的列名和數(shù)據(jù)類型,通常會被保存在作為公共值鏈接的表中。因此,我們在進行單個SQL查詢時,JOIN語句往往被用于從共享著公共字段的多張表中,連接并獲取數(shù)據(jù)。特別是在MySQL中,JOIN被用于聚合那些來自多張表的數(shù)據(jù),并將它們整合為單個輸出結果。而且,我們可以在SELECT、UPDATE和DELETE命令中,使用到JOIN。

JOIN入門

MySQL的JOIN類型能夠指明在查詢中,兩個表是如何鏈接的。其中INNER JOIN、OUTER JOIN和CROSS JOIN都是被MySQL支持的三種JOIN子句。而LEFT JOIN和RIGHT JOIN則是兩種不同類型的OUTER JOIN。為了更加直觀地展示該如何使用JOIN,我們首先需要通過如下方式,創(chuàng)建一個新結構模式(schema),以便為后續(xù)的操作提供數(shù)據(jù)示例。

MySQL

  1. CREATE TABLE Users ( 
  2.     UserID INT
  3.     UserName VARCHAR(255), 
  4.     Password VARCHAR(255), 
  5.     isActive BOOLEAN 
  6. ); 
  7.   
  8. CREATE TABLE Userprofile ( 
  9.     ProfileID INT
  10.     LastName VARCHAR(255), 
  11.     FirstName VARCHAR(255), 
  12.     Email VARCHAR(255), 
  13.     Phone VARCHAR(255) 
  14. ); 

接下來,我們要做的便是向其中插入一些數(shù)據(jù)。如下面語句所示,您可以根據(jù)自己的偏好,在表中插入任意數(shù)量的用戶。

MySQL

  1. INSERT INTO Users 
  2.     (UserID, UserName,Password, isActive) 
  3. VALUES 
  4.     (1,'krofax','krofax1234'TRUE); 
  5.   
  6. INSERT INTO userprofile 
  7.     (profileid, lastname, firstname, email, phone) 
  8. VALUES 
  9.     (1,'Ada''George''adageorge@gmail.com','1290003456'); 

MySQL INNER JOIN子句

我們可以使用INNER JOIN去檢索各種常見的匹配性記錄。例如,INNER JOIN子句可以通過檢索表A和表B中的記錄,為需要滿足某種連接要求而篩選記錄。這也是最常用的JOIN類型。下面的維恩圖可以協(xié)助您更好地理解INNER JOIN。

以下是基于MySQL語法的INNER JOIN:

  1. SELECT  
  2.     COLUMNS 
  3. FROM  
  4.     tableA  
  5. INNER JOINtableB 
  6.     ON tableA.column = tableB.column

MySQL外部連接

與INNER JOIN相比,OUTER JOIN會生成不匹配(non-matching)的記錄,以及匹配的數(shù)據(jù)行。也就是說,如果連接表中的數(shù)據(jù)行并不匹配的話,則會顯示NULL值。如前所述,MySQL有兩種不同形式的OUTER JOIN,它們分別是:MySQL LEFT JOIN和MySQL RIGHT JOIN。下面,讓我們來詳細地了解它們之間的區(qū)別。

MySQL LEFT JOIN子句

LEFT JOIN允許您從表A和表B中,獲取滿足連接條件的所有條目。而且,對于表A中不符合條件的記錄,將顯示為NULL值。下面的維恩圖可以協(xié)助您更好地理解LEFT JOIN。

以下是基于MySQL語法的LEFT JOIN子句:

MySQL

  1. COLUMNS 
  2.   
  3. tableA 
  4. JOINtableB 
  5. ON tableA.column = tableB.column

如上圖所示:LEFT JOIN關鍵字會返回那些匹配Customers表,而在Orders表中沒有匹配項的所有記錄。

MySQL RIGHT JOIN子句

而RIGHT JOIN則允許用戶獲取表B中的所有條目,以及滿足連接條件在表A中的條目。也就是說,表B中不符合條件的記錄會被顯示為NULL值。下面的維恩圖可以協(xié)助您更好地理解RIGHT JOIN。

以下是基于MySQL語法的RIGHT JOIN子句:

MySQL

  1. SELECT  
  2.     COLUMNS 
  3. FROM  
  4.     tableA 
  5. RIGHTJOINtableB 
  6.     ON tableA.column = tableB.column

如上圖所示:該RIGHT JOIN關鍵字返回那些匹配Employees表,而在Orders表中沒有匹配項的所有記錄。

MySQL CROSS JOIN子句

MySQL CROSS JOIN通常被稱為笛卡爾連接(cartesian join)。它返回每個表中所有可能性數(shù)據(jù)行的組合。也就是說,如果不提供額外的條件,那么可將表A的每一行與表B中的所有行相乘,以得到結果集。下面的維恩圖可以協(xié)助您更好地理解CROSS JOIN。

那么我們什么時候會需要用到這種JOIN呢?假設您接到一個任務:查找某個產(chǎn)品和顏色的所有可能性組合。那么CROSS JOIN在此時就能夠派上用場了。不過,值得注意的是,CROSS JOIN可能會產(chǎn)生相當大的結果集!

以下是基于MySQL語法的CROSS JOIN子句:

MySQL

  1. SELECT  
  2.     COLUMNS 
  3. FROM  
  4.     tableA 
  5. CROSSJOINtableB; 

JOIN的技巧

總的說來,在MySQL中,JOIN能夠方便您執(zhí)行單個JOIN查詢,而省去了許多個簡單的查詢。因此,它能夠帶來更快的速度、更低的服務器開銷、以及更少的MySQL與應用之間的數(shù)據(jù)傳輸。與SQL Server不同,MySQL雖然沒有用于FULL OUTER JOIN的獨特JOIN類型,但是您可以通過LEFT OUTER JOIN和RIGHT OUTER JOIN(請參照如下語句)的組合,以獲得與FULL OUTER JOIN相同的輸出效果。

MySQL

  1. SELECT  
  2.     *  
  3. FROM  
  4.     tableA 
  5. LEFTJOINtableB  
  6.     ON tableA.id = tableB.id 
  7. UNION 
  8. SELECT  
  9.     *  
  10. FROM  
  11.     tableA 
  12. RIGHTJOINtableB  
  13.     ON tableA.id = tableB.id 

此外,使用MySQL JOIN,您還可以順利地連接上述兩張表。

MySQL

  1. SELECT  
  2.     * 
  3. FROM  
  4.     tableA 
  5. LEFTJOINtableB 
  6.     ON tableA.id = tableB.id 
  7. LEFTJOINtableC 
  8.     ON tableC.id = tableA.id; 

JOINS的實用性

  • 更快的速度。在單個查詢中,JOINS允許您從兩個或多個鏈接的數(shù)據(jù)庫表中,獲取數(shù)據(jù)。顯然,這比通過逐個運行查詢,以獲得相同的結果,要更加節(jié)省時間。
  • MySQL的效率更高。由于連接是通過索引來執(zhí)行的,因此JOINS會讓MySQL具有更好的性能。
  • 降低了服務器的負載。畢竟JOINS的單次查詢執(zhí)行,能夠讓服務器更快地輸出結果。

為了能夠在日常工作中靈活地使用JOIN,不少分析師或數(shù)據(jù)庫管理員(DBA)都會選用Arctype for MySQL之類的工具,去生成復雜、完整的JOIN子句,以避免去記憶那些數(shù)百條條列名或別名。此外,此類自動化工具還能夠通過豐富的功能,協(xié)助用戶創(chuàng)建復雜的查詢,并能夠輕松地管理JOIN的各項條件。

原文標題:A Guide to MySQL JOINs,作者:Blessing Krofegha

【51CTO譯稿,合作站點轉載請注明原文譯者和出處為51CTO.com】

責任編輯:華軒 來源: 51CTO
相關推薦

2012-10-22 10:04:11

AMD微型服務器嵌入式

2009-04-17 16:20:26

職場迷茫期對策

2023-10-25 14:51:38

MySQL數(shù)據(jù)庫JSON

2022-09-29 09:07:08

DataGrip數(shù)據(jù)倉庫數(shù)據(jù)庫

2009-06-10 10:33:33

華為離職員工定律

2018-07-27 15:20:50

企業(yè)新興技術

2019-12-04 11:16:23

區(qū)塊鏈數(shù)字貨幣

2024-01-16 08:00:00

人工智能基本模型

2021-08-25 14:58:47

MacOSGreenplumDocker

2021-02-05 10:32:46

Kubernetes容器開發(fā)

2012-12-26 12:41:14

Android開發(fā)WebView

2023-11-13 14:43:47

API接口

2021-07-27 10:09:27

鴻蒙HarmonyOS應用

2011-07-21 14:57:34

jQuery Mobi

2010-09-06 14:24:28

ppp authent

2009-12-28 17:40:10

WPF TextBox

2017-12-08 20:32:39

2023-06-06 07:17:44

云變化管理策略

2014-11-27 10:49:50

AWS re:Inve亞馬遜EC2亞馬遜

2025-07-02 09:00:24

ES運維JSON
點贊
收藏

51CTO技術棧公眾號