轉帖|使用教程|編輯:鮑佳佳|2021-04-15 11:25:48.873|閱讀 120 次
概述:本文介紹了有關MySQL JOIN的詳細教程。在其中,您將了解MySQL支持的不同類型的JOINS,它們的語法以及如何使用它們。
# 界面/圖表報表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
相關鏈接:
dbForge Studio for MySQL是一個在Windows平臺被廣泛使用的MySQL客戶端,它能夠使MySQL開發人員和管理人員在一個方便的環境中與他人一起完成創建和執行查詢,開發和調試MySQL程序,自動化管理MySQL數據庫對象等工作。
本文介紹了有關MySQL JOIN的詳細教程。在其中,您將了解MySQL支持的不同類型的JOINS,它們的語法以及如何使用它們。
MySQL JOIN簡介MySQL中
不同類型的JOIN
1. MySQL INNER JOIN子句
2. MySQL OUTER JOINs
2.1 MySQL LEFT JOIN子句
2.2 MySQL RIGHT JOIN子句
3. MySQL CROSS JOIN子句
MySQL JOINs準則
結論
MySQL JOIN簡介
MySQL數據庫通常存儲大量數據。為了有效地分析數據,分析師和DBA一直需要根據特定條件從兩個或多個表中提取記錄。這就是JOIN助力的地方。
JOINS用于在單個查詢中從多個表中檢索數據。為了使JOIN起作用,這些表需要使用一個公共鍵值相互關聯。
JOIN子句在SELECT,UPDATE和DELETE語句中使用。
MySQL中不同類型的JOIN
MySQL JOIN類型定義查詢中兩個表的關聯方式。MySQL支持以下類型的JOIN子句:INNER JOIN,OUTER JOIN和CROSS JOIN。外連接可以進一步分為 左連接和 右連接。
為了更好地演示JOIN的工作原理,我們將創建兩個表。
CREATE TABLE `users` ( `auid` int(10) UNSIGNED NOT NULL, `username` varchar(100) NOT NULL, `password` varchar(150) NOT NULL, `createdate` datetime NOT NULL, `isActive` tinyint(1) NOT NULL ); CREATE TABLE `userprofile` ( `apid` int(10) UNSIGNED NOT NULL, `auid` int(10) UNSIGNED NOT NULL, `firstname` varchar(50) NOT NULL, `lastname` varchar(50) NOT NULL, `email` varchar(100) NOT NULL, `phone` varchar(45) NOT NULL );
并用數據填充它們。
Insert into users (auid, username,password, createdate, isActive) values (1,'admin','pswrd123', curdate(), 1); Insert into userprofile (apid, auid, firstname, lastname, email, phone) values (1,1,'Jack', 'Wolf', 'bettestroom@gmail.com','600075764216'); Insert into users (auid,username,password, createdate, isActive) values (2, 'admin1','pass506', curdate(), 1); Insert into userprofile (apid, auid, firstname, lastname, email, phone) values (2, 3, 'Tom', 'Collins', 'tnkc@outlook.com','878511311054'); Insert into users (auid, username,password, createdate, isActive) values (4,'fox12','45@jgo0', curdate(), 1); Insert into userprofile (apid, auid, firstname, lastname, email, phone) values (4,5,'Bill', 'Fonskin', 'bill_1290@gmail.com','450985764216'); Insert into users (auid,username,password, createdate, isActive) values (6, 'lexus1267','98hnfRT6', curdate(), 1); Insert into userprofile (apid, auid, firstname, lastname, email, phone) values (7, 7, 'Ivan', 'Levchenko', 'ivan_new@outlook.com','878511311054');
1. MySQL INNER JOIN子句
INNER JOIN用于僅獲取常見的匹配記錄。INNER JOIN子句僅允許檢索表A和表B中滿足聯接條件的那些記錄。這是使用最廣泛的JOIN類型。
為了更好地了解INNER JOIN,請看下面的維恩圖。
這是MySQL INNER JOIN的語法:
SELECT columns FROM tableA INNER JOIN tableB ON tableA.column = tableB.column;
2. MySQL外連接
與INNER JOINs相反,OUTER JOINs不僅返回匹配的行,而且還返回不匹配的行。如果聯接表中存在不匹配的行,則將為它們顯示NULL值。
MySQL中有以下兩種類型的OUTER JOIN:MySQL LEFT JOIN和MySQL RIGHT JOIN。讓我們仔細看看它們中的每一個。
2.1 MySQL LEFT JOIN子句
LEFT JOIN允許檢索表A中的所有記錄以及滿足連接條件的表B中的那些記錄。對于表A中與條件不匹配的記錄,將顯示NULL值。
為了更好地了解LEFT JOIN,請研究下面的維恩圖。
這是MySQL LEFT JOIN的語法:
SELECT columns FROM tableA LEFT [OUTER] JOIN tableB ON tableA.column = tableB.column;
2.2 MySQL RIGHT JOIN子句
因此,RIGHT JOINs允許檢索表B中的所有記錄以及滿足連接條件的表A中的那些記錄。對于表B中與條件不匹配的記錄,將顯示NULL值。
下面是維恩圖,可讓您更深入地了解RIGHT JOIN。
這是MySQL RIGHT JOIN的語法:
SELECT columns FROM tableA RIGHT [OUTER] JOIN tableB ON tableA.column = tableB.column;
3. MySQL CROSS JOIN子句
MySQL CROSS JOIN,也稱為笛卡爾聯接,從每個表中檢索所有行組合。在這種類型的JOIN中,如果未引入其他條件,則通過將表A的每一行與表B中的所有行相乘來返回結果集。
為了更好地理解CROSS JOIN,請研究下面的維恩圖。
什么時候需要這種JOIN?設想您必須找到產品和顏色的所有組合。在這種情況下,CROSS JOIN將是非常有利的。
這是MySQL CROSS JOIN的語法:
SELECT columns FROM tableA CROSS JOIN tableB;
MySQL JOINs準則
MySQL中的JOIN允許您使用單個JOIN查詢,而不是運行多個簡單查詢。因此,您可以獲得更好的性能,減少服務器開銷,并減少MySQL和您的應用程序之間的數據傳輸數量。
與SQL Server不同,MySQL不支持FULL OUTER JOIN作為單獨的JOIN類型。但是,要獲得與FULL OUTER JOIN相同的結果,可以組合LEFT OUTER JOIN和RIGHT OUTER JOIN。
SELECT * FROM tableA LEFT JOIN tableB ON tableA.id = tableB.id UNION SELECT * FROM tableA RIGHT JOIN tableB ON tableA.id = tableB.id
使用MySQL JOIN,您還可以聯接兩個以上的表。
SELECT * FROM tableA LEFT JOIN tableB ON tableA.id = tableB.id LEFT JOIN tableC ON tableC.id = tableA.id;
結論
對于任何分析師和DBA來說,全面了解JOIN并在日常工作中自由使用它們至關重要。這就是dbForge Studio for MySQL必不可少的地方。即使對于復雜的JOIN子句,它的高級代碼完成也可以完美地工作。您不需要記住數百個列名或別名,dbForge Studio for MySQL將提示您完整的JOIN子句。其功能豐富的功能極大地簡化了和管理JOIN條件的過程。
本站文章除注明轉載外,均為本站原創或翻譯。歡迎任何形式的轉載,但請務必注明出處、不得修改原文相關鏈接,如果存在內容上的異議請郵件反饋至chenjj@fc6vip.cn
文章轉載自: