- 内连接
合并具有同一列的两个或两个以上的表的行,结果集中不包含一个表与另一个表不匹配的行。
通过JOIN...ON 连接,语法:
SELECT table1.column, table2.column,table3.column
FROM table1
JOIN table2 ON table1 和 table2 的连接条件
JOIN table3 ON table2 和 table3 的连接条件
employees表中有一人部门id为null,所以只有106条记录。
- 外连接
合并具有同一列的两个或两个以上的表的行,结果集中除了包含一个表与另一个表匹配的行之外,还查询到了左表或右表中不匹配的行。
分类:左外连接,右外连接,满外连接。
- 左外连接:除了返回满足连接条件的行以外,还返回左表中不满足条件的行。
通过LEFT LEFT JOIN 连接,语法:
#实现查询结果是A
SELECT 字段列表
FROM A表 LEFT JOIN B表
ON 关联条件
WHERE 等其他子句;
此时可以查询到完整左表信息。
- 右外连接:除了返回满足连接条件的行以外,还返回左表中不满足条件的行。
使用RIGHT JOIN 连接。其余同上。
- 满外连接
满外连接的结果 = 左右表匹配的数据 + 左表没有匹配到的数据 + 右表没有匹配到的数据。
SQL99是支持满外连接的。使用FULL JOIN 或 FULL OUTER JOIN来实现。
但是,MySQL不支持FULL JOIN,但是可以用 UNION或UNION ALL 实现。
语法:
SELECT column,... FROM table1
UNION [ALL]
SELECT column,... FROM table2
UNION操作符
UNION 操作符返回两个查询的结果集的并集,去除重复记录。
UNION ALL操作符
UNION ALL操作符返回两个查询的结果集的并集。对于两个结果集的重复部分,不去重。
尽可能使用UNION ALL,提高效率。