自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

Oracle數(shù)據(jù)庫學(xué)習(xí)筆記之表的聯(lián)合查詢

數(shù)據(jù)庫 Oracle
本文我們主要介紹了Oracle數(shù)據(jù)庫的聯(lián)合查詢,包括:交叉聯(lián)合、等值聯(lián)合和不等值聯(lián)合、內(nèi)部聯(lián)合與外部聯(lián)合等內(nèi)容,并給出了相應(yīng)的代碼示例,希望能夠?qū)δ兴鶐椭?/div>

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ù)。顧名思義,查詢條件/表達(dá)式中以等號(“=”)連接。

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 標(biāo)準(zhǔn)中所指定的,而是我們所使用的解釋器的附加語法,你可以用它來指明是內(nèi)部聯(lián)合還是外部聯(lián)合,大多數(shù)解釋器對些都進(jìn)行了類似的擴(kuò)充,注意這種類型的聯(lián)合沒有 WHERE 子句。

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

在學(xué)習(xí)過外觀查詢后有此感受,內(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)位置補(bǔ)以空值<NULL>。

左聯(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)合兩個表,標(biāo)有+號的 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é)果進(jìn)行合并,但是對于重復(fù)記錄并不去除。

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

6、補(bǔ)充說明:

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

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

【編輯推薦】

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

2011-08-16 16:37:40

Oracle數(shù)據(jù)庫樹形查詢根節(jié)點

2011-08-19 15:13:36

SQL Server MDX查詢

2010-03-30 18:48:24

Oracle 學(xué)習(xí)

2011-08-25 11:08:21

Sybase數(shù)據(jù)庫

2009-06-30 00:45:54

Oracle數(shù)據(jù)庫

2012-07-23 14:30:33

Oracle

2010-04-14 13:14:46

Oracle數(shù)據(jù)庫

2020-08-03 11:52:31

Oracle數(shù)據(jù)庫

2011-05-24 14:55:01

Oracle數(shù)據(jù)庫

2010-10-27 17:11:35

oracle查詢

2010-10-28 16:46:23

查詢Oracle數(shù)據(jù)庫

2011-08-23 11:09:36

Oraclerman恢復(fù)system表空間恢復(fù)

2011-08-29 17:00:47

Oracle數(shù)據(jù)庫RM表空間數(shù)據(jù)塊介質(zhì)

2010-04-16 13:52:03

Oracle緩存表

2010-10-26 15:21:11

連接Oracle數(shù)據(jù)庫

2010-04-20 11:41:55

Oracle數(shù)據(jù)庫

2011-07-29 15:58:53

SGAOracle

2011-03-22 14:49:35

Oracle數(shù)據(jù)庫重定義表

2011-04-08 16:00:11

Oracle數(shù)據(jù)庫外部表

2009-05-13 10:28:30

OracleDUAL數(shù)據(jù)庫
點贊
收藏

51CTO技術(shù)棧公眾號