最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

oracle基礎教程之多表關(guān)聯(lián)查詢

 更新時間:2023年12月23日 15:04:13   作者:geminigoth  
在實際開發(fā)中每個表的信息都不是獨立的,而是若干個表之間存在一定的聯(lián)系,如果用戶查詢某一個表的信息時,可能需要查詢關(guān)聯(lián)表的信息,這就是多表關(guān)聯(lián)查詢,這篇文章主要給大家介紹了關(guān)于oracle基礎教程之多表關(guān)聯(lián)查詢的相關(guān)資料,需要的朋友可以參考下

一、概述

在實際應用系統(tǒng)開發(fā)中會設計多個數(shù)據(jù)表,每個表的信息不是獨立存在的,而是若干個表之間的信息存在一定的關(guān)系,當用戶查詢某一個表的信息時,很可能需要查詢關(guān)聯(lián)數(shù)據(jù)表的信息,這就是多表關(guān)聯(lián)查詢。SELECT語句自身是支持多表關(guān)聯(lián)查詢的,多表關(guān)聯(lián)查詢要比單表查詢復雜的多。在進行多表關(guān)聯(lián)查詢時,可能會涉及表別名、內(nèi)連接、外連接、自然連接和交叉連接等概念,下面將對這些內(nèi)容進行講解。

二、表的別名

在多表關(guān)聯(lián)查詢時,如果多個表之間存在同名的列,則必須使用表名來限定列的引用。例如,在SCOTT模式中,DEPT表和EMP表都有DEPTNO列,當用戶使用該列關(guān)聯(lián)查詢兩個表時,就需要通過指定表名來區(qū)分這兩個列的歸屬。但是,隨著查詢變得越來越復雜,語句就會因為每次限定列必須輸入表名而變得冗長。對于這種情況,SQL提供了設定表別名的機制,使用簡短的表別名可以代替原有較長的表名稱,這樣就大大縮減語句的長度。

【例2.1】在SCOTT模式下,通過DEPTNO(部門號)列來關(guān)聯(lián)EMP表和DEPT表,并檢索這兩個表中相關(guān)字段的信息,代碼及運行結(jié)果如下:

select e.empno 員工編號,e.ename 員工姓名,d.dname 部門 from dept d,emp e where d.deptno = e.deptno and e.job = 'MANAGER';

在上面的SELECT語句中,F(xiàn)ROM子句最先執(zhí)行,然后才是WHERE子句和SELECT子句,這樣在FROM子句中指定表的別名后,當需要限定引用列時,其他所有子句都可以使用表的別名。

另外,還需要注意一點,一旦在FROM子句中為表指定了別名,則必須在剩余的子句中都是用表的別名,而不允許再使用原來的表名稱,否則,將出現(xiàn)【例2.2】錯誤提示。

【例2.2】 

select e.empno 員工編號,e.ename 員工姓名,d.dname 部門 from dept d,emp e where d.deptno = e.deptno and emp.job = 'MANAGER';

 總結(jié):

        1、表的別名在FROM子句中定義,別名放在表名之后,之間用空格隔開。

        2、別名一經(jīng)定義,在整個查詢語句中就只能使用表的別名而不能在使用表名。

        3、表的別名只在所定義的查詢語句中有效。

        4、應該選擇有意義的別名,表的別名最長為30個字符,但越短越好。

三、內(nèi)連接

內(nèi)連接是一種常用的多表關(guān)聯(lián)查詢方式,一般使用關(guān)鍵字INNER JOIN來實現(xiàn)。其中INNER關(guān)鍵字可以省略,當只使用JOIN關(guān)鍵字時,語句默認表示內(nèi)連接操作。在使用內(nèi)連接查詢多個表時,必須在FROM子句之后定義一個ON子句,ON子句指定內(nèi)連接操作列與連接條件匹配的數(shù)據(jù)行,使用比較運算符比較被連接列的值。簡單來說,內(nèi)連接就是使用JOIN指定用于連接的兩個表,使用ON指定表的連接條件。若進一步限制查詢范圍,則可以直接在后面添加WHERE子句。內(nèi)連接的語法格式如下:

