--通過連線條件把相關表關聯起來
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.需求 取關...