图➕代码,简述MySQL连接查询

1.笛卡尔积

当查询的数据在两种或多张表上时,就需要把两个表进行连接。
2个表连接之后,包含所有可能的表,就是笛卡尔积。
如:A表和B表如下
在这里插入图片描述
他们的笛卡尔积如下:
在这里插入图片描述
而笛卡尔积的数据量过于全面,很难有实际意义,所以一般会在此基础上进行筛选,根据筛选方法的不同,可分为以下几种。

2.连接

INNER JOIN

内连接。比如现在有这样一种需求:想要知道AD的战队。虽然AD和辅助是同一个战队的,但是战队信息只在B表中有,所以A和B表需要进行连接查询。而既然要连接出有意义的表,就得有连接条件。
这里A和B表,很明显可以通过辅助这一列进行连接,A表中的某行,只拼接B表中辅助字段的值与A表中辅助字段的值相同的行。这样一来,结果如下:
在这里插入图片描述
很明显,在笛卡尔积的表中,只有这两列是符合条件的。

LEFT JOIN

这时,我们发现,A表中的Deft,Meimo这行信息,没有了。这是因为B表中没有可以和此行进行连接的行,所以该行信息被舍弃了。而如果我们想要查出所有的下路组合,且战队方面,有信息就显示,没有就显示空,那么就可以用到外连接
我们可以发现,内连接中,左表(A表)有些行和B表进行了连接(可能连接了一行,也可能是多行),而有些没有。对于没有进行连接的行,就进行了舍弃。而外连接,就是在内连接的基础上,把没有连接的行,也进行显示。左外连接,顾名思义,就是显示左表中,所有的行(包括未连接的行)。结果如下:
在这里插入图片描述

RIGHT JOIN

右外连接和类似,只不过是会保留右侧所有的行(包括未连接的行)。不过此例中,右侧的行都进行了连接,所以看不出差别。

FULL JOIN

如果弄清了左外连接,全外连接就是在有连接成功的行的基础上既保留了左侧未连接的行,又保留了右侧未连接的行。

MySQL实例演示

两张表,A表和B表:
在这里插入图片描述

inner join

SELECT * FROM A INNER JOIN B ON A.辅助 = B.辅助

或者(二者等价)

SELECT * FROM A JOIN B ON A.辅助 = B.辅助

在这里插入图片描述
如果使用逗号进行表连接,默认也是内连接:

SELECT * FROM A, B WHERE A.辅助 = B.辅助

left join

SELECT * FROM A  LEFT  JOIN  B ON A.辅助 = B.辅助

在这里插入图片描述

right join

SELECT * from A  RIGHT JOIN  B on A.辅助 = B.辅助

在这里插入图片描述

full join

MySQL没有提供全外连接的关键字,但是可以通过union关键字间接实现。
UNION:将两个查询语句的结果合并,要求两个结果集必须拥有相同数量的列且对应列的数据类型相同。结果集会自动去除重复的行。

SELECT * FROM A  LEFT  JOIN  B ON A.辅助 = B.辅助
UNION
SELECT * from A  RIGHT JOIN  B on A.辅助 = B.辅助 

在这里插入图片描述
这样,就也达到了全外连接的效果。


如果使用UNION ALL则不会去除重复的行:

SELECT * FROM A  LEFT  JOIN  B ON A.辅助 = B.辅助
UNION ALL
SELECT * from A  RIGHT JOIN  B on A.辅助 = B.辅助 

在这里插入图片描述

3.连接条件

我们刚才说的连接,用的是A表的列与B表的另一列做等值判断。其实除了等值判断,连接的条件也可以像where语句一样,是多种多样的。

等值连接

如果进行比较的条件是等号,那么就可以称为等值连接,且所比较的两个列,不一定要是公共列。

自然连接

自然连接是等值连接的特殊情况。他要求进行等值判断的两列,是公共列(名称相同,类型相同),并且连接的条件是等值判断。自然连接后,公共列会进行合并

SELECT * FROM A NATURAL JOIN B 

在这里插入图片描述
如果有多个公共列,则要都对应相等,才会进行连接。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值