語句11:聯(lián)合查詢(UNION JOIN)例句,還沒有找到能執(zhí)行的SQL環(huán)境 。
SELECT O.ID,O.ORDER_NUMBER,O.CUSTOMER_ID,C.ID,C.NAME
FROM ORDERS O UNION JOIN CUSTOMERS C ON C.ID=O.CUSTOMER_ID
語句12:語句11在DB2下的等價實現(xiàn) 。還不知道DB2是否支持語句11呢!
SELECT O.ID,O.ORDER_NUMBER,O.CUSTOMER_ID,C.ID,C.NAME
FROM ORDERS O FULL OUTER JOIN CUSTOMERS C ON C.ID=O.CUSTOMER_ID
EXCEPT
SELECT O.ID,O.ORDER_NUMBER,O.CUSTOMER_ID,C.ID,C.NAME
FROM ORDERS O INNER JOIN CUSTOMERS C ON C.ID=O.CUSTOMER_ID;
語句13:語句11在Oracle下的等價實現(xiàn) 。
SELECT O.ID,O.ORDER_NUMBER,O.CUSTOMER_ID,C.ID,C.NAME
FROM ORDERS O FULL OUTER JOIN CUSTOMERS C ON C.ID=O.CUSTOMER_ID
MINUS
SELECT O.ID,O.ORDER_NUMBER,O.CUSTOMER_ID,C.ID,C.NAME
FROM ORDERS O INNER JOIN CUSTOMERS C ON C.ID=O.CUSTOMER_ID;
查詢結果如下:
五、自然連接(NATURAL INNER JOIN):說真的,這種連接查詢沒有存在的價值,既然是SQL2標準中定義的,就給出個例子看看吧 。自然連接無需指定連接列,SQL會檢查兩個表中是否相同名稱的列,且假設他們在連接條件中使用,并且在連接條件中僅包含一個連接列 。不允許使用ON語句,不允許指定顯示列,顯示列只能用*表示(ORACLE環(huán)境下測試的) 。對于每種連接類型(除了交叉連接外),均可指定NATURAL 。下面給出幾個例子 。
語句14:
SELECT *
FROM ORDERS O NATURAL INNER JOIN CUSTOMERS C;
語句15:
SELECT *
FROM ORDERS O NATURAL LEFT OUTER JOIN CUSTOMERS C;
語句16:
SELECT *
FROM ORDERS O NATURAL RIGHT OUTER JOIN CUSTOMERS C;
語句17:
SELECT *
FROM ORDERS O NATURAL FULL OUTER JOIN CUSTOMERS C;
六、SQL查詢的基本原理:兩種情況介紹 。
第一、單表查詢:根據(jù)WHERE條件過濾表中的記錄,形成中間表(這個中間表對用戶是不可見的);然后根據(jù)SELECT的選擇列選擇相應的列進行返回最終結果 。
第二、兩表連接查詢:對兩表求積(笛卡爾積)并用ON條件和連接連接類型進行過濾形成中間表;然后根據(jù)WHERE條件過濾中間表的記錄,并根據(jù)SELECT指定的列返回查詢結果 。
第三、多表連接查詢:先對第一個和第二個表按照兩表連接做查詢,然后用查詢結果和第三個表做連接查詢,以此類推,直到所有的表都連接上為止,最終形成一個中間的結果表,然后根據(jù)WHERE條件過濾中間表的記錄,并根據(jù)SELECT指定的列返回查詢結果 。
理解SQL查詢的過程是進行SQL優(yōu)化的理論依據(jù) 。
七、ON后面的條件(ON條件)和WHERE條件的區(qū)別:
ON條件:是過濾兩個鏈接表笛卡爾積形成中間表的約束條件 。
WHERE條件:在有ON條件的SELECT語句中是過濾中間表的約束條件 。在沒有ON的單表查詢中,是限制物理表或者中間查詢結果返回記錄的約束 。在兩表或多表連接中是限制連接形成最終中間表的返回結果的約束 。
從這里可以看出,將WHERE條件移入ON后面是不恰當?shù)?。推薦的做法是:
ON只進行連接操作,WHERE只過濾中間表的記錄 。
八、總結
連接查詢是SQL查詢的核心,連接查詢的連接類型選擇依據(jù)實際需求 。如果選擇不當,非但不能提高查詢效率,反而會帶來一些邏輯錯誤或者性能低下 。下面總結一下兩表連接查詢選擇方式的依據(jù):
1、 查兩表關聯(lián)列相等的數(shù)據(jù)用內(nèi)連接 。
2、 Col_L是Col_R的子集時用右外連接 。
3、 Col_R是Col_L的子集時用左外連接 。
4、 Col_R和Col_L彼此有交集但彼此互不為子集時候用全外 。
5、 求差操作的時候用聯(lián)合查詢 。
多個表查詢的時候,這些不同的連接類型可以寫到一塊 。例如:
以上關于本文的內(nèi)容,僅作參考!溫馨提示:如遇健康、疾病相關的問題,請您及時就醫(yī)或請專業(yè)人士給予相關指導!
「愛刨根生活網(wǎng)」www.malaban59.cn小編還為您精選了以下內(nèi)容,希望對您有所幫助:- 實現(xiàn)負載均衡集的技巧 負載均衡集群如何實現(xiàn)
- mysql切換主從方法和如何使用 mysql主從切換步驟
- mysql數(shù)據(jù)庫怎么查看優(yōu)化 mysql數(shù)據(jù)庫查詢語句優(yōu)化
- 附虛擬機安裝操作教程 虛擬機安裝操作系統(tǒng)的主要步驟有哪些
- 微信關聯(lián)聊天記錄同步嗎 如何關閉附近的人
- 揭曉無法連接的原因和解決法 sql server2008連接不上服務器
- 心梗急救措施
- 故宮是哪個門都可以進嗎?附近還有什么可玩的? 故宮哪個門進
- 創(chuàng)建數(shù)據(jù)庫的教程 免費mysql數(shù)據(jù)庫空間
- 代碼創(chuàng)建數(shù)據(jù)庫的步驟 sql數(shù)據(jù)庫安裝失敗怎么辦
