SQL語言基礎(多表連線)

老w愛db發表於2022-11-19

1-1 Oracle連線

在一個資料庫中的多個表之間一般都存在著某些聯絡,在一個查詢語句中同時涉及到兩個或兩個以上的表時,這種查詢稱之為連線查詢(也稱為多表查詢)。在多表之間查詢必須處理表與表之間的連線關係

SELECT  table1.column, table2.column
FROM  table1, table2
WHERE  table1.column1 = table2.column2;

WHERE 字句中寫入連線條件。

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

1-1-1 內連線

內連線查詢操作列出與連線條件匹配的資料行,它使用比較運算子比較被連線列的列值。內連線分三種:

   等值連線, 不等連線, 自然連線。

   僅當至少有一個同屬於兩表的行符合聯接條件時,內聯接才返回行。內聯接消除與另一個表中的任何行不匹配的行。

等值連線:

在連線條件中使用等於號(=) 運算子比較被連線列的列值,其查詢結果中列出被連線表中的所有列,包括其中的重複列。

    連線 n 個表, 至少需要 n-1 個連線條件。 例如:連線三個表,至少需要兩個連線條件。

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;

 多表連線:

 連線 n 個表, 至少需要 n-1 個連線條件。 例如:連線三個表,至少需要兩個連線條件。

非等值連線:

  在連線條件使用除等於運算子以外的其它比較運算子比較被連線的列的列值。這些運算子包括 > >= <= < !> !< <>

自然連線:    

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

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

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

SELECT department_id, department_name,
       location_id, city
FROM   departments
NATURAL JOIN locations ;

1-1-2 外連線

使用外連線可以查詢不滿足連線條件的資料。

外連線的符號是 (+) out join on

SELECT  table1.column, table2.column
FROM  table1, table2
WHERE  table1.column(+) = table2.column;
SELECT  table1.column, table2.column
FROM  table1
LEFT OUT JOIN table2
ON  (table1.column = table2.column);

外連線與內連線區別

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

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

左外連線:

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) ;
或者:
SELECT e.last_name, e.department_id, d.department_name
FROM   employees e
LEFT  JOIN departments d
ON   (e.department_id = d.department_id) ;

左外連線是以左表為基準,根據左右表對應的列,依次把左表的每一行去匹配右表的某一行,如果右表中不存在匹配的行,右表用null 組成一行和左表匹配

右外連線:

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

右外連線是以右表為基準,根據左右表對應的列,依次把右表的每一行去匹配左表的某一行,如果左表中不存在匹配的行,左表用null 組成一行和左表匹配

全外連線:

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

1-2  使用 USING 子句建立連線

NATURAL JOIN 子句建立等值連線時,可以使用 USING 子句指定等值連線中需要用到的列。

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

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

NATURAL JOIN USING 子句經常同時使用。

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

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

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

SELECT e.employee_id, e.last_name, d.location_id
FROM   employees e JOIN departments d
USING (department_id) ;

1-3  使用 ON 子句建立連線

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

可以使用 ON 子句指定額外的連線條件

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

1-4  使用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;


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/70021989/viewspace-2924158/,如需轉載,請註明出處,否則將追究法律責任。

相關文章