原文: RelaxHeart網(wǎng) - Tec博客: 庫Join查詢:內(nèi)聯(lián)、左外聯(lián)、右外聯(lián)、取交集
我們是自2013年起的成都網(wǎng)站建設(shè)公司,提供網(wǎng)站建設(shè),電商網(wǎng)站設(shè)計開發(fā),成都外貿(mào)網(wǎng)站制作,響應(yīng)式網(wǎng)頁設(shè)計,成都微信小程序、等服務(wù)。為客戶創(chuàng)造有價值的品牌營銷體驗(yàn),讓互聯(lián)網(wǎng)提升企業(yè)的競爭力!
示例:
在MySQL創(chuàng)建兩張表:a_table、b_table
隨便插入幾條數(shù)據(jù):
組合兩個表中的記錄,返回關(guān)聯(lián)字段相符的記錄,也就是兩個表的交集
left join 是left outer join的簡寫,它的全稱是左外連接,是外連接中的一種。
左表全部記錄都會顯示出來,右表只顯示出滿足條件的記錄,不足的列全部顯示NULL
right join 是 right outer join的簡寫,它的全程是右外連接,是外鏈接的一種。
右表全部記錄都會顯示出來,左表只顯示滿足條件的記錄,不足的列全部顯示NULL
有了內(nèi)聯(lián)、外聯(lián)查詢,有沒有取并集查詢呢?當(dāng)然也有了:
注意:查詢報錯了?。?!
左外查詢 union 右外查詢
UNION定義:UNION 操作符用于合并兩個或多個 SELECT 語句的結(jié)果集。
注意:
UNION 和 UNION ALL 區(qū)別:UNION ALL會列出所有結(jié)果,有重復(fù),UNION沒有重復(fù)
inner join: 如果查詢的表中都有至少一個匹配,則返回行
left join: 即使右表中沒有匹配,也從左表返回所有的行
right join: 即使左表中沒有匹配,也從右表返回所有的行
full join: 只要其中一個表中存在匹配,就返回行,但是在mysql中不支持
union:合并多個查詢語句的結(jié)果集(去重)
union all:合并多個查詢語句的結(jié)果集(不去重)
更多文章: RelaxHeart網(wǎng)更多博文
你是要查前十個查詢結(jié)果中相同的那些記錄,而不求前十個相同記錄吧,因?yàn)檫@是有差別的,按照你的語句,應(yīng)該是求前者,即先求出A的前十條數(shù)據(jù),B的前十條數(shù)據(jù),再求它們的交集。
既然是求交集,那么這兩個表的關(guān)系模式應(yīng)該是相同的了,
select
a.*
from
(select
*
from
table
order
by
table.a
desc
limit
10)
as
a,
(select
*
from
table
order
by
table.b
desc
limit
10)
as
b
where
a.primary_key
=
b.primary_key
--先將兩個結(jié)果作為兩張臨時表,然后通過主鍵
primary_key來獲取交集(交集肯定就是主鍵相等的了,因?yàn)殛P(guān)系模式相同)
學(xué)生student表:
課程course表:
交叉連接:
結(jié)果為兩張表的笛卡爾積:
內(nèi)連接(inner join ,inner 可以省略)
顯示內(nèi)連接和隱示內(nèi)連接獲得的查詢結(jié)果是一樣的,都是A表和B表的交集(例:A.id = B.id),但是只能查到有關(guān)系的信息,如果A表的一條數(shù)據(jù)的與B表關(guān)聯(lián)的字段沒有對應(yīng)的信息(如:A.id = null),即:這條數(shù)據(jù)在B表中沒有對應(yīng)的信息,則無法獲得。
外連接(outer join,outer可以省略)
左外連接獲得的查詢結(jié)果是左邊的表A的全部信息和A,B兩張表的交集,左邊A表的全部包含A表中在B表中沒有對應(yīng)關(guān)系的信息。
右外連接獲得的查詢結(jié)果是右邊的表B的全部信息和A,B兩張表的交集,右邊B表的全部包含B表中在A表中沒有對應(yīng)關(guān)系的信息。