- Teradata 教程
- Teradata - 首頁
- Teradata 基礎
- Teradata - 簡介
- Teradata - 安裝
- Teradata - 架構
- Teradata - 關係型概念
- Teradata - 資料型別
- Teradata - 表
- Teradata - 資料操作
- Teradata - SELECT 語句
- 邏輯與條件運算子
- Teradata - 集合運算子
- Teradata - 字串操作
- Teradata - 日期/時間函式
- Teradata - 內建函式
- Teradata - 聚合函式
- Teradata - CASE 與 COALESCE
- Teradata - 主索引
- Teradata - 連線
- Teradata - 子查詢
- Teradata 高階
- Teradata - 表型別
- Teradata - 空間概念
- Teradata - 次索引
- Teradata - 統計
- Teradata - 壓縮
- Teradata - EXPLAIN
- Teradata - 雜湊演算法
- Teradata - 連線索引
- Teradata - 檢視
- Teradata - 宏
- Teradata - 儲存過程
- Teradata - JOIN策略
- Teradata - 分割槽主索引
- Teradata - OLAP 函式
- Teradata - 資料保護
- Teradata - 使用者管理
- Teradata - 效能調優
- Teradata - FastLoad
- Teradata - MultiLoad
- Teradata - FastExport
- Teradata - BTEQ
- Teradata 有用資源
- Teradata - 問答
- Teradata - 快速指南
- Teradata - 有用資源
- Teradata - 討論
Teradata - 連線
JOIN 用於組合來自多個表中的記錄。表根據這些表中的公共列/值進行連線。
有多種型別的 JOIN 可用。
- 內連線
- 左外連線
- 右外連線
- 全外連線
- 自連線
- 交叉連線
- 笛卡爾積連線
INNER JOIN
內連線組合來自多個表中的記錄,並返回同時存在於兩個表中的值。
語法
以下是 INNER JOIN 語句的語法。
SELECT col1, col2, col3…. FROM Table-1 INNER JOIN Table-2 ON (col1 = col2) <WHERE condition>;
示例
考慮以下員工表和薪資表。
| 員工編號 | 名 | 姓 | 入職日期 | 部門編號 | 出生日期 |
|---|---|---|---|---|---|
| 101 | Mike | James | 3/27/2005 | 1 | 1/5/1980 |
| 102 | Robert | Williams | 4/25/2007 | 2 | 3/5/1983 |
| 103 | Peter | Paul | 3/21/2007 | 2 | 4/1/1983 |
| 104 | Alex | Stuart | 2/1/2008 | 2 | 11/6/1984 |
| 105 | Robert | James | 1/4/2008 | 3 | 12/1/1984 |
| 員工編號 | 總額 | 扣除額 | 淨收入 |
|---|---|---|---|
| 101 | 40,000 | 4,000 | 36,000 |
| 102 | 80,000 | 6,000 | 74,000 |
| 103 | 90,000 | 7,000 | 83,000 |
| 104 | 75,000 | 5,000 | 70,000 |
以下查詢根據公共列 EmployeeNo 連線員工表和薪資表。每個表都分配了一個別名 A 和 B,列以正確的別名引用。
SELECT A.EmployeeNo, A.DepartmentNo, B.NetPay FROM Employee A INNER JOIN Salary B ON (A.EmployeeNo = B. EmployeeNo);
執行上述查詢時,它將返回以下記錄。由於員工 105 在薪資表中沒有匹配的記錄,因此不包含在結果中。
*** Query completed. 4 rows found. 3 columns returned.
*** Total elapsed time was 1 second.
EmployeeNo DepartmentNo NetPay
----------- ------------ -----------
101 1 36000
102 2 74000
103 2 83000
104 2 70000
外連線
LEFT OUTER JOIN 和 RIGHT OUTER JOIN 也組合來自多個表的結果。
LEFT OUTER JOIN 返回左側表的所有記錄,並僅返回右側表的匹配記錄。
RIGHT OUTER JOIN 返回右側表的所有記錄,並僅返回左側表的匹配行。
FULL OUTER JOIN 組合 LEFT OUTER JOIN 和 RIGHT OUTER JOIN 的結果。它返回連線表中的匹配行和不匹配行。
語法
以下是 OUTER JOIN 語句的語法。您需要使用 LEFT OUTER JOIN、RIGHT OUTER JOIN 或 FULL OUTER JOIN 中的一個選項。
SELECT col1, col2, col3…. FROM Table-1 LEFT OUTER JOIN/RIGHT OUTER JOIN/FULL OUTER JOIN Table-2 ON (col1 = col2) <WHERE condition>;
示例
考慮以下 LEFT OUTER JOIN 查詢的示例。它返回員工表中的所有記錄以及薪資表中的匹配記錄。
SELECT A.EmployeeNo, A.DepartmentNo, B.NetPay FROM Employee A LEFT OUTER JOIN Salary B ON (A.EmployeeNo = B. EmployeeNo) ORDER BY A.EmployeeNo;
執行上述查詢時,它將產生以下輸出。對於員工 105,NetPay 值為 NULL,因為它在薪資表中沒有匹配的記錄。
*** Query completed. 5 rows found. 3 columns returned.
*** Total elapsed time was 1 second.
EmployeeNo DepartmentNo NetPay
----------- ------------ -----------
101 1 36000
102 2 74000
103 2 83000
104 2 70000
105 3 ?
交叉連線
交叉連線將左側表的每一行與右側表的每一行連線。
語法
以下是 CROSS JOIN 語句的語法。
SELECT A.EmployeeNo, A.DepartmentNo, B.EmployeeNo,B.NetPay FROM Employee A CROSS JOIN Salary B WHERE A.EmployeeNo = 101 ORDER BY B.EmployeeNo;
執行上述查詢時,它將產生以下輸出。員工表中的 EmployeeNo 101 與薪資表中的每個記錄都連線。
*** Query completed. 4 rows found. 4 columns returned.
*** Total elapsed time was 1 second.
EmployeeNo DepartmentNo EmployeeNo NetPay
----------- ------------ ----------- -----------
101 1 101 36000
101 1 104 70000
101 1 102 74000
101 1 103 83000
廣告