顧名思義,連線(JOIN)表示要結合一些東西。 在SQL的情況下,連線(JOIN)表示「組合兩個或更多表」。
在SQL中,JOIN
子句用於組合資料庫中兩個或多個表的記錄。
SQL JOIN的型別
假設有以下幾張表,EMPLOYEE 表的結構和資料如下所示 -
EMP_ID | EMP_NAME | CITY | SALARY | AGE |
---|---|---|---|---|
1 | Angelina | Chicago | 200000 | 30 |
2 | Robert | Austin | 300000 | 26 |
3 | Christian | Denver | 100000 | 42 |
4 | Kristen | Washington | 500000 | 29 |
5 | Russell | Los angels | 200000 | 36 |
6 | Marry | Canada | 600000 | 48 |
PROJECT 表的結構和資料如下所示 -
PROJECT_NO | EMP_ID | DEPARTMENT |
---|---|---|
101 | 1 | Testing |
102 | 2 | Development |
103 | 3 | Designing |
104 | 4 | Development |
在SQL中,只要條件滿足,INNER JOIN
就會選擇兩個表中具有匹配值的記錄。 它返回條件滿足的兩個表中所有行的組合。
語法
SELECT table1.column1, table1.column2, table2.column1,....
FROM table1
INNER JOIN table2
ON table1.matching_column = table2.matching_column;
查詢語句範例 -
SELECT EMPLOYEE.EMP_NAME, PROJECT.DEPARTMENT
FROM EMPLOYEE
INNER JOIN PROJECT
ON PROJECT.EMP_ID = EMPLOYEE.EMP_ID;
執行上面查詢語句,得到以下結果 -
EMP_NAME | DEPARTMENT |
---|---|
Angelina | Testing |
Robert | Development |
Christian | Designing |
Kristen | Development |
SQL left join
返回左表中的所有值和右表中的匹配值。如果沒有匹配的連線值,則返回NULL
。
語法
SELECT table1.column1, table1.column2, table2.column1,....
FROM table1
LEFT JOIN table2
ON table1.matching_column = table2.matching_column;
查詢語句範例 -
SELECT EMPLOYEE.EMP_NAME, PROJECT.DEPARTMENT
FROM EMPLOYEE
LEFT JOIN PROJECT
ON PROJECT.EMP_ID = EMPLOYEE.EMP_ID;
執行上面查詢語句,得到以下結果 -
EMP_NAME | DEPARTMENT |
---|---|
Angelina | Testing |
Robert | Development |
Christian | Designing |
Kristen | Development |
Russell | NULL |
Marry | NULL |
在SQL中,RIGHT JOIN
返回右表行中的值和左表中匹配值的所有值。如果兩個表中都沒有匹配,則返回NULL
。
語法
SELECT table1.column1, table1.column2, table2.column1,....
FROM table1
RIGHT JOIN table2
ON table1.matching_column = table2.matching_column;
查詢語句範例 -
SELECT EMPLOYEE.EMP_NAME, PROJECT.DEPARTMENT
FROM EMPLOYEE
RIGHT JOIN PROJECT
ON PROJECT.EMP_ID = EMPLOYEE.EMP_ID;
執行上面查詢語句,得到以下結果 -
EMP_NAME | DEPARTMENT |
---|---|
Angelina | Testing |
Robert | Development |
Christian | Designing |
Kristen | Development |
在SQL中,FULL JOIN是左外連線和右外連線組合的結果。 連線表包含兩個表中的所有記錄。 它將NULL
放在未找到的匹配位置。
語法
SELECT table1.column1, table1.column2, table2.column1,....
FROM table1
FULL JOIN table2
ON table1.matching_column = table2.matching_column;
查詢語句 -
SELECT EMPLOYEE.EMP_NAME, PROJECT.DEPARTMENT
FROM EMPLOYEE
FULL JOIN PROJECT
ON PROJECT.EMP_ID = EMPLOYEE.EMP_ID;
執行上面查詢語句,得到以下結果 -
EMP_NAME | DEPARTMENT |
---|---|
Angelina | Testing |
Robert | Development |
Christian | Designing |
Kristen | Development |
Russell | NULL |
Marry | NULL |