日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【Oracle】多表连接查询详解

發布時間:2025/3/20 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【Oracle】多表连接查询详解 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

多表查詢:按數據庫設計原則,員工表中只有部門的編號信息,部門的詳細信息會放在部門表中,這個時候我們就需要使用多表查詢的功能。

課程目標:

1、什么是多表查詢?

2、笛卡爾集。

3、等值連接。

4、不等值連接。

5、外連接。

6、自連接。

7、層次查詢。

具體內容:

1、什么是多表查詢?


2、笛卡爾集。


笛卡爾集的列數相加,行數相乘。


為了避免笛卡爾集,可以在WHERE加入有效的連接條件,如上圖所示。

在實際運行環境下面,應避免使用笛卡爾全集。

在實際的應用中,連接條件至少有一個。


3、等值連接。

示例:查詢員工信息,要求顯示員工號、姓名、月薪、部門名稱。

我們在查詢多表的時候,習慣給表起一個別名。

連接符號是“=”即等值連接。

select e.empno,e.ename,e.sal,d.dname

from emp e,dept d

where e.deptno = d.deptno;

?


4、不等值連接。

示例:查詢員工信息,要求顯示員工號、姓名、月薪、薪水的級別。

select e.empno,e.ename,e.sal,s.grade

from emp e,salgrade s

where e.sal between s.losal and s.hisal;


注意使用between/and的時候要小值在前面,大值在后面。

若違反規定,則按下圖所示,不會有查詢結果。



5、外連接。

示例:按部門統計員工人數,要求顯示部門號、部門名稱、人數。

select d.deptno 部門號,d.dname 部門名稱,count(e.empno) 人數

from emp e,dept d

where e.deptno = d.deptno

group by d.deptno,d.dname;


但是查看部門表發現,我們的部門表里面有四個部門,上圖顯示的結果僅僅只有三個部門,很明顯是不對的。


缺少了40部門,為什么上圖會漏掉這一個部門呢?

原因是部門表中存在40的部門,在員工表里面卻不存在,所以不作統計。

這個時候就需要使用我們的外連接。

核心:通過外連接,把對于連接條件不成功的記錄,仍然包含在最后的結果中。

左外連接:當連接條件不成立的時候,等號左邊的表仍然被包含。

右外連接:當連接條件不成立的時候,等號右邊的表仍然被包含。

修改之前的select語句。

右外連接:需要在“=”的左邊加上“(+)”。

select d.deptno 部門號,d.dname 部門名稱,count(e.empno) 人數

from emp e,dept d

where e.deptno(+) = d.deptno

group by d.deptno,d.dname;


如果是左外連接,需要在“=”的右邊加上“(+)”。


6、自連接。

示例:查詢員工姓名和員工的上級姓名。


select e.ename 員工姓名, b.ename 上級姓名

from emp e,emp b

where e.mgr = b.empno;

核心:通過別名,將同一張表視同為多張表。



7、層次查詢。

自連接存在的問題:

不適合操作大表:產生的笛卡爾集的大小至少是一個平方(至少兩個表)。

解決方法:層次查詢。

層次查詢是一個單表查詢,只有一個表,不存在第二個表,只有在一張表的情況下才不會產生笛卡爾集。

某些情況下,可以替代自連接,本質上,它是一個單表查詢。

示例:上述例子。



select level,empno,ename,sal,mgr

from emp

connect by prior empno = mgr

start with empno = 7839

order by 1;


還有一種形式 start ?with mgr = null;

樹的深度我們還有一個偽列:Level


思考:自連接和層次查詢的優缺點各式什么?


總結

以上是生活随笔為你收集整理的【Oracle】多表连接查询详解的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。