SQL JOIN五种连接方式
SQL JOIN 连接子句用于将数据库中两个或者两个以上表中的记录组合起来。连接通过共有值将不同表中的字段组合在一起:
- 内连接(inner join):当两张表都存在匹配时才返回行(交集);
- 左连接(left join):返回左表中所有的行,即使右表中没有匹配的行;
- 右连接(right join):返回右表中所有的行,即使左表中没有匹配的行;
- 全连接(full join):只要某一个表存在匹配就返回行(并集);
- 笛卡尔连接/交叉连接(cartesian join):返回两个或更多表中记录集的笛卡尔积。
内连接(inner join):
最常用也最重要的连接形式是内连接,有时候也被称作“EQUIJOIN”(等值连接)。内连接根据连接谓词来组合两个表中的字段,以创建一个新的结果表。SQL 查询会比较逐个比较表 1 和表 2 中的每一条记录,来寻找满足连接谓词的所有记录对。当连接谓词得以满足时,所有满足条件的记录对的字段将会结合在一起构成结果表。
内连接 的基本语法:
SELECT table1.column1, table2.column2...
FROM table1
INNER JOIN table2
ON table1.common_field = table2.common_field;
左连接(left join):
左链接返回左表中的所有记录,即使右表中没有任何满足匹配条件的记录。这意味着,如果 ON 子句在右表中匹配到了 0 条记录,该连接仍然会返回至少一条记录,不过返回的记录中所有来自右表的字段都为 NULL。这就意味着,左连接会返回左表中的所有记录,加上右表中匹配到的记录,或者是 NULL (如果连接谓词无法匹配到任何记录的话)。
左连接 的基本语法
SELECT table1.column1, table2.column2...
FROM table1
LEFT JOIN table2
ON table1.common_field = table2.common_field;
右连接
右链接返回右表中的所有记录,即是左表中没有任何满足匹配条件的记录。这意味着,如果 ON 子句在左表中匹配到了 0 条记录,该连接仍然会返回至少一条记录,不过返回的记录中所有来自左表的字段都为NULL。这就意味着,右连接会返回右表中的所有记录,加上左表中匹配到的记录,或者是 NULL (如果连接谓词无法匹配到任何记录的话)。
右连接 的基本语法:
SELECT table1.column1, table2.column2...
FROM table1
RIGHT JOIN table2
ON table1.common_field = table2.common_field;
全连接
全连接将左连接和右连接的结果组合在一起。
全连接 的基本语法:
SELECT table1.column1, table2.column2...
FROM table1
FULL JOIN table2
ON table1.common_field = table2.common_field;
笛卡尔连接
笛卡尔连接或者交叉连接返回两个或者更多的连接表中记录的笛卡尔乘积。也就是说,它相当于连接谓词总是为真或者缺少连接谓词的内连接。
笛卡尔连接 的基本语法:
SELECT table1.column1, table2.column2...
FROM table1, table2 [, table3 ]