国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

詳解Oracle多種表連接方式

數據庫 Oracle
本文將介紹的是Oracle數據庫中的多種表連接方式,包括內連接、外連接、自連接等等。希望對大家有所幫助。

1. 內連接(自然連接)

2. 外連接

(1)左外連接 (左邊的表不加限制)

(2)右外連接(右邊的表不加限制)

(3)全外連接(左右兩表都不加限制)

3. 自連接(同一張表內的連接)

SQL的標準語法:

  1. select table1.column,table2.column 
  2. from table1 [inner | left | right | full ] join table2 on table1.column1 = table2.column2; 

inner join 表示內連接;
left join表示左外連接;
right join表示右外連接;
full join表示完全外連接;
on子句 用于指定連接條件。

注意:

如果使用from子句指定內、外連接,則必須要使用on子句指定連接條件;

如果使用(+)操作符指定外連接,則必須使用where子句指定連接條件。

一. 內連接(Inner Join/Join)

1.1  Inner Join

Inner join邏輯運算符返回滿足***個(頂端)輸入與第二個(底端)輸入聯接的每一行。這個和用select查詢多表是一樣的效果,所以內連接用的很少。
還有一點要說明的就是Join 默認就是inner join。 所以我們在寫內連接的時候可以省略inner 這個關鍵字。

1.2 下面舉例來說明內連接:

1.2.1 先創建2張測試表并插入數據:

  1. SQL> select * from dave;  
  2. ID  NAME 
  3. ---------- ----------  
  4. 1  dave  
  5. 2  bl  
  6. 1  bl  
  7. 2  dave  
  8.  
  9.  
  10. SQL> select * from bl;  
  11. ID  NAME 
  12. ---------- ----------  
  13. 1  dave  
  14. 2  bl 

1.2.3 用內鏈接進行查詢:

  1. SQL> Select a.id,a.name,b.name from dave a inner join bl b on a.id=b.id;   -- 標準寫法  
  2. ID NAME       NAME 
  3. ---------- ---------- ----------  
  4. 1 dave       dave  
  5. 2 bl         bl  
  6. 1 bl         dave  
  7. 2 dave       bl  
  8.  
  9.  
  10. SQL> Select a.id,a.name,b.name from dave a join bl b on a.id=b.id;  -- 這里省略了inner 關鍵字  
  11. ID NAME       NAME 
  12. ---------- ---------- ----------  
  13. 1 dave       dave  
  14. 2 bl         bl  
  15. 1 bl         dave  
  16. 2 dave       bl  
  17.  
  18.  
  19. SQL> Select a.id,a.name,b.name from dave a,bl b where a.id=b.id;  -- select 多表查詢  
  20. ID NAME       NAME 
  21. ---------- ---------- ----------  
  22. 1 dave       dave  
  23. 2 bl         bl  
  24. 1 bl         dave  
  25. 2 dave       bl 

從這三個SQL 的結果我們也可以看出,他們的作用是一樣的。

1.3 自然連接(Natural join)

自然連接是在兩張表中尋找那些數據類型和列名都相同的字段,然后自動地將他們連接起來,并返回所有符合條件按的結果。

先看一下自然連接的例子:

  1. SQL> Select id,name from dave a natural join bl b;  
  2. ID NAME 
  3. ---------- ----------  
  4. 1 dave  
  5. 2 bl 

這里我們并沒有指定連接的條件,實際上oracle為我們自作主張的將,dave表中的id和name字段與bl表中的id和name字段進行了連接。也就是實際上相當于

  1. SQL> Select dave.id,bl.name 
  2. From dave join bl on dave.id = bl.id and dave.name=bl.name;  
  3. ID NAME 
  4. ---------- ----------  
  5. 1 dave  
  6. 2 bl 

因此,我們也可以將自然連接理解為內連接的一種。

有關自然連接的一些注意事項:

(1).如果做自然連接的兩個表的有多個字段都滿足有相同名稱和類型,那么他們會被作為自然連接的條件。

(2).如果自然連接的兩個表僅是字段名稱相同,但數據類型不同,那么將會返回一個錯誤。

二. 外連接(Outer Join)

