Join語法有很多inner和outer,,還有l(wèi)eft,、right,,有的時(shí)候會真有點(diǎn)分不清楚,。 假設(shè)我們有兩張表,。Table A 是左邊的表,。Table B 是右邊的表,。其各有四條記錄,,其中有兩條記錄name是相同的,,如下所示:讓我們看看不同JOIN的不同 1.INNER JOIN SELECT * FROM TableA INNER JOIN TableB ON TableA.name = TableB.name 2.FULL [OUTER] JOIN (1) SELECT * FROM TableA FULL OUTER JOIN TableB ON TableA.name = TableB.name 4.RIGHT [OUTER] JOIN RIGHT OUTERJOIN 是后面的表為基礎(chǔ),與LEFT OUTER JOIN用法類似,。這里不介紹了,。 5.UNION 與 UNION ALL UNION 操作符用于合并兩個(gè)或多個(gè) SELECT 語句的結(jié)果集。 (1)SELECT name FROM TableA UNION SELECT name FROM TableB 選取不同值 (2)SELECT name FROM TableA UNION ALL SELECT name FROM TableB 全部列出來 (3)注意: SELECT * FROM TableA UNION SELECT * FROM TableB 由于 id 1 Pirate 與 id 2 Pirate 并不相同,,不合并 還需要注冊的是我們還有一個(gè)是“交差集” cross join, 這種Join沒有辦法用文式圖表示,,因?yàn)槠渚褪前驯鞟和表B的數(shù)據(jù)進(jìn)行一個(gè)N*M的組合,即笛卡爾積,。表達(dá)式如下:SELECT * FROM TableA CROSS JOIN TableB 這個(gè)笛卡爾乘積會產(chǎn)生 4 x 4 = 16 條記錄,,一般來說,我們很少用到這個(gè)語法,。但是我們得小心,,如果不是使用嵌套的select語句,一般系統(tǒng)都會產(chǎn)生笛卡爾乘積然再做過濾,。這是對于性能來說是非常危險(xiǎn)的,,尤其是表很大的時(shí)候。 對技術(shù)感興趣的同學(xué)可進(jìn)群(備注:Java) |
|