學習目標:
•使用 等值和
不等值連線在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 則兩個集合的笛卡爾積為。在資料庫中,如果直接查詢倆張表,那麼其查詢結果就...