outer join則會返回每個滿足***個(頂端)輸入與第二個(底端)輸入的聯接的行。它還返回任何在第二個輸入中沒有匹配行的***個輸入中的行。外連接分為三種: 左外連接,右外連接,全外連接。 對應SQL:LEFT/RIGHT/FULL OUTER JOIN。 通常我們省略outer 這個關鍵字。 寫成:LEFT/RIGHT/FULL JOIN。

在左外連接和右外連接時都會以一張表為基表,該表的內容會全部顯示,然后加上兩張表匹配的內容。 如果基表的數據在另一張表沒有記錄。 那么在相關聯的結果集行中列顯示為空值(NULL)。

對于外連接, 也可以使用“(+) ”來表示。 關于使用(+)的一些注意事項:

1.(+)操作符只能出現在where子句中,并且不能與outer join語法同時使用。

2. 當使用(+)操作符執行外連接時,如果在where子句中包含有多個條件,則必須在所有條件中都包含(+)操作符

3.(+)操作符只適用于列,而不能用在表達式上。

4.(+)操作符不能與or和in操作符一起使用。

5.(+)操作符只能用于實現左外連接和右外連接,而不能用于實現完全外連接。 

在做實驗之前,我們先將dave表和bl里加一些不同的數據。 以方便測試。

  1. SQL> select * from bl;  
  2.         ID NAME 
  3. ---------- ----------  
  4.          1 dave  
  5.          2 bl  
  6.          3 big bird  
  7.          4 exc  
  8.          9 懷寧  
  9. SQL> select * from dave;  
  10.         ID NAME 
  11. ---------- ----------  
  12.          8 安慶  
  13.          1 dave  
  14.          2 bl  
  15.          1 bl  
  16.          2 dave  
  17.          3 dba  
  18.          4 sf-express  
  19.          5 dmm 

2.1 左外連接(Left outer join/ left join)

left join是以左表的記錄為基礎的,示例中Dave可以看成左表,BL可以看成右表,它的結果集是Dave表中的數據,在加上Dave表和BL表匹配的數據。換句話說,左表(Dave)的記錄將會全部表示出來,而右表(BL)只會顯示符合搜索條件的記錄。BL表記錄不足的地方均為NULL.

示例:

  1. SQL> select * from dave a left join bl b on a.id = b.id;  
  2.        ID NAME               ID NAME 
  3. --------- ---------- ---------- ----------  
  4.         1 bl                  1 dave  
  5.         1 dave                1 dave  
  6.         2 dave                2 bl  
  7.         2 bl                  2 bl  
  8.         3 dba                 3 big bird  
  9.         4 sf-express          4 exc  
  10.         5 dmm                             -- 此處B表為null,因為沒有匹配到  
  11.         8 安慶                             -- 此處B表為null,因為沒有匹配到  
  12.  
  13. SQL> select * from dave a left outer join bl b on a.id = b.id;  
  14.         ID NAME               ID NAME 
  15. ---------- ---------- ---------- ----------  
  16.          1 bl                  1 dave  
  17.          1 dave                1 dave  
  18.          2 dave                2 bl  
  19.          2 bl                  2 bl  
  20.          3 dba                 3 big bird  
  21.          4 sf-express          4 exc  
  22.          5 dmm  
  23.          8 安慶  

用(+)來實現, 這個+號可以這樣來理解: + 表示補充,即哪個表有加號,這個表就是匹配表。所以加號寫在右表,左表就是全部顯示,故是左連接。

  1. SQL> Select * from dave a,bl b where a.id=b.id(+);    -- 注意: 用(+) 就要用關鍵字where  
  2.        ID NAME               ID NAME 
  3. ---------- ---------- ---------- ----------  
  4.          1 bl                  1 dave  
  5.          1 dave                1 dave  
  6.          2 dave                2 bl  
  7.          2 bl                  2 bl  
  8.          3 dba                 3 big bird  
  9.          4 sf-express          4 exc  
  10.          5 dmm  
  11.          8 安慶  

2.2 右外連接(right outer join/ right join)

和left join的結果剛好相反,是以右表(BL)為基礎的, 顯示BL表的所以記錄,在加上Dave和BL 匹配的結果。 Dave表不足的地方用NULL填充.

