文章目录
一. 多表连接
多表查询
,也称为关联查询
,指两个或更多个表一起完成查询操作。
前提条件:
这些一起查询的表之间是有关系的(一对一、一对多),它们之间一定是有关联字段,这个关联字段可能建立了外键,也可能没有建立外键。比如:员工表和部门表,这两个表依靠“部门编号”进行关联。
1.1 笛卡尔积(或交叉连接)
笛卡尔乘积是一个数学运算。假设有两个集合 X
和 Y
,那么 X 和 Y 的笛卡尔积就是 X 和 Y 的所有可能组合,也就是第一个对象来自于 X,第二个对象来自于 Y 的所有可能。组合的个数即为两个集合中元素个数的乘积数
。
二. 多表查询(SQL99语法)
2.1 内连接(INNER JOIN)
SELECT 字段列表
FROM A表 INNER JOIN B表
ON 关联条件
WHERE 等其他子句;
关键字
JOIN
、INNER JOIN
、CROSS JOIN
的含义是一样的,都表示内连接
2.2 外连接(OUTER JOIN)
2.2.1 左外连接(LEFT OUTER JOIN)
#实现查询结果是A
SELECT 字段列表
FROM A表 LEFT JOIN B表
ON 关联条件
WHERE 等其他子句;
2.2.2 右外连接(RIGHT OUTER JOIN)
#实现查询结果是B
SELECT 字段列表
FROM A表 RIGHT JOIN B表
ON 关联条件
WHERE 等其他子句;
2.3 UNION
合并查询结果
利用UNION关键字,可以给出多条SELECT语句,并将它们的结果组合成单个结果集。合并时,两个表对应的列数和数据类型必须相同,并且相互对应。各个SELECT语句之间使用UNION
或UNION ALL
关键字分隔。
语法格式:
SELECT column,... FROM table1
UNION [ALL]
SELECT column,... FROM table2
2.3.1 UNION
UNION 操作符返回两个查询的结果集的并集
,去除重复记录。
2.3.2 UNION ALL
UNION ALL
操作符返回两个查询的结果集的并集。对于两个结果集的重复部分,不去重
。
注意:执行UNION ALL语句时所需要的资源比UNION语句少。如果明确知道合并数据后的结果数据
不存在重复数据,或者不需要去除重复的数据,则尽量使用UNION ALL语句,以提高数据查询的效
率。
三. 总结
SQL的联结可以总结为下图(注意这是SQL语法的总结,有些MySQL没有):