Oracle學習筆記 04 多表查詢

2021-09-20 04:35:14 字數 3851 閱讀 9436

1.多表連線有以下幾種分法:

(1)內連線           vs          外連線 (左、右、滿)

(2)等值連線        vs         不等值連線

(3)非自連線        vs         自連線

2.笛卡爾集:  所有表中的所有行互相連線

產生條件:(1)多表查詢沒有連線條件          

(2)連線條件無效

3. 內連線   :  結果集中不包含乙個表與另乙個表不匹配的行

外連線   :  兩個表在連線過程中除了返回滿足連線條件的行以外(這裡的資料是內連線查詢到的),還返回左(或右)表中不滿足條件的行 ,這種連線稱為左(或右) 外連線

滿外連線: 返回左表中和右表中不滿足條件的行

4.注意:      當列名為多個表共有時,列名必須被限制。

語法:

from

table1

[ cross join table2

] |[

natural join table2

] |[

join table2 using (column_name) ]|

[ join table2

on (table1.column_name = table2.column_name)

] |[

left | right | full outer join table2

on (table1.column_name = table2.column_name)

];

自然連線中是以具有相同名字的列為連線條件的,而 join...on ...子句並不要求兩張表含有相同名字的列。

on 子句使語句具有更高的易讀性。

select

欄位...

from

表1 join 表2on表1和表2的連線條件

join 表3

on 表1(或表2)和表3的連線條件

(1)兩張表的等值連線

select

last_name, department_name

from employees e join

departments d

on e.department_id = d.department_id;

(2)使用 join.. on..建立多表連線:三張表的等值連線

select

last_name,e.department_id,department_name,city

from employees e join

departments d

on e.department_id =

d.department_id

join

locations l

on d.location_id = l.location_id;

使用 cross   join  會產生叉集,叉集與笛卡爾集相同。

select

last_name, department_name

from

employees

cross join departments ;

自然連線:   natural  join 子句,會以兩個表中具有相同名字的列為條件建立等值連線。

注:  如果只是列名相同而資料型別不同,則會產生錯誤。

employees表 和 departments表 有兩個相同字段。使用natural  join ,會自動以這兩個字段作為連線條件。

select

last_name,department_name

from employees natural join departments;

以上**與下面**相同:

select

last_name,department_name

from

employees e,departments d

where e.department_id = d.department_id and e.manager_id = d.manager_id;

背景:由 natural join 子句建立等值連線,會將這些相同列都作為連線條件。而有時我們只需要其中某些列,這是就可以使用using子句指定等值連線中需要用到的列。

作用:在有多個列滿足條件時,可以使用 using 子句 指定等值連線中需要用到的列。

侷限:按照指定的列作為連線條件。但是要求指定的列,在兩個表中列名相同。

注:不要給選中的列中加上表名字首或別名。

join 和 using 子句經常同時使用。

以上都是內連線

左外連線:除了查詢到滿足條件的行之外,返回左表中不滿足條件的行。主要有兩種實現方式:

(1)left  outer  join... on...

select

last_name ,department_name

from employees e left outer join

departments d

on e.department_id = d.department_id;

(2)+

select

e.employee_id,e.department_id,d.department_name

from

employees e,departments d

where e.department_id = d.department_id(+); --

左邊有,右邊沒,故右加

右外連線:返回右表中不滿足條件的行。主要有兩種實現方式:

(1)right  outer  join... on...

select

employee_id,last_name,e.department_id,department_name

from employees e right outer join

departments d

on e.department_id = d.department_id;

(2)+

select

employee_id,e.department_id,department_name

from

employees e,departments d

where e.department_id(+) = d.department_id;

滿外連線:同時返回左表和右表中不滿足條件的行

select

employee_id,last_name,e.department_id,department_name

from employees e full outer join

departments d

on e.department_id = d.department_id;

select

emp.employee_id,emp.last_name,mgr.last_name

from

employees emp,employees mgr

where emp.manager_id = mgr.employee_id;

Oracle多表聯查總結筆記

以兩表為例 語法 select別稱1.列名1,別稱2.列名n from表1 別稱1inner join表2.別稱2 on別稱1.公共列 別稱2.公共列 where查詢語句 例如 查詢員工編號,姓名,部門編號以及部門名稱 select別稱1.列名1,別稱2.列名n from表1 別稱1left out...

快速學習Oracle 多表查詢

1.多表連線基本查詢 使用一張以上的表做查詢就是多表查詢 語法 select 列名.from 表名 別名,表名 1 別名範例 查詢員工表和部門表 我們發現產生的記錄數是 56 條,我們還會發現 emp 表是 14 條,dept 表是 4 條,56 正是 emp表和 dept 表的記錄數的乘積,我們稱...

php學習筆記 04

預定義常量 php version 獲取當前使用的php版本號。file 獲取當前正在解析的檔名。如果如果這個常量在內部檔案中使用,則提取該檔名,而不是其父檔名。line 獲取當前正在解析的檔案的行數。如果中國常量在內部檔案中使用,則給出該內部檔案中的行數。e error 除非遇到解析時不可恢復的錯...