成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Oracle數據庫表連接方式及常見用法

數據庫 Oracle
Oracle數據庫表連接方式根據應用場景的不同會有不同的方法,本文向您介紹相等連接、外連接、不等連接、自連接和哈希連接等。

一個SQL語句的關聯表超過兩個,那么連接的順序如何呢?ORACLE首先連接其中的兩個表,產生一個結果集;然后將產生的結果集與下一個表再進行關聯;繼續這個過程,直到所有的表都連接完成;***產生所需的數據,,本文將主要從以下幾個典型的例子來分析Oracle表的幾種不同連接方式:

1. 相等連接

通過兩個表具有相同意義的列,可以建立相等連接條件。

只有連接列上在兩個表中都出現且值相等的行才會出現在查詢結果中。

例 查詢員工信息以及對應的員工所在的部門信息;

  1.    SELECT * FROM EMP,DEPT;   
  2.   SELECT * FROM EMP,DEPT  
  3.  
  4.   WHERE EMP.DEPTNO = DEPT.DEPTNO;  

REM 顯示工資超過2000的員工信息以及對應的員工的部門名稱。

2. 外連接

對于外連接,Oracle中可以使用“(+)”來表示,9i可以使用LEFT/RIGHT/FULL OUTER JOIN,下面將配合實例一一介紹。除了顯示匹配相等連接條件的信息之外,還顯示無法匹配相等連接條件的某個表的信息。

外連接采用(+)來識別。

◆左條件(+) = 右條件;

代表除了顯示匹配相等連接條件的信息之外,還顯示右條件所在的表中無法匹配相等連接條件的信息。

此時也稱為"右外連接".另一種表示方法是:

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

◆左條件 = 右條件(+);

代表除了顯示匹配相等連接條件的信息之外,還顯示左條件所在的表中無法匹配相等連接條件的信息。

此時也稱為"左外連接".

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

例 顯示員工信息以及所對應的部門信息

--無法顯示沒有部門的員工信息

--無法顯示沒有員工的部門信息

--SELECT * FROM EMP,DEPT WHERE EMP.DEPTNO = DEPT.DEPTNO;

--直接做相等連接:

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

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;

3. 不等連接

兩個表中的相關的兩列進行不等連接,比較符號一般為>,<,...,BETWEEN.. AND..

REM SALGRADE

--DESC SALGRADE;

--SELECT * FROM SALGRADE;

REM 顯示員工的編號,姓名,工資,以及工資所對應的級別。

SELECT EMPNO,ENAME,SAL,SALGRADE.* FROM SALGRADE,EMP

WHERE EMP.SAL BETWEEN LOSAL AND HISAL;

REM 顯示雇員的編號,姓名,工資,工資級別,所在部門的名稱;

SELECT EMPNO,ENAME,SAL,GRADE,DNAME FROM EMP,DEPT,SALGRADE

WHERE EMP.DEPTNO = DEPT.DEPTNO AND EMP.SAL BETWEEN LOSAL AND HISAL;

4. 自連接

自連接是數據庫中經常要用的連接方式,使用自連接可以將自身表的一個鏡像當作另一個表來對待,從而能夠得到一些特殊的數據。下面介紹一下自連接的方法:

將原表復制一份作為另一個表,兩表做笛卡兒相等連接。

例 顯示雇員的編號,名稱,以及該雇員的經理名稱

SELECT WORKER.ENAME,WORKER.MGR,MANAGER.EMPNO,MANAGER.ENAME FROM EMP WORKER,EMP MANAGER

WHERE WORKER.MGR = MANAGER.EMPNO;

5.哈希連接

當內存能夠提供足夠的空間時,哈希(HASH)連接是Oracle優化器通常的選擇。哈希連接中,優化器根據統計信息,首先選擇兩個表中的小表,在內存中建立這張表的基于連接鍵的哈希表;優化器再掃描表連接中的大表,將大表中的數據與哈希表進行比較,如果有相關聯的數據,則將數據添加到結果集中。

當表連接中的小表能夠完全cache到可用內存的時候,哈希連接的效果***。哈希連接的成本只是兩個表從硬盤讀入到內存的成本。

但是,如果哈希表過大而不能全部cache到可用內存時,優化器將會把哈希表分成多個分區,再將分區逐一cache到內存中。當表的分區超過了可用內存時,分區的部分數據就會臨時地寫到磁盤上的臨時表空間上。因此,分區的數據寫磁盤時,比較大的區間(EXTENT)會提高I/O性能。ORACLE推薦的臨時表空間的區間是1MB。臨時表空間的區間大小由UNIFORM SIZE指定。

當哈希表構建完成后,進行下面的處理:

1) 第二個大表進行掃描

2) 如果大表不能完全cache到可用內存的時候,大表同樣會分成很多分區

3) 大表的***個分區cache到內存

4) 對大表***個分區的數據進行掃描,并與哈希表進行比較,如果有匹配的紀錄,添加到結果集里面

5) 與***個分區一樣,其它的分區也類似處理。

6) 所有的分區處理完后,ORACLE對產生的結果集進行歸并,匯總,產生最終的結果。

