表的合并,在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;