数据库学习笔记—SQL的语句执行顺序,ON,WHERE,HAVING的关系

  • 以下两行语句的区别在哪呢
语句1SELECT * FROM A LEFT JOIN B ON (A.number=B.number)WHERE B.number=2;
语句2SELECT * FROM A LEFT JOIN B ON (A.number=B.number AND B.number=2);
图1
  • SQL的语句执行顺序

我的思维理解:先将一个表格看作一个集合,每行记录是一个n元的元组。
1.先执行FROM语句,将A与B进行笛卡尔积得到一个九个元组的集合(集合1);
2.再执行ON语句对集合进行筛选(集合2);
3.执行A LEFT JOIN B 语句将集合2中满足ON()条件的元组插入A中各个元组中(A中未被插入的则认为是NULL)(得到集合3);
4.若FROM后为3个或3个以上,则将C与集合3重复一次1,2,3过程得到集合4;
5.用WHERE筛选器将集合4筛选出满足条件的元组(得到集合5);
6.执行GROUP BY语句将集合5内元组重新分组(得到集合6);
7.执行HAVING语句将集合6进行计算
8.执行SELECT语句得到集合6;
9.执行DISTINCT 语句将集合6进行去重复得到集合7;
10.执行ORDER BY 语句将集合7排序得到结果。

  • 结论
    语句1

1先AXB得到一个9元素的集合
2.on筛选得到一个3个元素的集合
3.left join 得到4个元素的集合

4.where 执行得到一个2个元素的集合

语句二

1.先AXB得到一个9元素的集合
2.on筛选得到一个2个元素的集合

3.left join得到一个4个元素的集合

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值