SQL語言基礎(多表連線)
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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 【學習】SQL基礎-006-多表連線查詢SQL
- SQL語言基礎(資料控制語言)SQL
- SQL語言基礎(SELECT語句)SQL
- SQL語言基礎(函式)SQL函式
- SQL語言基礎(子查詢)SQL
- Mybatis連線池_動態sql語句_多表查詢實現MyBatisSQL
- SQL語言基礎(高階查詢)SQL
- C語言基礎C語言
- dart語言基礎Dart
- go 語言連線池Go
- MySQL筆記3——內連線/外連線、多表連線MySql筆記
- SQL語言_多表查詢和TOP限制結果集_PAGE3SQL
- python程式語言基礎Python
- Go語言基礎-序言Go
- c語言的基礎C語言
- e語言基礎01
- 【01】C語言基礎C語言
- 【Go語言基礎】sliceGo
- Julia語言程式基礎
- T-SQL——基礎語法SQL
- LEFT JOIN 和JOIN 多表連線
- Go語言基礎語法總結Go
- C語言線性連結串列C語言
- Gradle 之語言基礎 GroovyGradle
- c語言基礎知識C語言
- D程式語言基礎篇
- C語言入門基礎C語言
- c語言基礎學習C語言
- C語言基礎函式C語言函式
- C語言基礎-指標C語言指標
- [06 Go語言基礎-包]Go
- 組合語言-基礎功能組合語言
- SQL語言SQL
- 1.3.3.5.1. SQL*Plus 連線命令語法SQL
- java連線oracle執行sql語句JavaOracleSQL
- MySQL指南之SQL語句基礎MySql
- 資料庫-SQL基礎語法資料庫SQL
- CDA資料分析師 - SQL資料庫基礎 查詢&連線SQL資料庫