Oracle數據庫——多表查詢、層次查詢

一、什麼是多表查詢?

從多個表中獲取數據
在這裏插入圖片描述

二、笛卡爾集

在這裏插入圖片描述

三、連接的類型

1、等值連接

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

select e.empno,e.ename,e.sal,d.dname
from emp e, dept d
where e.deptno = d.deptno; 

在這裏插入圖片描述

2、不等值連接

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

select e.empno,e.ename,e.sal,s.grade
from emp e, salgrade s
where e.sal between s.losal and s.hisal;

在這裏插入圖片描述

3、外連接

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

select d.deptno 部門號, d.dname 部門名稱, count(e.empno) 人數
from emp e, dept d
where e.deptno = d.deptno
group by d.deptno, d.dname;

在這裏插入圖片描述

  • 核心:通過外連接,把對於連接條件不成立的記錄,仍然包含在最後的結果中

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

select d.deptno 部門號,d.dname 部門名稱, count(e.empno) 人數
from emp e, dept d
where e.deptno = d.deptno(+)
group by d.deptno, d.dname;

在這裏插入圖片描述

  • 右外連接:當連接條件不成立的時候,等號右邊的表仍然被包含
select d.deptno 部門號,d.dname 部門名稱, count(e.empno) 人數
from emp e, dept d
where e.deptno(+) = d.deptno
group by d.deptno, d.dname;

在這裏插入圖片描述

4、自連接

示例:按員工姓名和員工的老闆姓名

select e.ename 員工姓名, b.ename 老闆姓名
from emp e, emp b 
where e.mgr = b.empno;

在這裏插入圖片描述

  • 核心:通過別名,將同一張表視爲多張表

  • 自連接存在的問題:不適合操作大表

  • 解決辦法:層次查詢


四、層次查詢

  • 某些情況下,層次查詢可以替代自連接

  • 本質上,是一個單表查詢
    在這裏插入圖片描述

層次查詢的原理:
在這裏插入圖片描述

select level, empno, ename, sal, mgr
from emp
connect by prior empno = mgr
start with mgr is null
order by level;

在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章