SELECT columns_list
FROM table_name1 [INNER] JOIN table_name2
ON join_condition
[WHERE]
  • 其中:columns_list:字段列表
  • table_name1 和 table_name2 :兩個要實現(xiàn)內(nèi)連接的表。
  • join_condition:實現(xiàn)內(nèi)連接的條件表達式
  •  WHERE :使用where子句進一步限制查詢范圍。

【例3.1】在scott模式下,通過deptno字段來內(nèi)連接emp表和dept表,查詢dept表中部門名稱為 SALES,并檢索這兩個表中相關(guān)的字段信息。

select e.empno 員工編號,e.ename 員工姓名,d.dname 部門 
from emp e inner join dept d 
on e.deptno = d.deptno
where d.dname = 'SALES';

四、外連接

使用外連接進行多表查詢時,返回的查詢結(jié)果中只包含符合查詢條件和連接條件的數(shù)據(jù)。內(nèi)連接消除了與另一個表中的任何數(shù)據(jù)不匹配的行,而外連接擴展了內(nèi)連接的結(jié)果集,除了返回所有匹配的數(shù)據(jù)外,還會返回一部分或全部不匹配的行,這主要取決于外連接的種類。外連接通過有以下三種。

  • 左外連接:關(guān)鍵字為LEFT OUTER JOIN 或 LEFT JOIN
  • 右外連接:關(guān)鍵字為RIGHT OUTER JOIN 或 RIGHT JOIN
  • 完全外連接:關(guān)鍵字為FULL OUTER JOIN 或 FULL JOIN

與內(nèi)連接不同的是,外連接不只列出與連接條件匹配的數(shù)據(jù),還能夠列出左表(左外連接時)、右表(右外連接時)、兩個表(全部外連接時)中所有符合搜索條件的數(shù)據(jù)。

4.1 左外連接

左外連接的查詢結(jié)果中不僅包含了滿足連接條件的數(shù)據(jù),還包含左表中不滿足連接條件的數(shù)據(jù)。

【例4.1.1】首先在emp表中插入一條新數(shù)據(jù)(注意沒有為deptno和dname列插入值,即它們的值是null),然后實現(xiàn)emp表和dept表之間通過deptno列進行左外連接。

插入

insert into emp (empno,ename,job) values(9527,'EAST','SALESMAN');

查詢

select e.empno,e.ename,e.job,d.deptno,d.dname 
from emp e left join dept d
on e.deptno = d.deptno;

結(jié)果

從上面的查詢結(jié)果中可以看到,雖然新插入的數(shù)據(jù)deptno值為null,但該行記錄讓然出現(xiàn)在查詢結(jié)果中,說明左外連接的查詢結(jié)果會包含左表中不滿足“連接條件”的數(shù)據(jù)。 

4.2   右外連接

同樣道理,右外連接的查詢結(jié)果中不僅包含了滿足連接條件的數(shù)據(jù)行,而且還包含右表中不滿足連接條件的數(shù)據(jù)行。

【例4.2.1】在SCOTT模式下,實現(xiàn)emp表和dept表之間通過deptno列進行右外連接。

select e.empno,e.ename,e.job,d.deptno,d.dname
from emp e
right join dept d 
on e.deptno = d.deptno

運行結(jié)果如下

從上面的查詢結(jié)果中可以看到,雖然部門編號為40的數(shù)據(jù)行在emp表中還沒有員工記錄,但它卻出現(xiàn)在查詢結(jié)果中,這說明右外連接的查詢結(jié)果會包含由表中不滿足“連接條件”的數(shù)據(jù)行。