示例:

  1. SQL> select * from dave a right join bl b on a.id = b.id;  
  2.         ID NAME               ID NAME 
  3. ---------- ---------- ---------- ----------  
  4.          1 dave                1 dave  
  5.          2 bl                  2 bl  
  6.          1 bl                  1 dave  
  7.          2 dave                2 bl  
  8.          3 dba                 3 big bird  
  9.          4 sf-express          4 exc  
  10.                                9 懷寧    --此處左表不足用Null 填充 

已選擇7行。

  1. SQL> select * from dave a right outer join bl b on a.id = b.id;  
  2.         ID NAME               ID NAME 
  3. ---------- ---------- ---------- ----------  
  4.          1 dave                1 dave  
  5.          2 bl                  2 bl  
  6.          1 bl                  1 dave  
  7.          2 dave                2 bl  
  8.          3 dba                 3 big bird  
  9.          4 sf-express          4 exc  
  10.                                9 懷寧  --此處左表不足用Null 填充 

已選擇7行。  

用(+)來實現, 這個+號可以這樣來理解: + 表示補充,即哪個表有加號,這個表就是匹配表。所以加號寫在左表,右表就是全部顯示,故是右連接。

  1. SQL> Select * from dave a,bl b where a.id(+)=b.id;  
  2.         ID NAME               ID NAME 
  3. ---------- ---------- ---------- ----------  
  4.          1 dave                1 dave  
  5.          2 bl                  2 bl  
  6.          1 bl                  1 dave  
  7.          2 dave                2 bl  
  8.          3 dba                 3 big bird  
  9.          4 sf-express          4 exc  
  10.                               9 懷寧  

2.3 全外連接(full outer join/ full join)

左表和右表都不做限制,所有的記錄都顯示,兩表不足的地方用null 填充。 全外連接不支持(+)這種寫法。

示例:

  1. SQL> select * from dave a full join bl b on a.id = b.id;  
  2.         ID NAME               ID NAME 
  3. ---------- ---------- ---------- ----------  
  4.          8 安慶  
  5.          1 dave                1 dave  
  6.          2 bl                  2 bl  
  7.          1 bl                  1 dave  
  8.          2 dave                2 bl  
  9.          3 dba                 3 big bird  
  10.          4 sf-express          4 exc  
  11.          5 dmm  
  12.                                9 懷寧 

已選擇9行。

  1. SQL> select * from dave a full outer join bl b on a.id = b.id;  
  2.         ID NAME               ID NAME 
  3. ---------- ---------- ---------- ----------  
  4.          8 安慶  
  5.          1 dave                1 dave  
  6.          2 bl                  2 bl  
  7.          1 bl                  1 dave  
  8.          2 dave                2 bl  
  9.          3 dba                 3 big bird  
  10.          4 sf-express          4 exc  
  11.          5 dmm  
  12.                                9 懷寧 

已選擇9行。

三. 自連接

自連接(self join)是SQL語句中經常要用的連接方式,使用自連接可以將自身表的一個鏡像當作另一個表來對待,從而能夠得到一些特殊的數據。

示例:

在oracle的scott的schema中有一個表是emp。在emp中的每一個員工都有自己的mgr(經理),并且每一個經理自身也是公司的員工,自身也有自己的經理。

下面我們需要將每一個員工自己的名字和經理的名字都找出來。這時候我們該怎么做呢?

如果我們有兩張這樣的表分別教worker和mgr,那么我們就很好寫SQL語句。

Select worker.name,

Mgr.name

From worker,mgr

Where worker.id = mgr.id;

但現在我們只有一張emp表。所以我們可以采用自連接。自連接的本意就是將一張表看成多張表來做連接。我們可以這樣來寫SQL語句:

  1. SQL> select work.ename worker,mgr.ename  manager from scott.emp work, scott.emp mgr  
  2.   2  where work.mgr = mgr.empno(+)  
  3.   3  order by work.ename;  
  4. WORKER     MANAGER  
  5. ---------- ----------  
  6. ADAMS      SCOTT  
  7. ALLEN      BLAKE  
  8. BLAKE      KING  
  9. CLARK      KING  
  10. FORD       JONES  
  11. JAMES      BLAKE  
  12. JONES      KING  
  13. KING                                  --此處右表不足用Null 填充  
  14. MARTIN     BLAKE  
  15. MILLER     CLARK  
  16. SCOTT      JONES  
  17. SMITH      FORD  
  18. TURNER     BLAKE  
  19. WARD       BLAKE 

