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.