在外連接中也可以使用外連接的連接運算符,外連接的連接運算符為“(+)”,該連接運算符可以放在等號的左邊,也可以放在等號的右邊,但是一定要放在缺少信息的那一邊,比如放在e.deptno所在的一方。

select e.empno,e.ename,e.job,d.deptno,d.dname
from emp e,dept d
where e.deptno (+)= d.deptno

運行結(jié)果

使用(+)操作符時應注意:

1、當使用(+)操作符執(zhí)行外連接時,如果在WHERE子句中包含多個條件,則必須在所有條件中都包含(+)操作符。

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

3、(+)操作符不能與ON和IN操作符一起使用。

4.3 完全外連接

在執(zhí)行完全外連接時,Oracle會執(zhí)行一個完成的左外連接和右外連接查詢,然后將查詢結(jié)果合并,并消除重復的數(shù)據(jù)。

【例4.3.1】 在SCOTT模式下,實現(xiàn)emp表和dept表之間通過deptno列進行完全外連接。

select e.empno,e.ename,e.job,d.deptno,d.dname
from emp e
full join dept d 
on e.deptno = d.deptno

4.4 自然連接

自然連接和內(nèi)連接功能相似,自然連接是指在檢索多個表時,Oracle會將第一個表中的列與第二個表中具有相同名稱的列進行自動連接。在自然連接中,用戶不需要明確指定進行連接的列,這個任務有Oracle自動完成,自然連接使用NATURAL JOIN 關(guān)鍵字。

【4.4.1】 在emp表中檢索工資(sal字段)大于2000的記錄,并實現(xiàn)emp表與dept表的自然連接。

select empno,ename,job,dname
from emp natural join dept
where sal > 2000

由于自然連接要求表之間必須具有相同的列名稱,這樣容易在設計表時出現(xiàn)不可預知的錯誤,所以在實際應用中很少用到自然連接。另外需要注意的是,在使用自然連接時,不能為列指定限定詞(即表名或表的別名),否則Oracle會彈出“ORA-25155:NATURAL連接中使用的列不能有限定詞”的錯誤提示.

4.5 自連接

在實際應用中,用戶可能會擁有“自引用式”的外鍵。“自引用式”外鍵是指表中的一列可以使該表住建的一個外鍵。

自連接主要用在自參考表上顯示上下級關(guān)系或者層次關(guān)系。自參照表是指在同一張表的不同列之間具有參照關(guān)系活著主從關(guān)系的表。例如,emp表包含empno(雇員號)和mgr(管理員號)列,兩者之間就具有參照關(guān)系。這樣用戶就可以通過mgr列與empno列的關(guān)系,實現(xiàn)查詢某個管理者所管理的下屬員工信息。

【例4.5.1】在SCOTT模式下,查詢所有管理者所管理的下屬員工信息。

select e2.ename 上層管理者,e1.ename 下屬員工
from emp e1 
left join emp e2 
on e1.mgr = e2.empno
order by e1.mgr

4.6 交叉連接

交叉連接實際上就是不需要任務連接條件的連接,它使用CROSS JOIN關(guān)鍵字來實現(xiàn),語法格式:

select colums_list
from talble_name1 cross join table_name2

交叉連接的執(zhí)行結(jié)果是一個笛卡爾積,這種查詢結(jié)果是非常冗余的,但是可以通過WHERE子句來過濾出有用的記錄信息。

【4.6.1】在SCOTT模式下,通過交叉連接dept表和emp表,計算出查詢結(jié)果的行數(shù)。

select count(*)
from emp cross join dept

總結(jié)

