IT貓撲網(wǎng):您身邊最放心的安全下載站! 最新更新|軟件分類|軟件專題|手機(jī)版|論壇轉(zhuǎn)貼|軟件發(fā)布

您當(dāng)前所在位置:首頁數(shù)據(jù)庫Oracle → Oracle外連接和“+”號(hào)的用法

Oracle外連接和“+”號(hào)的用法

時(shí)間:2015/6/28來源:IT貓撲網(wǎng)作者:網(wǎng)管聯(lián)盟我要評論(0)

  對于外連接,oracle中可以使用"(+)"來表示,9i可以使用LEFT/RIGHT/FULL OUTER JOIN,下面將配合實(shí)例一一介紹。

  1. LEFT OUTER JOIN:左外關(guān)聯(lián)

  SELECT e.last_name, e.department_id, d.department_name

  FROM employees e

  LEFT OUTER JOIN departments d

  ON (e.department_id = d.department_id);

  等價(jià)于

  SELECT e.last_name, e.department_id, d.department_name

  FROM employees e, departments d

  WHERE e.department_id=d.department_id(+);

  結(jié)果為:所有員工及對應(yīng)部門的記錄,包括沒有對應(yīng)部門編號(hào)department_id的員工記錄。

  2. RIGHT OUTER JOIN:右外關(guān)聯(lián)

  SELECT e.last_name, e.department_id, d.department_name

  FROM employees e

  RIGHT OUTER JOIN departments d

  ON (e.department_id = d.department_id);

  等價(jià)于

  SELECT e.last_name, e.department_id, d.department_name

  FROM employees e, departments d

  WHERE e.department_id(+)=d.department_id;

  結(jié)果為:所有員工及對應(yīng)部門的記錄,包括沒有任何員工的部門記錄。

  3. FULL OUTER JOIN:全外關(guān)聯(lián)

  SELECT e.last_name, e.department_id, d.department_name

  FROM employees e

  FULL OUTER JOIN departments d

  ON (e.department_id = d.department_id);

  結(jié)果為:所有員工及對應(yīng)部門的記錄,包括沒有對應(yīng)部門編號(hào)department_id的員工記錄和沒有任何員工的部門記錄。

  外連接:

  除了顯示匹配相等連接條件的數(shù)據(jù)外,還可以顯示某一個(gè)表中無法匹配相等連接條件的記錄!

  ------------------------------------------------

  1) 左條件(+) = 右條件

  左條件所在的表必須嚴(yán)格進(jìn)行相等連接條件的匹配,而右條件所在的表除了匹配相等連接條件外,還可以顯示無法匹配連接條件的數(shù)據(jù)!

  也稱為右外連接.

  --------------------------------

  可以用下列語句取代:

  SELECT...FROM 表1 RIGHT OUTER JOIN 表2 ON 條件;

  2) 左條件 = 右條件(+)

  右條件所在的表必須嚴(yán)格進(jìn)行相等連接條件的匹配,而左條件所在的表除了匹配相等連接條件外,還可以顯示無法匹配連接條件的數(shù)據(jù)!

  也稱為左外連接.

  --------------------------------

  可以用下列語句取代:

  SELECT...FROM 表1 LEFT OUTER JOIN 表2 ON 條件;

  REM 除了相等連接之外,顯示沒有員工的部門信息.

  SELECT * FROM EMP,DEPT WHERE EMP.DEPTNO(+) = DEPT.DEPTNO;

  SELECT * FROM EMP RIGHT OUTER JOIN DEPT ON EMP.DEPTNO = DEPT.DEPTNO;

  REM 除了相等連接之外,顯示沒有部門的員工信息.

  SELECT * FROM EMP,DEPT WHERE EMP.DEPTNO = DEPT.DEPTNO(+);

  SELECT * FROM EMP LEFT OUTER JOIN DEPT ON EMP.DEPTNO = DEPT.DEPTNO;

  Oracle 建議你用在From語句后用Outer Join語法 而不是Oracle的Join操作符(+).而且(+)是要受下面的規(guī)則限制的,但Outer Join語法則不受的~~

  1)你不可以在查詢塊中使用(+) 當(dāng)它同時(shí)包含 join的from語句中

  2)(+)只是在where語句中,并且只能對應(yīng)一個(gè)表或視圖的一行字段

  3)如果A和B做聯(lián)接時(shí)有多個(gè)條件,那么(+)必須完善所有的匹配條件,

  如果沒有 ,oracle不會(huì)警告你~只是結(jié)果自然不同的

  4)不可以在作出一個(gè)表外查詢 另張表內(nèi)查詢的(+)聯(lián)接操作~~

  5)不可以用(+)外聯(lián)接到自己 當(dāng)然Self Join是可以的

  6)含(+)的Where后的注意

  OR不可用

  IN不可用

  子查詢不可用

  以下給些個(gè)例子:

  SQL code

  SQL> desc part

  Name  Null?    Type

  ----------------------------------------- -------- -----------------

  PART_ID     NOT NULL VARCHAR2(4)

  SUPPLIER_ID    VARCHAR2(4)

  SQL> select * from part;

  PART SUPP

  ---- ----

  P1   S1

  P2   S2

  P3

  P4

