校园春色亚洲色图_亚洲视频分类_中文字幕精品一区二区精品_麻豆一区区三区四区产品精品蜜桃

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

SQL之各種join小結詳細講解

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

SQL Left Join, Right Join, Inner Join, and Natural Join 各種Join小結

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

上面這張圖很好的闡釋了Left Join, Right Join, Inner Join,和Full Outer Join的區別,下面用我們用一個簡單的例子來幫助我們理解和區分,現在有兩個表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.

內交: 選擇左右表中關鍵字匹配上的行。

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.

全交: 返回左表的所有行和右表的所有行,是左交和右交的聯合。

注意,由于MySql中沒有Full Join命令,所以我們通過把Left Join和Right Join的結果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.

自然交: 根據左右兩表的相同列創建一個隱含的join操作,相同列就是兩表中列名相同的兩列。自然交可以是內交,左交或者是右交。默認是內交。

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    |
+----------+-----------+----------+-----------+---------------+-------+

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

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

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

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

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

巨人網絡通訊聲明:本文標題《SQL之各種join小結詳細講解》,本文關鍵詞  SQL,之,各種,join,小結,詳細,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《SQL之各種join小結詳細講解》相關的同類信息!
  • 本頁收集關于SQL之各種join小結詳細講解的相關信息資訊供網民參考!
  • 推薦文章
    主站蜘蛛池模板: 六枝特区| 营山县| 宁城县| 汕尾市| 荆门市| 扬中市| 临湘市| 乌鲁木齐市| 岳西县| 镇安县| 原平市| 绥德县| 阳高县| 德清县| 济宁市| 镇安县| 永州市| 五华县| 寿阳县| 温宿县| 上高县| 延寿县| 安塞县| 吉隆县| 连云港市| 肃宁县| 临夏市| 卢氏县| 嘉峪关市| 泉州市| 南投市| 海安县| 内乡县| 北票市| 清流县| 江达县| 双峰县| 锡林浩特市| 科技| 六枝特区| 贵溪市|