濮阳杆衣贸易有限公司

主頁 > 知識庫 > SQL之各種join小結(jié)詳細講解

SQL之各種join小結(jié)詳細講解

熱門標簽:高清地圖標注道路 外東北地圖標注 拉卡拉外呼系統(tǒng) 大眾點評星級酒店地圖標注 云南電商智能外呼系統(tǒng)價格 智能外呼系統(tǒng)復(fù)位 400電話可以辦理嗎 臨清電話機器人 話務(wù)外呼系統(tǒng)怎么樣

SQL Left Join, Right Join, Inner Join, and Natural Join 各種Join小結(jié)

在SQL語言中,存在著各種Join,有Left Join, Right Join, Inner Join, and Natural Join等,對于初學者來說肯定一頭霧水,都是神馬跟神馬啊,它們之間到底有著怎樣的區(qū)別和聯(lián)系呢,我們先用一張圖片來說明:

上面這張圖很好的闡釋了Left Join, Right Join, Inner Join,和Full Outer Join的區(qū)別,下面用我們用一個簡單的例子來幫助我們理解和區(qū)分,現(xiàn)在有兩個表Person和Address:

-- Table Person
+----------+-----------+----------+
| PersonId | FirstName | LastName |
+----------+-----------+----------+
|        1 | Zhang     | San      |
|        2 | Li        | Si       |
|        3 | Wang      | Wu       |
|        4 | Yang      | Liu      |
+----------+-----------+----------+


-- Table Address
+-----------+----------+---------------+-------+
| AddressId | PersonId | City          | State |
+-----------+----------+---------------+-------+
|         1 |        2 | San Francisco | CA    |
|         2 |        3 | Los Angeles   | CA    |
|         3 |        1 | San Diego     | CA    |
+-----------+----------+---------------+-------+

我們下面一個一個的來看:

Left Join: returns all rows from the left table (table1), with the matching rows in the right table (table2). The result is NULL in the right side when there is no match.

左交:返回左表的所有行和匹配的右表的行,如果沒有匹配上的用NULL.

SELECT * FROM Person LEFT JOIN Address ON Person.PersonId = Address.PersonId; 
+----------+-----------+----------+-----------+----------+---------------+-------+
| PersonId | FirstName | LastName | AddressId | PersonId | City   | State |
+----------+-----------+----------+-----------+----------+---------------+-------+
|        2 | Li        | Si       |         1 |        2 | San Francisco | CA    |
|        3 | Wang      | Wu       |         2 |        3 | Los Angeles   | CA    |
|        1 | Zhang     | San      |         3 |        1 | San Diego     | CA    |
|        4 | Yang      | Liu      |      NULL |     NULL | NULL          | NULL  |
+----------+-----------+----------+-----------+----------+---------------+-------+

Right Join: returns all rows from the right table (table2), with the matching rows in the left table (table1). The result is NULL in the left side when there is no match.

右交:返回右表的所有行和匹配的左表的行,如果沒有匹配上的用NULL.

SELECT * FROM Person RIGHT JOIN Address ON Person.PersonId = Address.PersonId; 
+----------+-----------+----------+-----------+----------+---------------+-------+
| PersonId | FirstName | LastName | AddressId | PersonId | City          | State |
+----------+-----------+----------+-----------+----------+---------------+-------+
|        1 | Zhang     | San      |         3 |        1 | San Diego     | CA    |
|        2 | Li        | Si       |         1 |        2 | San Francisco | CA    |
|        3 | Wang      | Wu       |         2 |        3 | Los Angeles   | CA    |
|     NULL | NULL      | NULL     |         4 |        5 | Memphis       | TN    |
+----------+-----------+----------+-----------+----------+---------------+-------+

Inner Join: selects all rows from both tables as long as there is a match between the columns in both tables.

內(nèi)交: 選擇左右表中關(guān)鍵字匹配上的行。

SELECT * FROM Person INNER JOIN Address ON Person.PersonId = Address.PersonId;  +----------+-----------+----------+-----------+----------+---------------+-------+
| PersonId | FirstName | LastName | AddressId | PersonId | City          | State |
+----------+-----------+----------+-----------+----------+---------------+-------+
|        1 | Zhang     | San      |         3 |        1 | San Diego     | CA    |
|        2 | Li        | Si       |         1 |        2 | San Francisco | CA    |
|        3 | Wang      | Wu       |         2 |        3 | Los Angeles   | CA    |
+----------+-----------+----------+-----------+----------+---------------+-------+

