sql left join 的执行顺序

sql left join 的执行顺序,第1张

SQL语句执行的时候是有一定顺序的。理解这个顺序对SQL的使用和学习有很大的帮助。

1.from   先选择一个表,或者说源头,构成一个结果集。

2.where 然后用where对结果集进行筛选。筛选出需要的信息形成新的结果集.

3.group by 对新的结果集分组.

4.having 筛选出想要的分组.

5.select 选择列

6.order by 当所有的条件都弄完了。最后排序

我的理解是这样,SQL语句中无论是否连接的其他表。 无论如何都要先形成一个结果集。后面的顺序不变!

只不过使用连接时,形成结果集合的方式略有不同。这个和 Left Join的实现原理有关。

select a.name,b.name

from T_left a            //1

Left Join T_Right b   //3

ON  a.id = b.id         //2

使用Left Join 形成结果集的方式是这样的。

.  首先对From子句中的前两个表,执行笛卡尔积运算。运算结果 形成一个结果集合。

.  ON按条件,对上边的结果集,进行筛选,形成新的结果集。

.  以左连接为例,如果T_left中存在未匹配到的行。那么把T_left中的这几行以外部行的形式加到上边的结果集中形成新的结果集。

 如果存在多张表,重复1~3过程!

select * from A left join B on A.aid = B.bid right join C on A.aid =C.cid

// 最终返回的是 C 表中的数据

1.A left join B 返回A表数据,附带B表中符合条件的数据 

2.A left join B 假设等于结果 AB 

3.AB right join C 返回C,附带AB中符合条件的数据

您好,SQL语句有join是因为把优化后的数据重新联结完整,体现直观数据表达的作用.(这样讲可能还是太抽象).

我们做数据优化的时候.一般要理清楚数据实体的关联关系.

例如:E-R

所以先后顺序的问题.

left join的话.

第一张表就是主体表

后面的都是与这张表有关联关系的表(一般是明细表,辅表)

把主体表与left join tablename的关联字段作为on条件

希望我的回答能帮助您理解.

你好。

执行顺序和数据库有关的。

如果你的数据库是SQL Server,你的理解是正确的。

ORACLE是从后往前解析,SQL Server则是从前往后。

如果对这方面比较感兴趣,SQL Server推荐一本书

《Microsoft SQL SERVER 2008技术内幕 T-SQL查询(中文)》,其中有讲逻辑查询处理阶段详解。

(在网上应该容易找到的,不行的话加我qq(知道号))

如果是Oracle的话,可以查一下优化器相关。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/10050014.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-04
下一篇 2023-05-04

发表评论

登录后才能评论

评论列表(0条)

保存