日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
Oracle數(shù)據(jù)庫學習筆記之表的聯(lián)合查詢

Oracle數(shù)據(jù)庫表的聯(lián)合查詢的相關(guān)知識是本文我們主要要介紹的內(nèi)容,包括交叉聯(lián)合、等值聯(lián)合和不等值聯(lián)合、內(nèi)部聯(lián)合與外部聯(lián)合以及UNION和UNION ALL等內(nèi)容,接下來我們就一一介紹這部分內(nèi)容,希望能夠?qū)δ兴鶐椭?/p>

1、交叉聯(lián)合:

使你對于“聯(lián)合”的概念開始產(chǎn)生最直觀的印象,因為交叉聯(lián)合的結(jié)果就是兩個表的笛卡爾積。

code example:select * from T1, T2;

假如表1有2條記錄,表2有3條記錄,那么查詢結(jié)果就是2*3=6條記錄。

2、等值聯(lián)合與不等值聯(lián)合:

等值聯(lián)合:只顯示表1中的數(shù)據(jù),以及表2中的、存在于表1中的數(shù)據(jù)。顧名思義,查詢條件/表達式中以等號(“=”)連接。

code example:

 

 
 
 
  1. select T1.sectionA, T1.sectionB, T2.sectionC from T1, T2  
  2. where T1.sectionA = T2.sectionA (and ...); 

 

不等值聯(lián)合:與等值聯(lián)合查詢類似,只不過在where子句中使用除等號以外的比較符連接,此處不以例詳述。

3、內(nèi)部聯(lián)合與外部聯(lián)合

內(nèi)部聯(lián)合:產(chǎn)生的結(jié)果行數(shù)取決于參加聯(lián)合的行數(shù),也就是說內(nèi)部聯(lián)合的行數(shù)取決于 WHERE 子句的結(jié)果。

code example:

 

 
 
 
  1. SELECT P.PARTNUM, P.DESCRIPTION, P.PRICE, O.NAME, O.PARTNUM  
  2. FROM PART P  JOINORDERS OON ORDERS.PARTNUM = 54; 

 

在這里你使用的語法中的 JOIN ON 不是 ANSI 標準中所指定的,而是我們所使用的解釋器的附加語法,你可以用它來指明是內(nèi)部聯(lián)合還是外部聯(lián)合,大多數(shù)解釋器對些都進行了類似的擴充,注意這種類型的聯(lián)合沒有 WHERE 子句。

內(nèi)部聯(lián)合的定義不便介紹,個人理解上面的等值/不等值聯(lián)合查詢例子均為其代表,平時用到的查詢也多為內(nèi)部查詢。

在學習過外觀查詢后有此感受,內(nèi)部查詢結(jié)果的直觀與簡潔與外部查詢的“畫蛇添足”形成鮮明對比,那么即使我們用到的不是外部聯(lián)合,那就一定是內(nèi)部聯(lián)合了。

此外,對于概念和用法也不必做過多糾纏。這是因為——大多數(shù)的SQL 產(chǎn)品會判斷應(yīng)該在你的查詢中使用哪一種聯(lián)合,事實上,如果你在過程中使用它(或在程序內(nèi)使用它<包括存儲過程等>),你無需指明聯(lián)合類型,解釋器會為你選擇合適的語法形式。

如果你顯示地指明了聯(lián)合類型,那么解釋器會用你指明的類型來代替(由解釋器自身實現(xiàn))優(yōu)化的類型。

外部聯(lián)合:產(chǎn)生的結(jié)果行數(shù)取決于參加聯(lián)合的行數(shù),也就是說內(nèi)部聯(lián)合的行數(shù)取決于 WHERE 子句的結(jié)果,而外部聯(lián)合則是表間的聯(lián)合。

code example:

 

 
 
 
  1. SELECT P.PARTNUM, P.DESCRIPTION, P.PRICE, O.NAME, O.PARTNUM   
  2. FROM PART P RIGHT OUTER JOINORDERS OON ORDERS.PARTNUM = 54; 

 

