oracle多表連線

2021-08-25 02:13:06 字數 1883 閱讀 3158

多表連線:

查詢的一種,資料**不再是單一的乙個表,我們可以重多個表中提取相關聯的資料,比如,從emp和dept表中找出人員 所在的部門名稱,----多個表來聯合查詢

1.查詢的時候,可以from多個表

select * from emp,dept

這樣會產生乙個笛卡爾集

表示:兩個表任何組合的結果

2.需求:取關聯資料

我的部門20號,我想要20號部門的名稱====連線條件

select emp.ename,dept.dname from emp,dept where emp.deptno=dept.deptno

3.語法格式:

select 字段 from 表1,表2 where 表1.列=表2.列

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

當然,你可以為表定義乙個別名,但是不能使用as(字段重新命名可以使用)

不同的連線條件可以使用and或or

select empno,ename,d.deptno,dname,e.sal from emp e,dept d where e.deptno=d.deptno and sal>1600

4.使用不等值連線

連線條件:乙個表中的記錄,在另乙個表中能夠找到匹配的記錄即可

select e.*,g.grade from emp e,salgrade g where e.sal between g.losal and g.hisal

5.外連線:把不滿足條件的資料顯示出來

select * from emp e,dept d where e.deptno=d.deptno(+)

外連線可以在左表,也可以在右表

6.自連線

從同乙個表中聯合查詢

select e.ename,p.ename from emp e,emp p where e.mgr=p.empno

-----sql1999:

7.交叉連線:

其結果是笛卡爾集,是沒加任何條件所產生出來的資料集合

8.自然連線:預設情況下,以兩個表中有相同名稱的列來進行連線查詢

select * from emp natural join dept

其效果相當於

select * from emp,dept where emp.deptno=dept.deptno

9.使用using子句來查詢

select * from emp join dept using(deptno)

10.使用on子句

使用on來指定連線具體條件

select * from emp join dept on  emp.deptno=dept.deptno and emp.deptno=20

多個表連線查詢

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

from emp e join dept d on e.deptno=d.deptno

join salgrade s on e.sal between s.losal and s.hisal

11.外連線:

與內連線的區別:

內連線*****===查詢條件相等的記錄(能夠匹配的)

外連線*****===條件相等 的+沒匹配的

select * from emp e left outer join dept d on e.deptno=d.deptno

select * from emp e right outer join dept d on e.deptno=d.deptno

select * 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 多表連線

通過連線條件把相關表關聯起來 select from emp n個表相連會有n 1個關聯關係,先寫關聯條件,再寫限制條件 為什麼會產生笛卡爾積 沒有連線條件會產生笛卡爾積 select emp.ename,emp.empno,dept.deptno,dept.dname from emp,depts...