成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

MySQL的三條JOIN子句使用指南

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

[[425332]]

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

JOIN入門

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

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. ); 

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

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類型。下面的維恩圖可以協助您更好地理解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)的記錄,以及匹配的數據行。也就是說,如果連接表中的數據行并不匹配的話,則會顯示NULL值。如前所述,MySQL有兩種不同形式的OUTER JOIN,它們分別是:MySQL LEFT JOIN和MySQL RIGHT JOIN。下面,讓我們來詳細地了解它們之間的區別。

MySQL LEFT JOIN子句

LEFT JOIN允許您從表A和表B中,獲取滿足連接條件的所有條目。而且,對于表A中不符合條件的記錄,將顯示為NULL值。下面的維恩圖可以協助您更好地理解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值。下面的維恩圖可以協助您更好地理解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)。它返回每個表中所有可能性數據行的組合。也就是說,如果不提供額外的條件,那么可將表A的每一行與表B中的所有行相乘,以得到結果集。下面的維恩圖可以協助您更好地理解CROSS JOIN。

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

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

MySQL

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

JOIN的技巧

總的說來,在MySQL中,JOIN能夠方便您執行單個JOIN查詢,而省去了許多個簡單的查詢。因此,它能夠帶來更快的速度、更低的服務器開銷、以及更少的MySQL與應用之間的數據傳輸。與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允許您從兩個或多個鏈接的數據庫表中,獲取數據。顯然,這比通過逐個運行查詢,以獲得相同的結果,要更加節省時間。
  • MySQL的效率更高。由于連接是通過索引來執行的,因此JOINS會讓MySQL具有更好的性能。
  • 降低了服務器的負載。畢竟JOINS的單次查詢執行,能夠讓服務器更快地輸出結果。

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

2022-09-29 09:07:08

DataGrip數據倉庫數據庫

2018-07-27 15:20:50

企業新興技術

2019-12-04 11:16:23

區塊鏈數字貨幣

2009-06-10 10:33:33

華為離職員工定律

2021-08-25 14:58:47

MacOSGreenplumDocker

2024-01-16 08:00:00

人工智能基本模型

2021-02-05 10:32:46

Kubernetes容器開發

2012-12-26 12:41:14

Android開發WebView

2023-11-13 14:43:47

API接口

2010-09-06 14:24:28

ppp authent

2011-07-21 14:57:34

jQuery Mobi

2021-07-27 10:09:27

鴻蒙HarmonyOS應用

2009-12-28 17:40:10

WPF TextBox

2017-12-08 20:32:39

2014-11-27 10:49:50

AWS re:Inve亞馬遜EC2亞馬遜

2023-06-06 07:17:44

云變化管理策略

2009-12-31 17:17:45

Silverlight
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 欧美亚洲日本 | 中国一级特黄真人毛片免费观看 | 在线观看亚洲精品视频 | 伊人超碰 | 欧美人成在线视频 | 国产精品一码二码三码在线 | 成人av一区二区三区 | 日韩一级电影免费观看 | 国产一区二区精品 | 91原创视频| 国产在线一区二区三区 | 欧美日本一区二区 | 日韩中文字幕免费在线 | 巨大黑人极品videos精品 | 伊人免费网 | 在线色网 | 欧美成人视屏 | 日日夜夜天天综合 | 亚洲精品无 | 久青草影院| 成人免费在线小视频 | 国产精品1区 | 特级生活片 | 精品视频免费 | 色婷婷在线视频 | 欧美一级黄色免费看 | 日韩毛片在线视频 | 日本网站免费在线观看 | 日韩欧美理论片 | 国产成人免费视频网站视频社区 | 日韩激情一区 | 日韩一区二区在线播放 | 国产高清在线视频 | 欧美精品久久久 | 国产999精品久久久影片官网 | 久久久www成人免费无遮挡大片 | 免费在线日韩 | 亚洲欧美一区二区在线观看 | 99精品视频一区二区三区 | 中文字幕在线一区二区三区 | 欧美一区二区三区在线观看视频 |