oracle的連線查詢

2021-09-01 18:56:50 字數 1980 閱讀 6492

連線查詢指基於兩個或兩個以上表或檢視的查詢,在實際應用中,可能僅僅查詢單個表無法滿足應用程式的實際需求,例如顯示sales部門位置以及雇員名,這種情況就需要進行連線查詢(dept和emp表)。

☆相等連線:用 = 指定連線條件

select e.name,e.sal,d.dname from emp e,dept d

where e.deptno = d.deptno and d.deptno=10;

☆不等連線:其實是between...and...

select a.ename,a.sal,b.grade from emp a,salgrade b

where a.sal between b.losal and b.hisal;

☆自連線

指同一張表之間的連線查詢,主要用在自參照表上顯示上下級關係或者層次關係。(自慘表指在不同列之間具有參照關係或主從關係的表),例如,emp表包含有empno(雇員號)和mgr(管理者號),二者就有參照關係。

select manager.enamec from emp manager,emp worker

where manager.empno = worker.mgr

and worker.ename='blake';

☆內連線和外連線

1.內連線,預設情況下,在執行連線查詢時如果沒有指定任何連線操作符,都屬於內連線

select a.dname,b.ename from dept a,emp b

where a.deptno=b.deptno and a.deptno=10;

另外,通過在from子句中指定inner join也可以指定內連線

select adname,b.ename from dept a inner join emp b

on a.deptno = b.deptno and a.deptno=10;

如果主表的主鍵列和從表的外部鍵列名相同,那麼還可以使用natural join 關鍵字自動執行內連線操作

select dname,ename from dept natural join emp;
2.左外連線

左外連線是通過指定left[outer]join選項來實現的。不僅會返回滿足連線條件的所有記錄,而且還會返回不滿足連線條件的連線操作符左別表的其他行。

select a.dname,b.ename from dept a left join emp b

on a.deptno=b.deptno and a.deptno=10;

3.右外連線

跟左外連線一樣

4.完全外連線

通過full[outer]join選項來實現的,不僅會返回滿足連線條件的所有行,而且還會返回不滿足連線條件的所有其他行。

select a.dname,b.ename from dept a full join emp b

on a.deptno=b.deptno and a.deptno=10;

5.使用(+)操作符

當執行外連線時,儘管可以用連線操作符(+)來完成,但還是建議用outer join執行外連線。

1.使用(+)操作符執行左外連線

select a.dname,b.ename from dept a,emp b

where a.deptno=b.deptno(+)

and b.deptno(+)=10;

2.使用(+)操作符執行右外連線

select a.dname,b.ename from dept a,emp b

where a.deptno(+)=b.deptno and a.deptno(+)=10

order by a.dname;

Oracle的連線查詢

連線查詢指基於兩個或兩個以上表或檢視的查詢,在實際應用中,可能僅僅查詢單個表無法滿足應用程式的實際需求,例如顯示sales部門位置以及雇員名,這種情況就需要進行連線查詢 dept和emp表 相等連線 用 指定連線條件 select e.name,e.sal,d.dname from emp e,de...

oracle的連線查詢

oracle的連線查詢分如下幾種 內連線 inner join 外連線 全連線 full join 左連線 left join 右連線 right join 交叉聯接 cross join 外連線與內連線不一樣,外連線返回的查詢結果中不僅包含符合條件的行,還包括左表 左外連線 右表 右外連線 或者兩...

oracle查詢連線

select from emp select from dept 左連線 1 查詢與左邊表dept 4 相關聯的資料,如deptno 40在右邊沒有對應的資料,則顯示為空 select from dept left join emp on dept.deptno emp.deptno 查詢與左邊表相...