已選擇14行。

【編輯推薦】

  1. Oracle 數據集成的實際解決方案
  2. 對Oracle Raw常見類型的解釋
  3. Oracle歸檔模式的相關切換的實際操作步驟
  4. Oracle數據庫的啟用與關閉的歸檔模式
  5. Oracle修改字段類型2種方案介紹
責任編輯:彭凡 來源: CSDN
相關推薦

2025-01-03 16:27:35

SpringBoot代碼打包

2021-08-06 18:37:50

SQL表連接方式

2009-07-23 09:31:56

數據庫表連接方式

2015-07-22 17:16:53

Oracle表連接

2025-07-08 07:15:00

Spring配置多種方式

2024-10-15 16:41:35

2009-11-24 17:20:48

Oracle查看用戶表

2009-11-12 15:48:01

Oracle表連接

2017-06-13 10:30:20

oracle連接命名

2011-08-18 17:18:02

Oracle Spat

2011-03-25 09:05:02

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

2009-06-17 13:53:57

Spring.jar

2010-03-17 17:41:28

云計算

2009-04-29 16:05:23

Oracle連接輸出SQL

2010-04-01 09:11:05

Oracle函數

2010-10-26 16:07:45

連接oracle數據庫

2011-05-20 09:55:26

Oracle連接

2010-04-06 11:02:30

Oracle 數據庫

2010-01-27 13:37:05

Oracle臨時表

2011-07-04 10:33:45

臨時表空間排序
點贊
收藏

51CTO技術棧公眾號