當哈希表過大或可用內存有限,哈希表不能完全CACHE到內存。隨著滿足連接條件的結果集的增加,可用內存會隨之下降,這時已經CACHE到內存的數據可能會重新寫回到硬盤去。如果出現這種情況,系統的性能就會下降。

當連接的兩個表是用等值連接并且表的數據量比較大時,優化器才可能采用哈希連接。哈希連接是基于CBO的。只有在數據庫初始化參數HASH_JOIN_ENABLED設為True,并且為參數PGA_AGGREGATE_TARGET設置了一個足夠大的值的時候,Oracle才會使用哈希邊連接。HASH_AREA_SIZE是向下兼容的參數,但在Oracle9i之前的版本中應當使用HASH_AREA_SIZE。當使用ORDERED提示時,FROM子句中的***張表將用于建立哈希表。

  1.    select a.user_name,b.dev_no   
  2.   from user_info a, dev_info b  
  3.  
  4.   where a.user_id = b.user_id;  
  5.  
  6.   Plan  
  7.  
  8.   ----------------------------------------------------------  
  9.  
  10.   0 SELECT STATEMENT Optimizer=CHOOSE (Cost=5 Card=82 Bytes=3936  
  11.  
  12.   )  
  13.  
  14.   1 0 HASH JOIN (Cost=5 Card=82 Bytes=3936)  
  15.  
  16.   2 1 TABLE ACCESS (FULLOF 'USER_INFO' (Cost=2 Card=82 Bytes  
  17.  
  18.   =1968)  
  19.  
  20.   3 1 TABLE ACCESS (FULLOF 'DEV_INFO' (Cost=2 Card=82 Bytes=  
  21.  
  22.   1968)  

可以通過在SQL語句中添加HINTS,強制ORACLE優化器產生哈希連接的執行計劃。

  1. select /*+ use_hash(a b)*/ a.user_name,b.dev_no   
  2.  
  3. from user_info a, dev_info b  
  4.  
  5. where a.user_id = b.user_id; 

當缺少有用的索引時,哈希連接比嵌套循環連接更加有效。哈希連接也可能比嵌套循環連接更快,因為處理內存中的哈希表比檢索B_樹索引更加迅速。

 

【編輯推薦】

  1. MySQL左連接、右連接和內連接詳解
  2. 數據庫連接性能深度探索
  3. ADO.NET數據庫連接、操作SQL舉例a>
  4. 如何處理幾種常見的數據庫不當連接
  5. 多數據庫環境的連接策略
責任編輯:佚名 來源: IT專家網
相關推薦

2010-03-31 16:28:11

Oracle數據庫

2010-10-26 16:07:45

連接oracle數據庫

2010-04-06 11:02:30

Oracle 數據庫

2011-03-25 09:05:02

Oracle數據庫共享連接專用連接

2010-04-08 18:45:35

Oracle數據庫

2010-04-07 18:26:43

Oracle數據庫

2010-10-26 15:54:02

連接oracle數據庫

2010-04-06 10:52:06

Oracle數據庫

2011-07-26 16:05:19

Oracle數據庫服務器

2010-04-08 18:54:32

Oracle數據庫

2018-01-04 10:43:43

OracleMysqlJava

2019-12-03 09:00:59

Oracle數據庫等待事件

2010-04-28 16:23:18

Oracle數據庫

2011-03-21 12:51:16

Oracle數據庫表連接

2010-10-26 14:06:43

oracle連接遠程數

2010-09-28 09:08:40

Oracle

2010-10-26 16:15:33

連接Oracle數據庫

2011-05-25 09:45:40

Oracle數據庫

2011-05-26 14:49:50

ORACLE數據庫

2024-05-08 08:37:44

點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 夜夜爽99久久国产综合精品女不卡 | 青草福利 | 91免费高清 | 精品视频一区二区三区 | 91精品国产综合久久久久久丝袜 | 精品国产乱码久久久久久闺蜜 | 99re视频在线免费观看 | 欧美在线一区二区三区 | 中文字幕在线视频观看 | 国产黄色av网站 | 成年人的视频免费观看 | 亚洲国产高清高潮精品美女 | 老司机深夜福利网站 | 99在线免费视频 | 欧美精品1区2区3区 免费黄篇 | 日韩免费毛片视频 | 中文字幕精品一区二区三区在线 | 亚洲精品在线视频 | 国产午夜在线 | 久久一区精品 | 成人午夜免费福利视频 | 国产精品成av人在线视午夜片 | 91精品国产91久久久久久密臀 | 日本理论片好看理论片 | 国产一区二区精品在线观看 | 亚洲精品黄色 | 极品粉嫩国产48尤物在线播放 | 国产乱码一二三区精品 | 爱爱免费视频 | 亚洲欧美一区二区三区国产精品 | 亚洲综合日韩精品欧美综合区 | 亚洲性人人天天夜夜摸 | 中文字幕一区二区三区精彩视频 | av男人的天堂av | 91国在线 | 日韩欧美手机在线 | 日韩精品在线一区二区 | 在线播放中文字幕 | 亚洲综合无码一区二区 | 国产在线网站 | 北条麻妃视频在线观看 |