Oracle 多表連線

2021-10-02 05:17:44 字數 2626 閱讀 7994

--通過連線條件把相關表關聯起來

select * from emp;

--n個表相連會有n-1個關聯關係,先寫關聯條件,再寫限制條件

--為什麼會產生笛卡爾積:

--沒有連線條件會產生笛卡爾積

select emp.ename,emp.empno,dept.deptno,dept.dname

from emp,dept

select emp.empno,emp.ename,emp.deptno,dept.deptno,dept.dname

from emp,dept

where emp.deptno=dept.deptno;

select e.ename,e.deptno

from emp e,dept d

where e.deptno=d.deptno;

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

from emp e,salgrade s

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

--(+):+號的一邊產生乙個萬能行,是由空值組成的

--基準表:+的對立面是基準表

select e.ename,e.deptno,d.deptno,d.dname

from emp e,dept d

where e.deptno(+)

=d.deptno;(dept為基準表)

--基準表中的資料全部顯示,另一張表中的資料和基準表中的資料匹配,匹配不上則用空值填充

--連線條件

--員工的經理編號=經理的員工編號

select worker.ename,manager.ename

from emp worker,emp manager

where worker.mgr=manager.empno;

select  e.empno,e.deptno,d.deptno,d.dname

from emp e

cross

join dept d;

--產生笛卡爾積,不可取

--兩個表中要有相同列

--列的資料型別保持一致

--是等值連線

select deptno,e.ename

from emp e

natural

join dept d;

--注意:共有的列不能用限定詞

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

from emp e join dept d using

(deptno)

--using指定的列是兩個表中具有相同名稱和資料型別的列

select e.eanme,e.deptno,d.deptno,d.dname

from emp e

join dept d

on(e.deptno=d.deptno)

;

--以左表為基準,右表和左表匹配,匹配不上用空值填充

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

from emp e

left

outer

join dept d

on(e.deptno=d.deptno)

;--emp為左表,沒有部門的員工顯示出來

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

from emp e

left

join dept d

on(e.deptno=d.deptno)

;--效果無區別,書法上有區別

--以右表為基準,左表和右表匹配,匹配不上用空值填充

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

from emp e

right

outer

join dept d

on(e.deptno=d.deptno)

;--dept為右表,沒有員工的部門顯示出來

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

from emp e

right

join dept d

on(e.deptno=d.deptno)

;

--在等值連線的基礎上,兩個表中的資料都顯示

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

from emp e

full

outer

join dept d

on(e.deptno=d.deptno)

;

Oracle 多表連線

oracle 多表連線 oracle優化器會自動選擇以下三種方式的一種執行表連線,但在資料環境上配合強化選擇合適的方式或強制使用某種方式是sql優化的需要 nested loop 對於被連線的資料子集較小的情況,nested loop連線是個較好的選擇。nested loop就是掃瞄乙個表,每讀到一...

Oracle 多表連線

多表連線 第五章 1.select from emp 1.寫乙個查詢,顯示所有員工姓名,部門編號,部門名稱。select e.ename e.deptno d.dname from emp e,dept d where e.deptno d.deptno select e.ename e.deptn...

oracle多表連線

多表連線 查詢的一種,資料 不再是單一的乙個表,我們可以重多個表中提取相關聯的資料,比如,從emp和dept表中找出人員 所在的部門名稱,多個表來聯合查詢 1.查詢的時候,可以from多個表 select from emp,dept 這樣會產生乙個笛卡爾集 表示 兩個表任何組合的結果 2.需求 取關...