国产麻豆视频一区| 中文字幕精品在线视频| 国产精品久久中文字幕| av成人黄色| 91精品国产综合久久久久久蜜臀| 999色成人| 日韩精品免费一线在线观看| 日本激情视频在线观看| 亚洲成a人片在线观看中文| 99热免费在线观看| 成人晚上爱看视频| 永久免费在线看片视频| 日韩av二区在线播放| 国产精品日韩一区二区| 欧美精品三区| 99在线观看视频| 欧美在线精品一区| 麻豆精品少妇| 国产999在线观看| 8888四色奇米在线观看| 国产精品毛片大码女人| 人人做人人澡人人爽欧美| 久久久精品日韩| 狠狠躁狠狠躁视频专区| 欧美日韩激情一区二区| 91九色在线播放| 日韩视频在线你懂得| 天天影视色香欲综合网天天录日日录| 中文字幕精品在线不卡| 九色porny在线观看| 中文字幕乱码一区二区免费| 亚洲免费不卡| 美女视频免费一区| wwwww在线观看免费视频| 亚洲精品国产欧美| 欧美精品中文字幕亚洲专区| www国产亚洲精品| 国产日本欧美一区二区| 欧美捆绑视频| 久久久久一区二区三区四区| 成人51免费| 成人免费视频a| 亚洲天堂av一区| ts人妖交友网站| 亚洲黄色小视频| 欧美一区国产| 日韩av不卡在线| 激情亚洲成人| 久久久天堂国产精品女人| 日韩欧美中文字幕在线视频| 国产日产欧美一区二区| 国产成人激情视频| 韩国精品久久久| 九色视频在线观看免费播放| 琪琪一区二区三区| 国产在线一区二区三区播放| 中文字幕在线免费不卡| 日韩午夜视频在线| 麻豆传媒视频在线| 婷婷六月综合网| 性爱视频在线播放| xvideos亚洲人网站| 四虎5151久久欧美毛片| 亚洲999一在线观看www| 日本亚洲天堂网| 三级a三级三级三级a十八发禁止| 日韩欧美精品在线观看| www成人在线视频| 国产精品久久久久久久7电影 | 国产伦精品一区二区三区视频青涩| 缅甸午夜性猛交xxxx| 亚洲在线视频网站| 第四色日韩影片| 5566日本婷婷色中文字幕97| 亚洲在线播放| 五月婷婷丁香色| 日韩欧美一卡二卡| 国模精品一区二区三区色天香| 93在线视频精品免费观看| 亚欧精品在线| 亚洲欧美欧美一区二区三区| 欧美日韩色网| 日本精品免费观看| 寂寞少妇一区二区三区| x88av蜜桃臀一区二区| 亚洲精品xxxx| 一区二区三区午夜视频| 各处沟厕大尺度偷拍女厕嘘嘘| 欧美日韩免费一区| 亚洲午夜国产成人| 日韩福利视频| 色综合视频一区二区三区高清| 国产视频一区二区在线播放| 日本一区免费| 色综合 综合色| 99精品中文字幕在线不卡| 亚洲 国产 欧美一区| 亚洲天堂精品视频| 日韩福利一区| 欧美资源一区| 午夜久久久久久| 亚洲精品福利| 大片在线观看网站免费收看| 欧美日韩在线播放三区四区| 日韩美脚连裤袜丝袜在线| 成人精品视频在线播放| 日韩午夜中文字幕| 国产精品mv在线观看| 中文乱码字幕高清在线观看| 欧美激情精品久久久| 成人一区二区三区视频在线观看| 四虎影院观看视频在线观看| 97人人模人人爽视频一区二区| 亚洲女同女同女同女同女同69| av日韩一区| 日韩成人三级视频| 日韩成人黄色av| 蜜臀99久久精品久久久久久软件| 国产日韩精品在线看| 国产精品久久久久久久av大片| 欧美激情一区二区三区| 国产精品一区二区精品| 久久人人爽人人爽人人av| 亚洲精品v欧美精品v日韩精品| 在线成人黄色| av网站在线免费观看| 国产精品10p综合二区| 日韩欧美成人区| 欧美精品偷拍| 97电影在线观看| 国模一区二区三区私拍视频| 欧美系列在线观看| 亚洲青色在线| 日韩伦理av| 青青草原国产免费| 亚洲欧美在线一区二区| 国产98色在线|日韩| 免费观看成人性生生活片| 色婷婷777777仙踪林| 亚洲日韩第一页| 国产福利不卡视频| 成人在线观看免费视频| 亚洲一区二区国产| 免费精品视频在线| 阿v视频在线观看| 二级片在线观看| 亚洲欧美另类人妖| www国产精品av| 精品一区二区三区四区五区| 成人免费毛片播放| 国模极品一区二区三区| 一区二区高清免费观看影视大全 | 欧美一区电影| 中文字幕在线观| 国产精品一区而去| 精品国产乱码91久久久久久网站| 久久精品国产精品亚洲精品| 在线免费看h| 日韩视频免费播放| 97热在线精品视频在线观看| 亚洲影院理伦片| 亚洲天堂偷拍| 欧美美女日韩| 成人软件网18免费视频| 91超碰在线免费观看| 日韩欧美自拍偷拍| 26uuu国产一区二区三区| 国产综合久久久| 亚洲wwwww| 丰满少妇在线观看| 91免费精品国偷自产在线| 日韩免费性生活视频播放| 国产成人免费视频| 午夜精品福利影院| 麻豆网站在线看| 免费看黄色a级片| 4438全国亚洲精品在线观看视频| 一本一道久久a久久精品| 免费黄网站欧美| 国产精品igao视频网网址不卡日韩| 麻豆av观看| 日韩精品欧美在线| 性欧美亚洲xxxx乳在线观看| 欧美欧美午夜aⅴ在线观看| 成人黄色国产精品网站大全在线免费观看 | 日韩电影大片中文字幕| 91久色porny| 色综合天天爱| 超碰97免费在线| 亚洲综合色在线观看| 久久精品一区二区三区不卡免费视频| 有码中文亚洲精品| 日韩欧美在线一区| caoporn国产一区二区| 亚洲最新色图| 91麻豆精品| 亚洲精品白浆| 视频在线不卡| 久久久久久久久久久久91| 亚洲午夜精品一区二区三区|