Full Join: returns all rows from the left table (table1) and from the right table (table2), and it combines the result of both LEFT and RIGHT joins.

全交: 返回左表的所有行和右表的所有行,是左交和右交的聯(lián)合。

注意,由于MySql中沒有Full Join命令,所以我們通過把Left Join和Right Join的結(jié)果Union起來也是可以的:

SELECT * FROM Person LEFT JOIN Address ON Person.PersonId = Address.PersonId UNION
SELECT * FROM Person RIGHT JOIN Address ON Person.PersonId = Address.PersonId;  +----------+-----------+----------+-----------+----------+---------------+-------+
| PersonId | FirstName | LastName | AddressId | PersonId | City          | State |
+----------+-----------+----------+-----------+----------+---------------+-------+
|        2 | Li        | Si       |         1 |        2 | San Francisco | CA    |
|        3 | Wang      | Wu       |         2 |        3 | Los Angeles   | CA    |
|        1 | Zhang     | San      |         3 |        1 | San Diego     | CA    |
|        4 | Yang      | Liu      |      NULL |     NULL | NULL          | NULL  |
|     NULL | NULL      | NULL     |         4 |        5 | Memphis       | TN    |
+----------+-----------+----------+-----------+----------+---------------+-------+

Natural Join: creates an implicit join clause for you based on the common columns in the two tables being joined. Common columns are columns that have the same name in both tables. A NATURAL JOIN can be an INNER join, a LEFT OUTER join, or a RIGHT OUTER join. The default is INNER join.

自然交: 根據(jù)左右兩表的相同列創(chuàng)建一個隱含的join操作,相同列就是兩表中列名相同的兩列。自然交可以是內(nèi)交,左交或者是右交。默認是內(nèi)交。

SELECT * FROM Person NATURAL JOIN Address; 

+----------+-----------+----------+-----------+---------------+-------+
| PersonId | FirstName | LastName | AddressId | City          | State |
+----------+-----------+----------+-----------+---------------+-------+
|        1 | Zhang    | San      |         3 | San Diego     | CA    |
|        2 | Li        | Si       |         1 | San Francisco | CA    |
|        3 | Wang      | Wu       |         2 | Los Angeles   | CA    |
+----------+-----------+----------+-----------+---------------+-------+

最后注意一下,下面等號左右兩邊的關(guān)鍵字是等價的:

A LEFT JOIN B      =       A LEFT OUTER JOIN B
A RIGHT JOIN B     =       A RIGHT OUTER JOIN B
A FULL JOIN B      =       A FULL OUTER JOIN B
A INNER JOIN B     =       A JOIN B

到此這篇關(guān)于SQL之各種join小結(jié)詳細講解的文章就介紹到這了,更多相關(guān)SQL之各種join小結(jié)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

您可能感興趣的文章:
  • 淺談mysql join底層原理
  • SQL語句中JOIN的用法場景分析
  • MYSQL數(shù)據(jù)庫基礎(chǔ)之Join操作原理
  • 解決Mysql的left join無效及使用的注意事項說明
  • mysql left join快速轉(zhuǎn)inner join的過程
  • 為什么代碼規(guī)范要求SQL語句不要過多的join
  • mysql高效查詢left join和group by(加索引)
  • MySQL的join buffer原理

標簽:定西 無錫 揚州 三明 阿里 溫州 山西 福州

巨人網(wǎng)絡(luò)通訊聲明:本文標題《SQL之各種join小結(jié)詳細講解》,本文關(guān)鍵詞  SQL,之,各種,join,小結(jié),詳細,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《SQL之各種join小結(jié)詳細講解》相關(guān)的同類信息!
  • 本頁收集關(guān)于SQL之各種join小結(jié)詳細講解的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    商河县| 金秀| 南部县| 贡觉县| 高州市| 洪雅县| 平阴县| 中宁县| 公安县| 黄浦区| 古浪县| 宜都市| 望都县| 八宿县| 虞城县| 色达县| 和龙市| 新建县| 鹤庆县| 高陵县| 阿克| 凤翔县| 新源县| 西乡县| 清水县| 丰都县| 舞钢市| 磐石市| 武邑县| 麦盖提县| 克拉玛依市| 绩溪县| 香港 | 化隆| 红桥区| 保德县| 汕头市| 维西| 海门市| 湘潭市| 横山县|