oracle基礎 第八篇 多表查詢

使用連接在多個表中查詢數據:

在 WHERE 子句中寫入連接條件

在表中有相同列時,在列名之前加上表名前綴。

使用表名前綴在多個表中區分相同的列

在不同表中具有相同列名的列可以用表的別名加以區分。

使用別名可以簡化查詢。

使用表名前綴可以提高執行效率

 

 

內連接和外連接:

內連接: 合併具有同一列的兩個以上的表的行, 結果集中不包含一個表與另一個表不匹配的行。

外連接: 兩個表在連接過程中除了返回滿足連接條件的行以外還返回左(或右)表中不滿足條件的行 ,這種連接稱爲左(或右) 外連接。

沒有匹配的行時, 結果表中相應的列爲空(NULL)。

外連接的 WHERE 子句條件類似於內部連接, 但連接條件中沒有匹配行的表的列後面要加外連接運算符, 即用圓括號括起來的加號(+)。

一、內連接:

1、等值連接:

例如:

方式1:


SELECT
	A .employee_id,
	b.department_id,
	b.department_name
FROM
	employees A,
	departments b
WHERE
	A .department_id = b.department_id;

方式2(join+ 連接的表名+on+匹配條件):

 SELECT
   a.last_name ,
   a.department_id ,
   b.department_name 
FROM
  employees a
JOIN departments b ON a.department_id=b.department_id;

 

三張表查詢:

方式1:

SELECT
	A .employee_id,
	b.department_id,
	b.department_name,
	c.city
FROM
	employees A,
	departments b,
	locations c
WHERE
	A .department_id = b.department_id
AND b.location_id = c.location_id;

 

方式2:

SELECT
	a .last_name,
	a .department_id,
	b.department_name,
	c.city
FROM
	employees a
JOIN departments b ON a .department_id = b.department_id
JOIN locations c ON b.location_id = c.location_id;

 

總結:連接 n個表,至少需要 n-1個連接條件

 

 

2、非等值連接:

例如:

SELECT
	employee_id,
	last_name,
	grade_level
FROM
	employees A,
	job_grades b
WHERE
	A .salary BETWEEN b.lowest_sal
AND b.highest_sal;

二、外連接:

左外連接:

方式1:

SELECT
	a .last_name,
	a .department_id,
	b.department_name
FROM
	employees a,
	departments b
WHERE
	a.department_id = b.department_id(+);

方式2:

SELECT
	A .last_name,
	A .department_id,
	b.department_name
FROM
	employees A
LEFT OUTER JOIN departments b ON A .department_id = b.department_id;

 

右外連接:

方式1:

SELECT
	a .last_name,
	a .department_id,
	b.department_name
FROM
	employees a,
	departments b
WHERE
	a.department_id(+) = b.department_id;

方式2:

SELECT
	A .last_name,
	A .department_id,
	b.department_name
FROM
	employees A
RIGHT OUTER JOIN departments b ON A .department_id = b.department_id;

 

滿外連接:

SELECT
	A .last_name,
	A .department_id,
	b.department_name
FROM
	employees A
FULL OUTER JOIN departments b ON A .department_id = b.department_id;

 

自連接:

查詢公司中員工'chen'的manager的信息:

SELECT
	empl.last_name,
	manager.employee_id,
	manager.last_name,
	manager.manager_id,
	manager.salary,
	manager.email
FROM
	employees empl,
	employees manager
WHERE
	empl.manager_id = manager.employee_id
AND LOWER (empl.last_name) = 'chen';

 

參考來自尚硅谷視頻

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章