等值和不等值連線查詢
為了避免笛卡爾集, 可以在 where 加入有效的連線條件。
oracle 連線多表查詢
在 where 子句中寫入連線條件。
在表中有相同列時,在列名之前加上表名字首
select
table1.column, table2.column
from
table1, table2
where
table1.column1 = table2.column2;
等值連線
select
employees.employee_id, employees.last_name,
employees.department_id, departments.department_id,
departments.location_id
from
employees, departments
where
employees.department_id = departments.department_id;
-- 練習:查詢出公司員工的 last_name, department_name, city
select
last_name, department_name, city
from
employees e ,departments d ,locations l
where
e.department_id = d.department_id and
d.location_id = l.location_id
非等值連線
-- employees表中的列工資應在job_grades表中的最高工資與最低工資之間
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;
內連線、外連線(左(或右) 外連線、滿外連線)
內連線
select
e.last_name, d.department_name
from
employees e, departments d
where
e.department_id = d.department_id
-- sql1999語法的方式
select
e.last_name, d.department_name
from
employees e
inner
join
departments d
on e.department_id = d.department_id
外連語法
select
table1.column, table2.column
from
table1, table2
where
table1.column(+) = table2.column;
-- 示例
select
e.last_name, d.department_name
from
employees e, departments d
where
e.department_id(+) = d.department_id
-- sql1999方式
select
e.last_name, d.department_name
from
employees e
right
outer
join
departments d
on (e.department_id = d.department_id)
select
table1.column, table2.column
from
table1, table2
where
table1.column = table2.column(+);
-- 示例
select
e.last_name, d.department_name
from
employees e, departments d
where
e.department_id = d.department_id(+)
-- sql1999方式
select
e.last_name, d.department_name
from
employees e
left
outer
join
departments d
on (e.department_id = d.department_id)
滿外連線
-- 滿外連線
select
e.last_name, e.department_id, d.department_name
from
employees e
full
outer
join
departments d
on (e.department_id = d.department_id)
自連線
-- 練習:查詢出 last_name 為 『chen』 的員工的 manager 的資訊
select
worker.last_name || ' works for '
|| manager.last_name
from
employees worker , employees manager
where
worker.manager_id = manager.employee_id and
initcap(worker.last_name) = 'chen'
叉集(了解)
select
last_name, department_name
from
employees
cross
join
departments
自然連線
select
department_id, department_name,
location_id, city
from
departments
natural
join
locations
使用using建立連線
使用on 子句建立連線 (常用)
select
e.employee_id, e.last_name, e.department_id,
d.department_id, d.location_id
from
employees e
join
departments d
on (e.department_id = d.department_id)
-- 使用on 建立多表連線
select
employee_id, city, department_name
from
employees e
join
departments d
on d.department_id = e.department_id
join
locations l
on d.location_id = l.location_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 多表查詢
多表查詢 多表查詢,又稱表聯合查詢,即一條sql語句涉及到的表有多張,資料通過特定的連線進行聯合顯示.笛卡爾積 在數學中,兩個集合x和y的笛卡尓積 cartesian product 又稱直積,表示為x y.假設集合a 集合b 則兩個集合的笛卡爾積為。在資料庫中,如果直接查詢倆張表,那麼其查詢結果就...
oracle多表查詢
分頁查詢 oracle的表中都有兩個偽列,可用於指定行號 1 rownum 會根據查詢到的行記錄的改變而改變.如,smith行在第一行那麼rownum就是1,smith行在第4行,那麼rownum就是4.2 rowid 固定行號,不會根據查詢到的行記錄的改變而改變。如,smith行在第一行rowid...