Sql之表的連接總結(jié)

1、交叉連接(就是將兩張表的數(shù)據(jù) 交叉組合在一起)
有兩張表 客戶表:[Sales.Customers] 和訂單表:[Sales.Orders]。
業(yè)務(wù)需求:實(shí)現(xiàn) Customer中custid(客戶Id) 和 Orders表中的 Orderid的 交叉連接

select 
c.custid,o.orderid
from [Sales.Customers] as c cross join [Sales.Orders] as o

實(shí)現(xiàn)效果:


2、內(nèi)連接(使用最多的):inner join
業(yè)務(wù)要求:查詢出:Order對(duì)應(yīng)的 Customer中的所有客戶的所有訂單

select c.custid,o.orderid
from [Sales.Customers] as c inner join [Sales.Orders] as o
on c.custid=o.custid

注意:所有的查詢結(jié)果都是全部符合 on 后面的 條件,這是和 outer join 正好相反的

3、外連接 (outer join)
和內(nèi)連接最顯著的 不同:就是將不滿足條件的數(shù)據(jù)頁(yè)查詢出來(lái)了
注意一點(diǎn):外連接是要分左外連接和右外連接的,左外連接意思就是outer join左邊的表含有超出 on條件的內(nèi)容

select
c.custid,o.orderid
from [Sales.Customers] as c left outer join [Sales.Orders] as o
n c.custid= o.custid

查看查詢結(jié)果可以看出:



含有兩個(gè) orderid 為NULL的結(jié)果,就是多出來(lái)的 查詢結(jié)果

通過(guò)上面的使用右外連接的使用方法 只不過(guò)要將上面的兩張表的順序 變一下

3、對(duì)外連接使用的實(shí)例,并對(duì)組函數(shù)里面NULL值的處理講解
注意:對(duì)于組函數(shù)(例如:sum()、max()等),對(duì)于Null值是不做處理的,不算在內(nèi)的

select
c.custid,o.orderid,
count(o.orderid) over (partition by c.custid)
from [Sales.Customers] as c left outer join [Sales.Orders] as o
on c.custid= o.custid

查看結(jié)果:



我們可以看到,最后兩項(xiàng)求和的值為0.這是因?yàn)榍蠛褪歉鶕?jù) orderid進(jìn)行分組的(這里關(guān)于分組是通過(guò)開(kāi)窗函數(shù)over,后面我會(huì)講解的),組函數(shù)COUNT()對(duì)NULL是不做處理的,所以為0.

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容