Oracle篇 之 多表查詢

2022-09-16 05:03:10 字數 1551 閱讀 7264

一、概念

從多個表中查詢資料時,需要在表和表間建立連線,一般使用主外來鍵建立連線

二、連線種類

1.等連線:連線條件使用等號

非等連線:連線條件使用等號以外的其它符號

2.內連線:根據指定的連線條件進行連線查詢,滿足連線條件的資料才會出現在結果集(最常見的等值連線)

外連線:在內連線的基礎上,將某個連線表不符合連線條件的記錄加入結果集

3.自連線:自身表中的列關聯自身表中的其它列

4.集合操作符

union:兩個集合的並集,去掉重複內容

union all:兩個集合的並集,重複內容取2次

minus:第乙個集合減去和第二個集合相交的內容

intersect:兩個集合的交集

三、連線查詢操作

1).連線查詢語法

select last_name,name

from s_emp,s_dept

where s_emp.dept_id=s_dept.id;

左外連線:a left outer join b-----中的

(a為基準,遇到

a中不符合條件的也加入, b中用

null

填充,包含左邊表的全部行)

基本寫法:

1. select  e.last_name,d.name

from s_emp e left outer join s_dept d

on e.dept_id=d.id;

oracle特有寫法:

2. select  e.last_name,d.name

from s_emp e ,s_dept d

where  e.dept_id(+)=d.id;

右外連線:a right outer join b -----(b為基準,遇到

b中不符合條件的也加入

, a中用

null

填充,包含右邊表的全部行)

全外連線(包含左、右兩個表的全部行,不管另外一邊的表中是否存在與它們匹配的行)

查詢所有員工名、員工部門名(員工沒有分配部門、部門沒有員工)?

select e.last_name,d.name

from s_emp e full outer join s_dept d

on e.dept_id=d.id;

select e.last_name,d.name

from s_emp e,s_dept d

where e.dept_id(+)=d.id(+); //error,oracle

沒有全外連線特有寫法

2)集合操作符

eg:union:兩個集合的並集,去掉重複內容

select e.last_name,d.name

from s_emp e,s_dept d

where e.dept_id=d.id(+)

union

select e.last_name,d.name

from s_emp e,s_dept d

where e.dept_id(+)=d.id;

Oracle之多表查詢

多表查詢的基礎語法 select 查詢列 1 別名1,查詢列 2 別名2,from 表名稱1 別名1 名稱2 別名2 給出幾個例子吧。1.select e.ename,e.sal,d.dname,s.grade,m.ename,m.sal,ms.grade from emp e,dept d,sal...

oracle高階查詢之多表查詢

多張表查詢產生的表的列數等於所有表的列數之和,行數等於多張表之積 等值連線 select e.empno,e.ename from emp e,dept d where e deptno d.deptno 不等值連線 select e.empno,e.ename e.sal from emp e,d...

Oracle 表複雜查詢之多表合併查詢

本文使用到的是oracle資料庫scott方案所帶的表,scott是oracle資料庫自帶的方案,使用前請確保其解鎖 oracle合併查詢一共有四種方式,分別使用不同的關鍵字 union union all minus intersect 使用union all,表示取a b的合集,不過濾重複的資料...