《oracle資料庫》多表查詢

2021-09-11 21:46:10 字數 4068 閱讀 7229

笛卡爾集會在以下條件下產生:

省略連線條件

連線條件無效

所有表中的所有行互相連線

為了避免笛卡爾集, 可以在 where 加入有效的連線條件。

select count(employee_id)

from employees;

假設輸出107行

select count(department_id)

from departments;

假設輸出27行

select last_name, department_name

from employees, departments;

結果輸出107*27=2889行

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

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;

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

d.department_id, d.location_id

from employees e , departments d

where e.department_id = d.department_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;

連線 n個表,至少需要 n-1個連線條件。

查詢出公司員工的 last_name, department_name, city(三個表,兩個連線條件):

select 	last_name, department_name, city

from employees,departments,locations

where employees.department_id = departments.department_id

and departments.location_id = locations.location_id

連線條件中匹配行的表的列後面要加外連線運算子(+)

(1)左外連線
兩個表在連線過程中除了返回滿足連線條件的行以外還返回左表中不滿足條件的行,這種連線稱為左外連線。

select	table1.column, table2.column

from table1, table2

where table1.column = table2.column(+);

(2)右外連線
與左外連線相反,兩個表在連線過程中除了返回滿足連線條件的行以外還返回右表中不滿足條件的行 ,這種連線稱為右外連線。

select	table1.column, table2.column

from table1, table2

where table1.column(+) = table2.column;

使用cross join子句使連線的表產生叉集。

與笛卡爾集是相同的。

select 	last_name, department_name

from employees cross join departments ;

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

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

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

select 	department_id, department_name,       	

location_id, city

from departments natural join locations ;

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

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

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

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

select 	department_id, department_name,       	

location_id, city

from departments join locations using(location_id);

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

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

select 	department_id, department_name,       	

d.location_id, city

from departments d join locations l

on d.location_id = l.location_id;

多表連線

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;

(1)left outer join:左外連線
select 		e.last_name, e.department_id, d.department_name

from employees e

left outer join departments d

on (e.department_id = d.department_id);

(2)right outer join:右外連線
select 			e.last_name, e.department_id, d.department_name

from employees e

right outer join departments d

on (e.department_id = d.department_id);

(3)full outer join:滿外連線
兩個表在連線過程中除了返回滿足連線條件的行以外還返回兩個表中不滿足條件的行,這種連線稱為滿外連線。

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);

oracle 資料庫 多表查詢

這裡以oracle 自帶的表為例項 1.等值連線 查詢員工資訊 員工號 姓名 月薪 部門名稱 select e.empno,e.ename,e.sal,d.dnamefrom emp e,dept d where e.deptno d.deptno e d 分別 值兩個表的別名,等值條件 為 dep...

oracle資料庫之多表查詢

select s.stuid,s.stuname,s.stuage,s.gender,cl.classesname from student s,classes cl where s.classesid cl.classesid select s.stuid,s.stuname,s.stuage,s...

Oracle資料庫學習多表查詢

此查詢設計到兩個表,其中兩個表中都有相同的列department id 此次查詢出現了笛卡兒積的錯誤,出現原因為1.省略連線條件2.連線條件無效3.所有表中的所有行相互連線 所以為了避免笛卡兒積,要在聯表查詢的時候在where後加有效的連線條件 這種方式為內連線的等值連線,如果涉及到n張表的查詢那麼...