例如:下面的語句3和語句4的結(jié)果是相同的 。
語句3:隱式的內(nèi)連接,沒有INNER JOIN,形成的中間表為兩個(gè)表的笛卡爾積 。
SELECT O.ID,O.ORDER_NUMBER,C.ID,C.NAME
FROM CUSTOMERS C,ORDERS O
WHERE C.ID=O.CUSTOMER_ID;
語句4:顯示的內(nèi)連接,一般稱為內(nèi)連接,有INNER JOIN,形成的中間表為兩個(gè)表經(jīng)過ON條件過濾后的笛卡爾積 。
SELECT O.ID,O.ORDER_NUMBER,C.ID,C.NAME
FROM CUSTOMERS C INNER JOIN ORDERS O ON C.ID=O.CUSTOMER_ID;
語句3和語句4的查詢結(jié)果:
三、外連接(OUTER JOIN):外連不但返回符合連接和查詢條件的數(shù)據(jù)行,還返回不符合條件的一些行 。外連接分三類:左外連接(LEFT OUTER JOIN)、右外連接(RIGHT OUTER JOIN)和全外連接(FULL OUTER JOIN) 。
三者的共同點(diǎn)是都返回符合連接條件和查詢條件(即:內(nèi)連接)的數(shù)據(jù)行 。不同點(diǎn)如下:
左外連接還返回左表中不符合連接條件單符合查詢條件的數(shù)據(jù)行 。
右外連接還返回右表中不符合連接條件單符合查詢條件的數(shù)據(jù)行 。
全外連接還返回左表中不符合連接條件單符合查詢條件的數(shù)據(jù)行,并且還返回右表中不符合連接條件單符合查詢條件的數(shù)據(jù)行 。全外連接實(shí)際是上左外連接和右外連接的數(shù)學(xué)合集(去掉重復(fù)),即“全外=左外 UNION 右外” 。
說明:左表就是在“(LEFT OUTER JOIN)”關(guān)鍵字左邊的表 。右表當(dāng)然就是右邊的了 。在三種類型的外連接中,OUTER 關(guān)鍵字是可省略的 。
下面舉例說明:
語句5:左外連接(LEFT OUTER JOIN)
SELECT O.ID,O.ORDER_NUMBER,O.CUSTOMER_ID,C.ID,C.NAME
FROM ORDERS O LEFT OUTER JOIN CUSTOMERS C ON C.ID=O.CUSTOMER_ID;
語句6:右外連接(RIGHT OUTER JOIN)
SELECT O.ID,O.ORDER_NUMBER,O.CUSTOMER_ID,C.ID,C.NAME
FROM ORDERS O RIGHT OUTER JOIN CUSTOMERS C ON C.ID=O.CUSTOMER_ID;
注意:WHERE條件放在ON后面查詢的結(jié)果是不一樣的 。例如:
語句7:WHERE條件獨(dú)立 。
SELECT O.ID,O.ORDER_NUMBER,O.CUSTOMER_ID,C.ID,C.NAME
FROM ORDERS O LEFT OUTER JOIN CUSTOMERS C ON C.ID=O.CUSTOMER_ID
WHERE O.ORDER_NUMBER<>’MIKE_ORDER001′;
語句8:將語句7中的WHERE條件放到ON后面 。
SELECT O.ID,O.ORDER_NUMBER,O.CUSTOMER_ID,C.ID,C.NAME
FROM ORDERS O LEFT OUTER JOIN CUSTOMERS C ON C.ID=O.CUSTOMER_ID AND O.ORDER_NUMBER<>’MIKE_ORDER001′;
從語句7和語句8查詢的結(jié)果來看,顯然是不相同的,語句8顯示的結(jié)果是難以理解的 。因此,推薦在寫連接查詢的時(shí)候,ON后面只跟連接條件,而對中間表限制的條件都寫到WHERE子句中 。
語句9:全外連接(FULL OUTER JOIN) 。
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;
注意:MySQL是不支持全外的連接的,這里給出的寫法適合Oracle和DB2 。但是可以通過左外和右外求合集來獲取全外連接的查詢結(jié)果 。下圖是上面SQL在Oracle下執(zhí)行的結(jié)果:
語句10:左外和右外的合集,實(shí)際上查詢結(jié)果和語句9是相同的 。
SELECT O.ID,O.ORDER_NUMBER,O.CUSTOMER_ID,C.ID,C.NAME
FROM ORDERS O LEFT OUTER JOIN CUSTOMERS C ON C.ID=O.CUSTOMER_ID
UNION
SELECT O.ID,O.ORDER_NUMBER,O.CUSTOMER_ID,C.ID,C.NAME
FROM ORDERS O RIGHT OUTER JOIN CUSTOMERS C ON C.ID=O.CUSTOMER_ID;
語句9和語句10的查詢結(jié)果是相同的,如下:
四、聯(lián)合連接(UNION JOIN):這是一種很少見的連接方式 。Oracle、MySQL均不支持,其作用是:找出全外連接和內(nèi)連接之間差異的所有行 。這在數(shù)據(jù)分析中排錯(cuò)中比較常用 。也可以利用數(shù)據(jù)庫的集合操作來實(shí)現(xiàn)此功能 。
以上關(guān)于本文的內(nèi)容,僅作參考!溫馨提示:如遇健康、疾病相關(guān)的問題,請您及時(shí)就醫(yī)或請專業(yè)人士給予相關(guān)指導(dǎo)!
「愛刨根生活網(wǎng)」www.malaban59.cn小編還為您精選了以下內(nèi)容,希望對您有所幫助:- 實(shí)現(xiàn)負(fù)載均衡集的技巧 負(fù)載均衡集群如何實(shí)現(xiàn)
- mysql切換主從方法和如何使用 mysql主從切換步驟
- mysql數(shù)據(jù)庫怎么查看優(yōu)化 mysql數(shù)據(jù)庫查詢語句優(yōu)化
- 附虛擬機(jī)安裝操作教程 虛擬機(jī)安裝操作系統(tǒng)的主要步驟有哪些
- 微信關(guān)聯(lián)聊天記錄同步嗎 如何關(guān)閉附近的人
- 揭曉無法連接的原因和解決法 sql server2008連接不上服務(wù)器
- 心梗急救措施
- 故宮是哪個(gè)門都可以進(jìn)嗎?附近還有什么可玩的? 故宮哪個(gè)門進(jìn)
- 創(chuàng)建數(shù)據(jù)庫的教程 免費(fèi)mysql數(shù)據(jù)庫空間
- 代碼創(chuàng)建數(shù)據(jù)庫的步驟 sql數(shù)據(jù)庫安裝失敗怎么辦