上述代碼示例中使用了 RIGHT OUTER JOIN,它會令 SQL 返回右邊表集內(nèi)的全部記錄,對于ORDERS.PARTNUM<>54的也會顯示這些記錄,只不地在相應(yīng)位置補以空值。

左聯(lián)合也是一樣,只不過,由于表1與表2中的記錄條數(shù)不同,其查詢結(jié)果也大相徑庭。

注意到:在一些解釋器中使用+號來代替外部聯(lián)合。+號的意思就是——顯示我的全部內(nèi)容,包括不匹配的內(nèi)容。 

code example:

 

 
 
 
  1. select e.name, e.employee_id, ep.salary, ep.marital_status,  
  2. from employee_tbl e, employee_pay_tbl ep  
  3. where e.employee_id = ep.employee_id(+) and e.name like '%MITH' 

 

這條語句將會聯(lián)合兩個表,標有+號的 employee_id 將會全部顯示,包括不滿足條件的記錄。

4、表的自我聯(lián)合:

由于聯(lián)合查詢也常被譯為“連接”,因此在有些資料中看到的“自連接”查詢指的也是這個概念。它并無特別之處,是指表1與表2均為同一表名。其用處在于檢查表中數(shù)據(jù)的一致性。

比如T1表中兩條記錄的sectionA字段是同值的,這可能是由于數(shù)據(jù)錄入錯誤造成的,如果按正常數(shù)據(jù)使用它,可能造成不可預(yù)料的災(zāi)難。

code example:

 

 
 
 
  1. SELECT F.PARTNUM, F.DESCRIPTION, S.PARTNUM, S.DESCRIPTION  
  2. FROM PART F, PART S  
  3. WHERE F.PARTNUM = S.PARTNUM  
  4. AND F.DESCRIPTION <> S.DESCRIPTION 

 

如果不存在上述異常數(shù)據(jù),那么查詢結(jié)果應(yīng)該為空;否則1條異常記錄對應(yīng)兩條查詢結(jié)果??梢源藖頇z查數(shù)據(jù)的一致性。

5、聯(lián)想到 UNION 與 UNION ALL

UNION與UNION ALL都用來連接兩個查詢(即兩個select子句),但前者返回兩個查詢的結(jié)果并去除其重復(fù)的部分,后者一樣對查詢結(jié)果進行合并,但是對于重復(fù)記錄并不去除。

UNION可以集合運算中的并集運算聯(lián)系起來,與其對應(yīng)的是INTERSECT,即交集運算,它返回的是兩個查詢中共有的部分。

6、補充說明:

上述聯(lián)合查詢僅僅列舉重點,在聯(lián)合查詢的分類問題上并未作任何具體而微的闡述,甚至由于聯(lián)合查詢的應(yīng)用在實際工作中比較少見,對此類概念的理解可以不作深究,但是一知半解是危險的,你為無知付出的代價是昂貴的。本文寫作的意義也在于此。

關(guān)于Oracle數(shù)據(jù)庫學習筆記之表的聯(lián)合查詢的相關(guān)知識就介紹到這里了,希望本次的介紹能夠?qū)δ兴斋@!

【編輯推薦】

  1. Oracle數(shù)據(jù)庫PL/SQL快捷鍵設(shè)置詳解
  2. Oracle數(shù)據(jù)庫診斷工具RDA的安裝與使用詳解
  3. Oracle數(shù)據(jù)庫GLOBAL_NAMES參數(shù)的詳細研究
  4. Oracle數(shù)據(jù)庫歸檔模式的切換及其相關(guān)操作詳解
  5. Oracle 10g UNDO表空間過大導(dǎo)致磁盤空間不足的解決

網(wǎng)站標題:Oracle數(shù)據(jù)庫學習筆記之表的聯(lián)合查詢
當前網(wǎng)址:http://www.dlmjj.cn/article/dhoeodi.html