1. 程式人生 > 其它 >資料庫中的連線查詢

資料庫中的連線查詢

資料庫中的連線查詢

1、概述

1、在實際開發中,大部分的情況下都不是從單表中查詢資料,一般都是多張表聯合查詢取出最終的結果。一個業務都會對應多張表,比如:學生和班級,起碼兩張表。(避免產生資料的冗餘) 2、連線查詢的分類 ①根據語法出現的年代來劃分: SQL92(一些老的DBA可能還在使用這種語法。) SQL99(比較新的語法) ②根據表的連線方式來劃分: 內連線:等值連線、非等值連線、自連線。 外連線:左外連線(左連線)、右外連線(右連線)、全連線。

2、內連線

2.1 等值連線
  • 內連線之等值連線 最大的特點是:條件是等量關係。

  • SQL99(最常用)

SELECT e.ename, d.dname 
FROM emp e
join dept d
on e.DEPTNO = d.DEPTNO;

1、語法:

...
A
(inner) join
B
on
連線條件
where
...

inner可省略,加上可讀性更強 2、SQL99語法結構更清晰一些,表的連線條件和後來的where條件分離了。

2.2 非等值連線
  • 內連線之非等值連線 最大的特點是:連線條件中的關係是非等量關係。

  • 例子: 找出每個員工的工資等級,要求顯示員工名、工資、工資等級。

SELECT e.ename, e.sal, s.grade 
FROM
emp as e
inner join
salgrade as s
on
e.sal between losal and hisal
order by grade;
2.3 自連線
  • 自連線 自連線就是一張表看做兩張表,自己連線自己。

  • 例子: 找出每個員工的上級領導,要求顯示員工名和對應的領導名。 emp表: 關鍵: 一張表起兩個別名,當做兩張表用。 員工的領導編號 = 領導的員工編號。

SELECT a.ename as emp, 
b.ename as mgr
from emp as a
inner join
emp as b
on a.mgr = b.empno;

3、外連線

3.1 概述
  • 內連線和外連線的區別 1、內連線: 假設A和B表進行連線,使用內連線的話,凡是A表和B表能夠匹配上的記錄查詢出來,這就是內連線。AB兩張表沒有主副之分,兩張表是平等的。 2、外連線: 假設A和B表進行連線,使用外連線的話, AB兩張表中有一張表是主表,一張表是副表,主要查詢主表中的資料,捎帶著查詢副表。當副表中的資料沒有和主表中的資料匹配上,副表自動模擬出NULL與之匹配。 3、外連線的分類: 左外連線(左連線):表示左邊的這張表是主表。 右外連線(右連線):表示右邊的這張表是主表。 4、左連線有右連線的寫法,右連線也會有對應的左連線的寫法。 5、外連線最重要的特點是:主表的資料無條件的全部查詢出來。

3.2 例子

1、找出每個員工的上級領導,要求顯示員工名和對應的領導名。

  • 左連線:

SELECT a.ename as emp, 
b.ename as mgr
from emp as a
left outer join
emp as b
on a.mgr = b.empno;

outer可以省略 在上面內連線的基礎上將inner換為left (outer),emp as a表示左邊,emp as b表示右邊;因為是left,所以左邊的a為主表。b為副表。

  • 右連線

SELECT a.ename as emp, 
b.ename as mgr
from emp as b
right outer join
emp as a
on a.mgr = b.empno;

outer可以省略 這時emp as b表示左邊,emp as a表示右邊;right表示右邊的a為主表。b為副表。