SQL數據庫---INNER/LEFT/RIGHT JOIN的區別

演示數據庫
  • 表:Websites
    +----+--------------+---------------------------+-------+---------+
    | id | name | url | num | country |
    +----+--------------+---------------------------+-------+---------+
    | 1 | Google | https://www.google.cm/ | 1 | USA |
    | 2 | orange | https://www.orange.com/ | 13 | CN |
    | 3 | vivid | http://www.vivid.com/ | 4689 | CN |
    | 4 | 微信 | http://weixin.com/ | 20 | CN |
    | 5 | Facebook | https://www.facebook.com/ | 3 | USA |
    | 7 | douyin | http://douyin.com/ | 0 | IND |
    +----+---------------+---------------------------+-------+---------+
  • 表:work_log
    +-----+---------+-------+------------+
    | aid | site_id | count | date |
    +-----+---------+-------+------------+
    | 1 | 1 | 45 | 2020-05-10 |
    | 2 | 3 | 100 | 2020-05-13 |
    | 3 | 1 | 230 | 2020-05-14 |
    | 4 | 2 | 10 | 2020-05-14 |
    | 6 | 4 | 13 | 2020-05-15 |
    | 7 | 3 | 220 | 2020-05-15 |
    | 8 | 5 | 545 | 2020-05-16 |
    | 9 | 10 | 111 | 2020-05-18 |
    +-----+---------+-------+------------+
一、INNER JOIN
  • INNER JOIN 關鍵字在表中存在至少一個匹配時返回行。
    例如:
    SELECT Websites.name, work_log.count, work_log.date
    FROM Websites
    INNER JOIN work_log
    ON Websites.id=work_log.site_id
    ORDER BY work_log.count;

+-----+---------+-------+------------+
| name | count | date |
+-----+---------+-------+------------+
| orange | 10 | 2020-05-13 |
| 微信 | 13 | 2020-05-15 |
| Google | 45 | 2020-05-10 |
| vivid | 100 | 2020-05-13 |
| vivid | 220 | 2020-05-15 |
| Google | 230 | 2020-05-14 |
| Facebook | 545 | 2020-05-16 |
+-----+---------+-------+------------+

二、LEFT JOIN
  • LEFT JOIN 關鍵字從左表(table1)返回所有的行,即使右表(table2)中沒有匹配。如果右表中沒有匹配,則結果爲 NULL。
    例如:
    SELECT Websites.name, work_log.count, work_log.date
    FROM Websites
    LEFT JOIN work_log
    ON Websites.id=work_log.site_id
    ORDER BY work_log.count DESC;

+-----+---------+-------+------------+
| name | count | date |
+-----+---------+-------+------------+
| Facebook | 545 | 2020-05-16 |
| Google | 230 | 2020-05-14 |
| vivid | 220 | 2020-05-15 |
| vivid | 100 | 2020-05-13 |
| Google | 45 | 2020-05-10 |
| 微信 | 13 | 2020-05-15 |
| orange | 10 | 2020-05-13 |

| douyin | NULL | NULL | (右表沒有匹配記錄也會顯示)

+-----+---------+-------+------------+

三、RIGHT JOIN
  • RIGHT JOIN 關鍵字從右表(table2)返回所有的行,即使左表(table1)中沒有匹配。如果左表中沒有匹配,則結果爲 NULL。
    例如:
    SELECT websites.name, work_log.count, work_log.date
    FROM websites
    RIGHT JOIN work_log
    ON work_log.site_id=websites.id
    ORDER BY work_log.count DESC;

+-----+---------+-------+------------+
| name | count | date |
+-----+---------+-------+------------+
| Facebook | 545 | 2020-05-16 |
| Google | 230 | 2020-05-14 |
| vivid | 220 | 2020-05-15 |

| NULL | 111 | 2020-05-18 | (左表沒有匹配記錄也會顯示)

| vivid | 100 | 2020-05-13 |
| Google | 45 | 2020-05-10 |
| 微信 | 13 | 2020-05-15 |
| orange | 10 | 2020-05-13 |
+-----+---------+-------+------------+

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章