Mysql 中多表查询

Mysql 中多表查询

即mysql中的交叉查询、内连接、左连接、右连接、联合查询、全连接。
交叉查询: cross join
我们现在以这两张表为例;
在这里插入图片描述
刚刚我们是通过两条语句来查询的两张表,现在我们尝试着用一条语句来查询这两张表;
在这里插入图片描述
上图中,我们看到我们查询出来了,语句中并没有添加别的附加条件,仔细观察课可以发现,这两张表中的每一行记录都与另外一张表的任意一行记录相关联。
也就是说这两张表的数据交叉连接在了一起;如下图展示;
在这里插入图片描述
我们把上述“没有任何限制条件的连接方式”称为“交叉连接”,其得到的结果更线性代数中的“笛卡尔乘积”一样样的。
交叉连接 英文是“cross join” 交叉连接有两种写法;
在这里插入图片描述
在这里插入图片描述
在这里建议使用第一种写法,第一种是官方建议的最标准的写法;刚刚我们只用了两张表做示例;比如将三张表啊,a,b,c 用“cross join”连接起来;
Select * from a cross join b cross join c;
Select * from a,b,c;
这两种都可以用,结果都是一样的。
内连接:inner join
这里还是以我们刚刚的那两张表为例,(student、course);
内连接就是“把两张表中同时符合某种条件的数据记录的组合”;
在这里插入图片描述
在上图中第一张语法是官方最标准的写法,建议大家尽量采用第一种写法。
内连接的两张表用“inner join”连接在一起,用“on”说明“条件”。
我们刚才“内连接”与“交叉连接”的不同之处就是“内连接”比“交叉连接”多个限定条件,那我们如果把“内连接”的限定条件去掉,那得出的结果会不会一样呢,我们做个小实验;

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
从结果来看并没有什么不同,那我们反过来在验证一下,试着在“交叉连接”上附加一条限制条件看看是否与“内连接”查询到的结果是否一样;
在这里插入图片描述
好了,这样的结果似乎可以将”cross join”与”inner join”互相替换,但是在通用的sql标准中这两个是不同的。
在这里我们可以这样来理解“内连接”,就是查询出的结果是这两个表中“同时满足条件的数据”的组合,我们不能单纯的用交集表示“内连接”。
在这里插入图片描述
这里的交集并不是“集合”而是为了方便理解,用交集表示两个表中,同时满足条件的数据的组合;
其实“内连接”除了“等连接”还有“不等连接”,还有一种叫法“自连接”
我现在做了一张表;
在这里插入图片描述
这张表放的是学生的id,他们之间互相学习,所以表中的tid对应学生的id,name我们通过“自连接”,查出每个学生的老师的名字;
在这里插入图片描述
自连接就是把同一张表当做两张表连接起来。
外链接:left join,right join
外链接分为左连接和右连接
我们现在将student表和course表这两张表进行左连接;
在这里插入图片描述
可以看到这与我们之前查询的内连接有一部分相同,但又不完全相同;我们看一下;
在这里插入图片描述
多出来的那几行记录是student表中的id号为5、6、7的一条空记录组成的。

左连接不仅会查询出两个表中同时符合记录的组合,同时还会将左侧的表中不符合条件的记录同时展示出来,由于左侧表中的这一部分记录并不符合条件,,所以这一部分记录使用空记录进行连接。
经过以上描述,那么右连接也是如此。
但是有的时候,有可能所有的记录都符合条件,这是就不会出现空记录连接的情况了。
在这里插入图片描述
联合查询:union 与 union all
联合查询就是把多个查询语句集合到一起显示;
Select id,sorce,course from student union select id,sorcr,course from course;
在这里插入图片描述
当使用union连接两个查询语句时,两个语句查询出的数量必须相同;
当我们查询的两张表中有同样的记录时,使用union会把他合并为一条
如果不想让他合并的话,可以使用union all ;
在这里插入图片描述
全连接:full join
在mysql中并不支持全连接,准确的说,我们可以变相的实现全连接,我们使用left join、union、right join 组合实现所谓的全连接。
在这里插入图片描述
全连接也一样可以添加更多的连接条件;
在这里插入图片描述
好啦,就到这里把。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值