ORACLE 第4節 多表查詢

2021-07-04 14:56:26 字數 3805 閱讀 3257

學習目標:

•使用 等值和

不等值連線在select語句中查詢多個表中的資料。

•使用 自連線。

使用外連線查詢不滿足連線條件的資料

oracle

連線等值連線:

使用連線在多個表中查詢資料。

select 

table1.column, table2.column

from 

table1, table2

where 

table1.column1

= table2.column2;

• 在

where

子句中寫入連線條件。 •

在表中有相同列時,在列名之前加上表名字首

兩個表的連線

select e.employee_id,e.last_name,d.department_id

from employees e,departments d

where e.department_id = d.department_id

三個表的連線

select e.employee_id,e.last_name,d.department_id,l.city

from employees e,departments d,locations l

where e.department_id = d.department_id and

d.location_id = l.location_id •

連線 n個表,

至少需要

n-1個連線條件。 例如:連線三個表,至少需要兩個連線條件。

自連線:

select emp.last_name,manager.last_name

from employees emp,employees manager

where emp.manager_id = manager.employee_id and emp.last_name = 'chen'

非等值連線:

select e.last_name,e.salary,j.grade_level

from employees e,job_grades j

where e.salary between j.lowest_sal and j.highest_sal

內連線和外連線:

內連線: 合併具有同一列的兩個以上的表的行,

結果集中不包含乙個表與另乙個表不匹配的行

外連線: 兩個表在連線過程中除了返回滿足連線條件的行以外

還返回左(或右)表中不滿足條件的行

,這種連線稱為左(或右)外連線。

沒有匹配的行時, 結果表中相應的列為空(null). 外連線的 where子句條件類似於內部連線, 但連線條件中沒有匹配行的表的列後面要加外連線運算子

,即用圓括號括起來的加號

(+). 

--左外連線

select e.employee_id,e.last_name,d.department_name

from employees e,departments d

where e.department_id = d.department_id(+)

--右外連線

select e.employee_id,e.last_name,d.department_name

from employees e,departments d

where e.department_id(+) = d.department_id

使用sql: 1999語法連線:

使用連線從多個表中查詢資料:

select table1.column, table2.column

from  table1

[cross jointable2] |

[natural jointable2] |

[jointable2 using(column_name)] |

[jointable2 on(table1.column_name = table2.column_name)] |

[left|right|full outer jointable2 on(table1.column_name =table2.column_name)];

自然連線:

•naturaljoin 子句,會以兩個表中具有相同名字的列為條件建立等值連線。

•在表中查詢滿足等值條件的資料。

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

select e.employee_id,e.last_name,d.department_name

from employees e natural join departments d

使用using子句建立連線:

•在natural join 子句建立等值連線時,可以

使用 using

子句指定等值連線中需要用到的列。

•使用using 可以在有多個列滿足條件時進行選擇。

join

和using

子句經常同時使用。

select e.employee_id,e.last_name,d.department_name

from employees e join departments d

using(department_id)

這種方法有侷限性:如果兩個表中的列名(乙個叫department_id,另外乙個叫id)不一樣,這個方法就失效了。

使用on子句建立連線(常用):

•自然連線中是以具有相同名字的列為連線條件的。

•可以使用

on子句指定額外的連線條件。

•這個連線條件是與其它條件分開的。 on

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

select e.employee_id,e.last_name,d.department_name

from employees e 

join departments d

on e.department_id = d.department_id

這個和等值連線是很相似的

左外連線

select e.employee_id,e.last_name,d.department_name

from employees e 

left outer join departments d

on e.department_id = d.department_id

右外連線

select e.employee_id,e.last_name,d.department_name

from employees e 

right outer join departments d

on e.department_id = d.department_id

滿外連線

select e.employee_id,e.last_name,d.department_name

from employees e 

full outer join departments d

on e.department_id = d.department_id

Oracle 多表查詢

sql 外連線 sql 按部門統計員工人數 部門號 部門名稱 人數 sql select d.deptno,d.dname,count e.empno 2 from dept d,emp e 3 where d.deptno e.deptno 4 group by d.deptno,d.dname ...

Oracle 多表查詢

等值和不等值連線查詢 為了避免笛卡爾集,可以在 where 加入有效的連線條件。oracle 連線多表查詢 在 where 子句中寫入連線條件。在表中有相同列時,在列名之前加上表名字首 select table1.column,table2.column from table1,table2 whe...

oracle 多表查詢

多表查詢 多表查詢,又稱表聯合查詢,即一條sql語句涉及到的表有多張,資料通過特定的連線進行聯合顯示.笛卡爾積 在數學中,兩個集合x和y的笛卡尓積 cartesian product 又稱直積,表示為x y.假設集合a 集合b 則兩個集合的笛卡爾積為。在資料庫中,如果直接查詢倆張表,那麼其查詢結果就...