1. 程式人生 > >Sql的各種連接用法(cross join、inner join、full join)

Sql的各種連接用法(cross join、inner join、full join)

集合 xxx table int cross 同時 targe ont 右外連接

1.名詞解釋:

笛卡爾乘積:笛卡爾乘積是指在數學中,兩個集合X和Y的笛卡爾積,又稱直積,表示X x Y ,第一個對象是X的成員,而第二個對象 是Y的所有可能有序列的其中的一個成員。假設集合A={a,b},集合B={0,1, 2},則兩個笛卡爾積為{(a,0),(a,1),(a,2), (b,0),(b,1),(b,2)}

2.原址參考:http://ashui.net/archives/2013/552.html

1> 交叉連接CROSS JOIN

SELECT * FROM table1 CROSS JOIN table2

如果不帶WHERE條件子句,它將會返回被連接的兩個表的笛卡爾積,返回結果的行數等於兩個表行數的乘積;

select * from table1 a cross join table2 b where a.id=b.id (註:cross join後加條件只能用where,不能用on)

2>內連接INNER JOIN

SELECT * FROM table1 INNER JOIN table2

內連接如果沒有指定連接條件的話,和笛卡爾積的交叉連接結果一樣,但是不同於笛卡爾積的地方是,沒有笛卡爾積那麽復雜要先生 成行數乘積的數據表,內連接的效率要高於笛卡爾積的交叉連接。

SELECT * FROM table1 AS a INNER JOIN table2 AS b on a.column=b.column

3>外連接OUTER JOIN

1)左外連接LEFT [OUTER] JOIN

SELECT * FROM table1 AS a LEFT [OUTER] JOIN ON a.column=b.column

2)右外連接RIGHT [OUTER] JOIN

SELECT * FROM table1 AS a RIGHT [OUTER] JOIN ON a.column=b.column

3)全外連接full [outer] join

顯示符合條件的數據行,同時顯示左右不符合條件的數據行,相應的左右兩邊顯示NULL,即顯示左連接、右連接和內連接的並集

3.cross join用法,項目裏實際運用的案例。

select * from
(
select `int0` as pv from XXX
where hdfs_par = ‘20170525‘ and target_key=‘zaixinkefu_faq‘
) t1
cross JOIN
(
select max(`int0`) as max_pv from XXX
where hdfs_par between ‘20170519‘ and ‘20170525‘
and target_key=‘zaixinkefu_faq‘
) t2

運行結果:pv,max_pv

Sql的各種連接用法(cross join、inner join、full join)