oracle高階查詢之連線查詢 集合運算

2021-06-19 00:37:05 字數 2472 閱讀 6947

一、集合運算

--minus補集,返回第乙個查詢結果的記錄減去第二個查詢結果的記錄後剩下的記錄

select deptno from dept minus

select deptno from emp;

--intersect交集,返回兩個查詢共有的記錄

select deptno from dept intersect

select deptno from emp;

--union並集,返回各個查詢的所有記錄,不包括重覆記錄

select deptno from dept union

select deptno from emp;

--union all並集,返回各個查詢的所有記錄,包括重覆記錄

select deptno from dept union

allselect deptno from emp;

當使用集合操作的時候,要注意:查詢所返回的列數以及列的型別必須匹配,列名可以

不同。

二、連線查詢

在 sql server 中已經學習過內聯接(inner join)、外聯接(outer join),外聯接又分為左外聯

接(left outer join)和右外聯接(right outer join)。 oracle 中對兩個表或者若干表之間的外聯接用

(+)表示。

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

例:請查詢出工資大於 2000 元的,員工姓名,部門,工作,工資。

由於部門名稱在 dept 中,其他的資訊在 emp 表中,需要內聯接才能完成。

**演示:內聯接

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

from emp e,dept d

where e.deptno=d.deptno

and e.sal>

2000;

-----通過在from子句中指定inner join也可以指定內連線,其中inner可以省略不寫

select e.ename,e.job,e.sal,dd.dname

from emp e inner

join dept dd on e.deptno=dd.deptno

where e.sal>

2000;

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

select dname,ename from dept natural

join emp;

--2、左外連線

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

例:請查詢出每個部門下的員工姓名,工資。

分析:emp 錶用外來鍵 deptno 引用 dept 表中的 deptno,在 dept 表中如果有某些部門沒有員工,

那麼用內聯接,沒有員工的部門將無法顯示,因此必須以 dept 表為基準的外聯接。

下面的(+)操作符以及右外連線也是一樣

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;

--(+):oracle專用的聯接符,在條件中出現在左邊指右外聯接,出現在右邊指左外聯接

--雖然oracl自身的聯接查詢語法比較好寫,同時容易理解,但是為了程式便於移植,推薦使用outer join執行外連線。

--5、使用(+)操作符

----5、1使用(+)操作符執行左外連線

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

where a.deptno=b.deptno(+)

and b.deptno(+)=10;

----5、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 模糊查詢與高階連線查詢

查詢薪水在2000 3000之間的員工資訊 select from emp where sal 2000 and sal 3000l orselect from emp where sal 2000 and3000 查詢沒有上級的員工資訊 select from emp where mgr is n...

oracle 之 連線查詢

where 連線 select from a,b 使用的是笛卡爾乘積 顯示 a.count b.count 條數 select from a,b where a.id b.id 其實只是顯示的隱藏了笛卡爾乘積,但是乘積並沒有消失 且where 關聯與 inner join 效果是一致的,都是取的並集...

oracle高階查詢之相關子查詢

在子查詢中一般先執行子查詢,在執行住查詢,但是相關子查詢列外 相關子查詢就是把主查詢的值作為引數傳遞給子查詢 例子 找到員工表中薪水大於平均薪水員工 方法一 select empno,ename,sal,select g sal from emp where deptno e.deptno gsal...