SQL学习笔记(05)_JOIN的类型与用法
一望可相見,一步如重城。所愛隔山海,山海不可平。
所思隔云端,奈何凡肉身。愚公不復見,精衛長泣鳴。
天神猶降憐,誰可恨終生。海有舟可渡,山有路可行。
此愛翻山海,山海俱可平。可平心中念,念去無自唏。
《山木詩詞全集》
原創作者:是飄飄呀!
博客地址:https://blog.csdn.net/weixin_44216392
INNER JOIN 關鍵字
INNER JOIN 關鍵字在表中存在至少一個匹配時返回行。
INNER JOIN 語法
SELECT column_name(s) FROM table1 INNER JOIN table2 ON table1.column_name=table2.column_name;或者 SELECT column_name(s) FROM table1 JOIN table2 ON table1.column_name=table2.column_name;INNER JOIN 與 JOIN 是相同的。內連接 INNER JOIN示意圖
在這里我們沿用上一篇筆記的數據庫作為實例演示:
-- 選自 "Websites" 表的數據 +----+--------------+---------------------------+-------+---------+ | id | name | url | alexa | country | +----+--------------+---------------------------+-------+---------+ | 1 | Google | https://www.google.cm/ | 1 | USA | | 2 | 淘寶 | https://www.taobao.com/ | 13 | CN | | 3 | 菜鳥教程 | http://www.runoob.com/ | 4689 | CN | | 4 | 微博 | http://weibo.com/ | 20 | CN | | 5 | Facebook | https://www.facebook.com/ | 3 | USA | | 7 | stackoverflow | http://stackoverflow.com/ | 0 | IND | +----+---------------+---------------------------+-------+---------+ -- access" 網站訪問記錄表的數據 +-----+---------+-------+------------+ | aid | site_id | count | date | +-----+---------+-------+------------+ | 1 | 1 | 45 | 2016-05-10 | | 2 | 3 | 100 | 2016-05-13 | | 3 | 1 | 230 | 2016-05-14 | | 4 | 2 | 10 | 2016-05-14 | | 5 | 5 | 205 | 2016-05-14 | | 6 | 4 | 13 | 2016-05-15 | | 7 | 3 | 220 | 2016-05-15 | | 8 | 5 | 545 | 2016-05-16 | | 9 | 3 | 201 | 2016-05-17 | +-----+---------+-------+------------+- 查詢所有網站的訪問記錄
之前學過了別名,在這個地方我們就正好可以使用上,它也提高了SQL語句的簡潔性。我們看看結果:
注釋:INNER JOIN 關鍵字在表中存在至少一個匹配時返回行。如果 “websites” 表中的行在 “access” 中沒有匹配,則不會列出這些行。
LEFT JOIN 關鍵字
LEFT JOIN 關鍵字從左表(table1)返回所有的行,即使右表(table2)中沒有匹配。如果右表中沒有匹配,則結果為 NULL。
LEFT JOIN 語法
SELECT column_name(s) FROM table1 LEFT JOIN table2 ON table1.column_name=table2.column_name; -- 或者 SELECT column_name(s) FROM table1 LEFT OUTER JOIN table2 ON table1.column_name=table2.column_name;-- 注:在某些數據庫中,LEFT JOIN 稱為 LEFT OUTER JOIN(即左外連接)。左連接 LEFT JOIN示意圖
實例:我們依然查詢所有網站的訪問記錄;我使用的是MySQL數據庫,在這里實踐了一下LEFT OUTER JOIN和LEFT JOIN的具體例子;
LEFT JOIN 的查詢結果:
LEFT OUTER JOIN 的查詢結果:簡直一毛一樣啊有沒有~~嘿嘿
在查詢結果中我們也可以發現,即使右表沒有匹配的行也會顯示出來,并使用NULL 填充;
so,LEFT JOIN 關鍵字從左表(Websites)返回所有的行,即使右表(access_log)中沒有匹配。
RIGHT JOIN 關鍵字
RIGHT JOIN 關鍵字從右表(table2)返回所有的行,即使左表(table1)中沒有匹配。如果左表中沒有匹配,則結果為 NULL
RIGHT JOIN 語法
SELECT column_name(s) FROM table1 RIGHT JOIN table2 ON table1.column_name=table2.column_name;SELECT column_name(s) FROM table1 RIGHT OUTER JOIN table2 --與LEFT OUTER JOIN 同理 ON table1.column_name=table2.column_name; -- 于左連接就是左右的問題,有木有?右連接RIGHT JOIN 示意圖
實操!!!
操作前先先在 access 表添加一條數據在 websites 表沒有對應的數據;
INSERT INTO access(aid, site_id, count, date) VALUES (10, 6, 111, '2016-03-09');接下來進行右外連接的實際操作
-- 查詢所有網站的訪問記錄 select a.name,b.count, b.date from websites a LEFT JOIN access b on a.id=b.site_id --右連接,也叫右外連接select a.name,b.count, b.date from websites a LEFT OUTER JOIN access b on a.id=b.site_id查詢結果:RIGHT JOIN 關鍵字從右表返回所有的行,即使左表中沒有匹配,也會使用NULL進行填充。
傳統功夫,點到為止。
總結
以上是生活随笔為你收集整理的SQL学习笔记(05)_JOIN的类型与用法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 我国AI医疗及人工智能医疗公司现状+20
- 下一篇: Tornado笔记——用Tornado搭