select * from a,b 记录

本文深入解析SQL中的笛卡尔乘积概念及其与内连接、左连接、右连接的区别。阐述了不同连接方式的执行顺序和效率问题,帮助读者理解如何优化SQL查询。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

仅作为记录用来翻阅提醒,因为老忘:


1、

select * from a,b

为笛卡尔乘积,对笛卡尔乘积概念不熟的呢就自行搜索百科复习一下;

2、

select * from a,b where a.c=b.c 


等价于select * from a inner join b on a.c=b.c;

3、

select * from a left join b on a.c=b.c


将a表查询的结果去b中做匹配,匹配不到的就显示为null,所以返回的总数为表a中行数;

4、

select * from a right join b on a.c=b.c 


与上相反,将b表结果拿去和a做匹配,匹配不到为null,返回总行数为b表行数。

总结:

单纯的select * from a,b是笛卡尔乘积。

但是如果对两个表进行关联:select * from a,b where a.id = b.id 意思就变了,此时就等价于:

select * from a inner join b on a.id = b.id。即就是内连接。

执行顺序以及效率问题:

1.首先了解 on 、where 的执行顺序以及效率?

from a join b 与 from a, b 产生的临时表结果集 。

都是执行笛卡尔积即(select * from a cross join b )两表的行乘积数。

on :与取得结果集同步进行数据刷选及过滤。

where : 获得结果集之后,才进行数据刷选及过滤。

执行顺序:on在上游,where在中游,having在下游。
 

2、select * from a,b where a.c=b.c 等价于 inner joinselect * from a, b where a.c=b.c (先取后算)
select * from a inner join b on a.c=b.c (取中带算)

性能方面inner join较好

最好直接写成inner join的写法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值