到此這篇關(guān)于oracle基礎教程之多表關(guān)聯(lián)查詢的文章就介紹到這了,更多相關(guān)oracle多表關(guān)聯(lián)查詢內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • oracle中sql 正則寫法詳解

    oracle中sql 正則寫法詳解

    Oracle中使用正則表達式需先使用REGEXP_LIKE函數(shù)來匹配字符串。正則表達式的語法與一般正則表達式相似,但具體的寫法也受不同版本的Oracle環(huán)境不同,這篇文章主要介紹了oracle中sql 正則怎么寫,需要的朋友可以參考下
    2023-04-04
  • oracle常用分析函數(shù)與聚合函數(shù)的用法

    oracle常用分析函數(shù)與聚合函數(shù)的用法

    今天小編就為大家分享一篇關(guān)于oracle常用分析函數(shù)與聚合函數(shù)的用法,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2019-01-01
  • ORACLE 數(shù)據(jù)庫RMAN備份恢復

    ORACLE 數(shù)據(jù)庫RMAN備份恢復

    還原不同位置的數(shù)據(jù)庫
    2009-04-04
  • PLSQL配置遠程Oracle數(shù)據(jù)庫連接的示例代碼

    PLSQL配置遠程Oracle數(shù)據(jù)庫連接的示例代碼

    這篇文章主要介紹了PLSQL配置遠程Oracle數(shù)據(jù)庫連接的示例代碼,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-09-09
  • PLSQL安裝、漢化和激活的方法步驟實現(xiàn)

    PLSQL安裝、漢化和激活的方法步驟實現(xiàn)

    這篇文章主要介紹了PLSQL安裝、漢化和激活的方法步驟實現(xiàn),對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-09-09
  • oracle數(shù)據(jù)庫實現(xiàn)按多個字段排序

    oracle數(shù)據(jù)庫實現(xiàn)按多個字段排序

    這篇文章主要介紹了oracle數(shù)據(jù)庫實現(xiàn)按多個字段排序方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-06-06
  • PDO取Oracle lob大字段,當數(shù)據(jù)量太大無法取出的問題的解決辦法

    PDO取Oracle lob大字段,當數(shù)據(jù)量太大無法取出的問題的解決辦法

    最近,做sns的項目,用PDO連接Oracle數(shù)據(jù)庫,讀取Clob字段,當數(shù)據(jù)量非常大的時候(上萬個字符),返回空值,從網(wǎng)上也沒有查到相關(guān)的資料。自己刻苦研究加上同事幫助,終于解決了。廢話就不說了,下面把內(nèi)容貼出來。
    2009-03-03
  • Oracle如何修改當前的序列值實例詳解

    Oracle如何修改當前的序列值實例詳解

    很多時候我們都會用到oracle序列,那么我們怎么修改序列的當前值呢?下面這篇文章主要給大家介紹了關(guān)于Oracle如何修改當前的序列值的相關(guān)資料,文中通過代碼介紹的非常詳細,需要的朋友可以參考下
    2024-05-05
  • Oracle中的歸檔日志文件詳解

    Oracle中的歸檔日志文件詳解

    文章介紹了Oracle數(shù)據(jù)庫的歸檔模式設置、日志歸檔原理及管理方法,包括如何檢查歸檔狀態(tài)、配置歸檔路徑和命名格式、處理空間不足導致的掛起問題,以及歸檔日志的刪除方式(手工/ RMAN)和控制文件信息維護
    2025-08-08
  • Oracle排名函數(shù)(Rank)實例詳解

    Oracle排名函數(shù)(Rank)實例詳解

    這篇文章主要介紹了Oracle排名函數(shù)(Rank)實例詳解,需要的朋友可以參考下
    2014-06-06

最新評論

灵丘县| 会同县| 桂林市| 涟水县| 乐昌市| 喀喇沁旗| 弥渡县| 柳河县| 宝山区| 社旗县| 崇礼县| 交城县| 利辛县| 修水县| 繁昌县| 龙山县| 余干县| 凤阳县| 甘谷县| 武山县| 加查县| 灵川县| 法库县| 金昌市| 宜州市| 崇左市| 博兴县| 津市市| 北票市| 沐川县| 缙云县| 视频| 运城市| 宁远县| 鄂尔多斯市| 广德县| 吴旗县| 虎林市| 岗巴县| 彩票| 灌南县|