SQL JOIN 子句用于组合两个或多个表中的行,
基于他们之间的共同领域。
SQL 中有不同类型的联接可用:
内部联接:当两个表中存在匹配时返回行。
左连接:返回左表中的所有行,即使右表中没有匹配项。
右连接:返回右表中的所有行,即使左表中没有匹配项。
全面加入:合并左外连接和右外连接的结果。
连接的表将包含两个表中的所有记录,并为两侧缺失的匹配项填充 NULL。
自加入:将一个表与其自身连接起来,就好像该表是两个表一样,在 SQL 语句中临时重命名至少一个表。
笛卡尔连接:返回两个或多个连接表中记录集的笛卡尔积。
我们可以在 Details 中获取前四个连接:
我们有两个表,其中包含以下值。
TableA
id firstName lastName
.......................................
1 arun prasanth
2 ann antony
3 sruthy abc
6 new abc
TableB
id2 age Place
................
1 24 kerala
2 24 usa
3 25 ekm
5 24 chennai
...................................................... ......................
内部联接
Note:给出两个表的交集,即 TableA 和 TableB 共有的行。
Syntax
SELECT table1.column1, table2.column2...
FROM table1
INNER JOIN table2
ON table1.common_field = table2.common_field;
将其应用到我们的示例表中:
SELECT TableA.firstName,TableA.lastName,TableB.age,TableB.Place
FROM TableA
INNER JOIN TableB
ON TableA.id = TableB.id2;
Result
firstName lastName age Place
..............................................
arun prasanth 24 kerala
ann antony 24 usa
sruthy abc 25 ekm
左连接
Note:给出表中所有选定的行,以及表中任何常见的选定行。
Syntax
SELECT table1.column1, table2.column2...
FROM table1
LEFT JOIN table2
ON table1.common_field = table2.common_field;
将其应用到我们的示例表中:
SELECT TableA.firstName,TableA.lastName,TableB.age,TableB.Place
FROM TableA
LEFT JOIN TableB
ON TableA.id = TableB.id2;
Result
firstName lastName age Place
...............................................................................
arun prasanth 24 kerala
ann antony 24 usa
sruthy abc 25 ekm
new abc NULL NULL
右连接
Note:给出 Table 中所有选定的行,以及 TableAU 中任何常见的选定行。
Syntax
SELECT table1.column1, table2.column2...
FROM table1
RIGHT JOIN table2
ON table1.common_field = table2.common_field;
将其应用到我们的示例表中:
SELECT TableA.firstName,TableA.lastName,TableB.age,TableB.Place
FROM TableA
RIGHT JOIN TableB
ON TableA.id = TableB.id2;
Result
firstName lastName age Place
...............................................................................
arun prasanth 24 kerala
ann antony 24 usa
sruthy abc 25 ekm
NULL NULL 24 chennai
全面加入
Note:返回两个表中所有选定的值。
Syntax
SELECT table1.column1, table2.column2...
FROM table1
FULL JOIN table2
ON table1.common_field = table2.common_field;
将其应用到我们的示例表中:
SELECT TableA.firstName,TableA.lastName,TableB.age,TableB.Place
FROM TableA
FULL JOIN TableB
ON TableA.id = TableB.id2;
Result
firstName lastName age Place
...............................................................................
arun prasanth 24 kerala
ann antony 24 usa
sruthy abc 25 ekm
new abc NULL NULL
NULL NULL 24 chennai
有趣的事实
- 对于 INNER 连接,顺序并不重要。
- 对于(LEFT、RIGHT 或 FULL)OUTER 连接,顺序很重要。
最好去检查一下Link它将为您提供有关加入顺序的有趣详细信息。