oracle多表查詢

2021-09-24 04:45:27 字數 1759 閱讀 5201

多表查詢基本就是對笛卡爾積做篩選

型別:等值連線(easy)

不等值連線(easy)

外連線自連線

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

from emp e, dept d

where e.deptno = d.deptno

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

from emp e,salgrade s

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

例子:按部門統計員工資訊:部門號 部門名稱 人數

錯誤,沒有所有部門(沒有人的部門沒有顯示):

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

from emp e,dept d

where e.deptno=d.deptno

group by d.deptno,d.dname;

正確:

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

from emp e,dept d

where e.deptno(+)=d.deptno

group by d.deptno,d.dname;

左外連線:where e.deptno=d.deptno不成立的時候,等候左邊的表仍然包含在最後的結果中

寫法:where e.deptno=d.deptno(+)

右外連線:where e.deptno=d.deptno不成立的時候,等候右邊的表仍然包含在最後的結果中

寫法:where e.deptno(+)=d.deptno

總結:要全部顯示的表不寫加號

通過表的別名,講同一張表視為多張表

例子:查詢員工名字 老闆名字

select e.ename 員工姓名,b.ename 老闆姓名

from emp e,emp b

where e.mgr=b.empno;

問題:這也是相當於在笛卡爾積上做篩選,驗證:

select count(*)

from emp e,emp b;

結果時表記錄數的平方

如果表記錄有個一億條,那麼一億的平方。。。。

所以,自連線不適合操作大表

接下來,引入層次查詢

相當於樹,如下圖:

level:偽列

prior:上一層,這裡表示上一層的員工列等於這一層的老闆列

執行結果如下:

Oracle 多表查詢

sql 外連線 sql 按部門統計員工人數 部門號 部門名稱 人數 sql select d.deptno,d.dname,count e.empno 2 from dept d,emp e 3 where d.deptno e.deptno 4 group by d.deptno,d.dname ...

Oracle 多表查詢

等值和不等值連線查詢 為了避免笛卡爾集,可以在 where 加入有效的連線條件。oracle 連線多表查詢 在 where 子句中寫入連線條件。在表中有相同列時,在列名之前加上表名字首 select table1.column,table2.column from table1,table2 whe...

oracle 多表查詢

多表查詢 多表查詢,又稱表聯合查詢,即一條sql語句涉及到的表有多張,資料通過特定的連線進行聯合顯示.笛卡爾積 在數學中,兩個集合x和y的笛卡尓積 cartesian product 又稱直積,表示為x y.假設集合a 集合b 則兩個集合的笛卡爾積為。在資料庫中,如果直接查詢倆張表,那麼其查詢結果就...