程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> Oracle數據庫 >> Oracle教程 >> ORACLE第4節

ORACLE第4節

編輯:Oracle教程

ORACLE第4節


學習目標:

 

?使用等值和不等值連接在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

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved