一、(多表)連接方式分類
T-SQL提供兩種連接方式:傳統(tǒng)方式和SQL連接方式
1.傳統(tǒng)方式:SELECT 列1,列2,列3.... FROM 表1,表2,表3... WHERE condition
這種方式會(huì)把表1,2,3做笛卡爾積(根據(jù)測(cè)試結(jié)果推測(cè),不一定準(zhǔn)確)
2.SQL連接方式:
1>.INNER JOIN,內(nèi)聯(lián),系統(tǒng)默認(rèn),相當(dāng)于JOIN 。返回多表之間完全匹配的結(jié)果。
2>.LETF JOIN ,左聯(lián),返回除了有完全匹配的結(jié)果還有左表所有行。
3>.RIGHT JOIN ,右聯(lián),返回除了有完全匹配的結(jié)果還有右表所有行。
4>.Full JOIN ,完全外鏈接,返回除了有完全匹配的結(jié)果還有左右表所有行。
其中LETF JOIN、RIGHT JOIN和Full JOIN 均屬于外連接(OUTER JOIN)
5>.CROSS JOIN,交叉連接,又稱為自然連接,即生成一個(gè)笛卡爾積。(應(yīng)該類似于傳統(tǒng)方式)
二、SQL Server JOIN 內(nèi)部實(shí)現(xiàn)的三種算法:
1. Loop join(嵌套循環(huán)), 即首先遍歷 A,將A表中的每一條記錄與 B表進(jìn)行連接比較,如果滿足A.di=B.id,則返回記錄;
2. Merge join(合并連接), 即首先對(duì)A,B表進(jìn)行排序,然后同時(shí)遍歷A和B表,進(jìn)行A.id=B.id的驗(yàn)證,直到遍歷到A和B表結(jié)束;
3. Hash join(哈希連接), 即首先對(duì)A表所有記錄的id進(jìn)行hash計(jì)算,最終形成一個(gè)hash表,然后join時(shí),遍歷B表,對(duì)B表每條記錄的id進(jìn)行hash運(yùn)算,然后在A的Hash表中驗(yàn)證是否一致,最后得出結(jié)果。