表的合并,在SQL里又叫做表的连接。
多表查询:
指的是将两个以上的数据表通过关键字段连接在一起,从不同表中取不同字段进行查询的方法。
关键字段:
1、相连的两表中都有能匹配上的关键字段;
2、表中的关键字段最好是主键,即:不重复,不为空值;
3、如果不是主键就需要用到联合主键,即两表中两个字段联合起来作关键字段。
一、内连接查询
内连接:inner join 简写 join,按照内连接合并两个表,返回两个表中主键相同的行。
通用代码:
SELECT FROM A INNER JOIN B ONA.Key = B.Key;
将上面的表1和表2进行内连接
#内连接
SELECT 信息表.*,成绩表.*
FROM 信息表
INNER JOIN 成绩表
ON 信息表.`学号`=信息表.`学号`;
一对一连接:只要找到关键字段(学号)相同的数据,横向连接起来就可以;
多对多连接:连接关键字段(学号)相同的数据的,但是由于相同学号的数据多于1个,所以最终结果是表相同字段分别和右表的数据相连接。
行数是:左表相同数量和右表相同字段数量相乘,再加上一对一的数量。
二、左连接
左连接: 结果中包括左表的所有行,及关键字段与左表相同的右表的行。
通用代码:
SELECT FROM A LEFT JOIN B ONA.Key = B.Key;
将信息表和成绩表进行左连接
#左连接
SELECT 信息表.*,成绩表.*
FROM 信息表
LEFT JOIN 成绩表
ON 信息表.`学号`=信息表.`学号`;
一对一连接
多对多连接
左连接:学号与左表一致,而不包含右表学号为f的学员
三、右连接
右连接: 结果中除了包括与右表关键字段的左表行,还包括右表的所有行
通用代码:
SELECT FROM A RIGHT JOIN B ONA.Key = B.Key;
将信息表和成绩表进行右连接
#右连接
SELECT 信息表.*,成绩表.*
FROM 信息表
RIGHT JOIN 成绩表
ON 信息表.`学号`=信息表.`学号`;
一对一连接
多对多连接
四、纵向连接
两个表纵向连接的条件:两个表必须列数相同;
去重纵向连接
union: 用于合并两个或多个 SELECT 语句的结果集,并消去表中任何重复行。
通用代码: 用union合并t1与t2表
select t1.* from t1
union
select t2.* from t2;
将两个信息表去重纵向连接
SELECT *FROM 信息表1
UNION
SELECT *FROM 信息表2;
不去重纵向连接
union all:用于合并两个或多个 SELECT 语句的结果集,保留重复行。
通用代码:用union all合并t1与t2表
select t1.* from t1
union all
select t2.* from t2;
将两个信息表不去重纵向连接
SELECT *FROM 信息表1
UNION ALL
SELECT *FROM 信息表2;