#p#副標(biāo)題#e#

  SQL> desc supplier

  Name  Null?    Type

  ----------------------------------------- -------- -----------------

  SUPPLIER_ID NOT NULL VARCHAR2(4)

  SUPPLIER_NAME     NOT NULL VARCHAR2(20)

  SQL> select * from supplier;

  SUPP SUPPLIER_NAME

  ---- --------------------

  S1   Supplier#1

  S2   Supplier#2

  S3   Supplier#3

  SQL> select p.part_id, s.supplier_name

  2  from part p, supplier s

  3  where p.supplier_id = s.supplier_id (+);

  PART SUPPLIER_NAME

  ---- --------------------

  P1   Supplier#1

  P2   Supplier#2

  P3

  P4

  --(+)是單向的

  SQL> select p.part_id, s.supplier_name

  2  from part p, supplier s

  3  where p.supplier_id (+) = s.supplier_id (+);

  where p.supplier_id (+) = s.supplier_id (+)

  *

  ERROR at line 3:

  ORA-01468: a predicate may reference only one outer-joined table

  --實(shí)現(xiàn)Full Join的方法

  SQL> select p.part_id, s.supplier_name

  2  from part p, supplier s

  3  where p.supplier_id = s.supplier_id (+)

  4  union

  5  select p.part_id, s.supplier_name

  6  from part p, supplier s

  7  where p.supplier_id (+) = s.supplier_id;

  PART SUPPLIER_NAME

  ---- --------------------

  P1   Supplier#1

  P2   Supplier#2

  P3

  P4

  Supplier#3

  --現(xiàn)在的語法

  SQL> select p.part_id, s.supplier_name

  2  from part p full outer join supplier s

  3  on p.supplier_id = s.supplier_id;

  PART SUPPLIER_NAME

  ---- --------------------

  P1   Supplier#1

  P2   Supplier#2

  P4

  P3

  Supplier#3

  另外的EG:

  SQL code

  SQL> select * from testa;

  ID NAME  ADDR   AGE

  ---------- ------ ------ ----------

  3 電子   南京     23

  5 物理   北京     23

  6 物理   河北     25

  1 電腦   上海     23

  2 電子   北京     22

  4 物理   蕪

關(guān)鍵詞標(biāo)簽:Oracle

相關(guān)閱讀

文章評論
發(fā)表評論

熱門文章 Oracle中使用alter table來增加,刪除,修改列Oracle中使用alter table來增加,刪除,修改列oracle中使用SQL語句修改字段類型-oracle修oracle中使用SQL語句修改字段類型-oracle修使用低權(quán)限Oracle數(shù)據(jù)庫賬戶得到管理員權(quán)限使用低權(quán)限Oracle數(shù)據(jù)庫賬戶得到管理員權(quán)限Oracle對user的訪問控制Oracle對user的訪問控制

相關(guān)下載

人氣排行 ORACLE SQL 判斷字符串是否為數(shù)字的語句Oracle中使用alter table來增加,刪除,修改列的語法ORACLE和SQL語法區(qū)別歸納(1)oracle grant 授權(quán)語句如何加速Oracle大批量數(shù)據(jù)處理Oracle刪除表的幾種方法ORACLE修改IP地址后如何能夠使用Oracle 10g創(chuàng)建表空間和用戶并指定權(quán)限