本系列為自己學(xué)習(xí)時的筆記及心得體會,轉(zhuǎn)載請注明出處。
1、給表起別名
無需多說蜡塌,給個例子:
2、使用不同類型的聯(lián)結(jié)
①自聯(lián)結(jié)(self-join)
需求:要給與Jim Jones同一公司的所有顧客發(fā)送一封郵件
實現(xiàn):先要找到Jim Jones所在公司勿负,再找到該公司下的所有顧客馏艾,SQL如下圖:
這里可以改為使用自聯(lián)結(jié),如下:
自聯(lián)結(jié)通常作為外部語句奴愉,用來替代從相同表中檢索數(shù)據(jù)的使用子查詢語句琅摩。雖然最終結(jié)果是相同的,但很多DBMS處理聯(lián)結(jié)比處理子查詢要快得多锭硼。
②自然聯(lián)結(jié)(natural join)
自然聯(lián)結(jié)要求你只能選擇那些唯一的列迫吐。一般通過對一個表使用通配符*,而對其他表的列使用明確的子集來完成账忘。
事實上我們建立的內(nèi)聯(lián)結(jié)都是自然聯(lián)結(jié)。
③外聯(lián)結(jié)(outer join)
如果聯(lián)結(jié)需要包含在相關(guān)表中沒有關(guān)聯(lián)行的行熙宇,我們用外聯(lián)結(jié)鳖擒。
如:要檢索包括沒有訂單顧客在內(nèi)的所有顧客,輸入和輸出如下:
如果此時用內(nèi)聯(lián)結(jié)烫止,輸入輸出如下蒋荚,可看到,內(nèi)聯(lián)結(jié)不會把沒有訂單的客戶檢索出來馆蠕。
注意:在使用OUTER JOIN的語法時期升,必須使用RIGHT或LEFT關(guān)鍵字指定包括其所有行的表惊奇。(RIGHT指出的是OUTER JOIN右邊的表,而LEFT指出的是OUTER JOIN左邊的表播赁。)上面的例子使用LEFTOUTER JOIN 從FROM子句左邊的表中選擇所有行颂郎。
如果使用RIGHT OUTER JOIN,結(jié)果如下:
3容为、使用帶聚集函數(shù)的聯(lián)結(jié)
需求:檢索所有顧客及每個顧客所下的訂單數(shù)
操作:輸入輸出如下乓序,如果換成INNER JOIN,結(jié)果略有不同(結(jié)果的第2行沒有)坎背。
4替劈、使用聯(lián)結(jié)和聯(lián)結(jié)條件
總結(jié):
△ 一般用內(nèi)聯(lián)結(jié),但使用外聯(lián)結(jié)也有效
△ 使用聯(lián)結(jié)時要提供聯(lián)結(jié)條件
△ 在一個聯(lián)結(jié)中可包含多個表得滤,甚至可對每個聯(lián)結(jié)采用不同聯(lián)結(jié)類型陨献。