SQL学习笔记(05)_JOIN的类型与用法
一望可相見,一步如重城。所愛隔山海,山海不可平。
所思隔云端,奈何凡肉身。愚公不復(fù)見,精衛(wèi)長(zhǎng)泣鳴。
天神猶降憐,誰(shuí)可恨終生。海有舟可渡,山有路可行。
此愛翻山海,山海俱可平。可平心中念,念去無(wú)自唏。
《山木詩(shī)詞全集》
原創(chuàng)作者:是飄飄呀!
博客地址:https://blog.csdn.net/weixin_44216392
INNER JOIN 關(guān)鍵字
INNER JOIN 關(guān)鍵字在表中存在至少一個(gè)匹配時(shí)返回行。
INNER JOIN 語(yǔ)法
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 是相同的。內(nèi)連接 INNER JOIN示意圖
在這里我們沿用上一篇筆記的數(shù)據(jù)庫(kù)作為實(shí)例演示:
-- 選自 "Websites" 表的數(shù)據(jù) +----+--------------+---------------------------+-------+---------+ | 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" 網(wǎng)站訪問記錄表的數(shù)據(jù) +-----+---------+-------+------------+ | 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 | +-----+---------+-------+------------+- 查詢所有網(wǎng)站的訪問記錄
之前學(xué)過(guò)了別名,在這個(gè)地方我們就正好可以使用上,它也提高了SQL語(yǔ)句的簡(jiǎn)潔性。我們看看結(jié)果:
注釋:INNER JOIN 關(guān)鍵字在表中存在至少一個(gè)匹配時(shí)返回行。如果 “websites” 表中的行在 “access” 中沒有匹配,則不會(huì)列出這些行。
LEFT JOIN 關(guān)鍵字
LEFT JOIN 關(guān)鍵字從左表(table1)返回所有的行,即使右表(table2)中沒有匹配。如果右表中沒有匹配,則結(jié)果為 NULL。
LEFT JOIN 語(yǔ)法
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;-- 注:在某些數(shù)據(jù)庫(kù)中,LEFT JOIN 稱為 LEFT OUTER JOIN(即左外連接)。左連接 LEFT JOIN示意圖
實(shí)例:我們依然查詢所有網(wǎng)站的訪問記錄;我使用的是MySQL數(shù)據(jù)庫(kù),在這里實(shí)踐了一下LEFT OUTER JOIN和LEFT JOIN的具體例子;
LEFT JOIN 的查詢結(jié)果:
LEFT OUTER JOIN 的查詢結(jié)果:簡(jiǎn)直一毛一樣啊有沒有~~嘿嘿
在查詢結(jié)果中我們也可以發(fā)現(xiàn),即使右表沒有匹配的行也會(huì)顯示出來(lái),并使用NULL 填充;
so,LEFT JOIN 關(guān)鍵字從左表(Websites)返回所有的行,即使右表(access_log)中沒有匹配。
RIGHT JOIN 關(guān)鍵字
RIGHT JOIN 關(guān)鍵字從右表(table2)返回所有的行,即使左表(table1)中沒有匹配。如果左表中沒有匹配,則結(jié)果為 NULL
RIGHT JOIN 語(yǔ)法
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 示意圖
實(shí)操!!!
操作前先先在 access 表添加一條數(shù)據(jù)在 websites 表沒有對(duì)應(yīng)的數(shù)據(jù);
INSERT INTO access(aid, site_id, count, date) VALUES (10, 6, 111, '2016-03-09');接下來(lái)進(jìn)行右外連接的實(shí)際操作
-- 查詢所有網(wǎng)站的訪問記錄 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查詢結(jié)果:RIGHT JOIN 關(guān)鍵字從右表返回所有的行,即使左表中沒有匹配,也會(huì)使用NULL進(jìn)行填充。
傳統(tǒng)功夫,點(diǎn)到為止。
總結(jié)
以上是生活随笔為你收集整理的SQL学习笔记(05)_JOIN的类型与用法的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 我国AI医疗及人工智能医疗公司现状+20
- 下一篇: SQL(07)_INSERT INTO