- 以下两行语句的区别在哪呢
语句1:SELECT * FROM A LEFT JOIN B ON (A.number=B.number)WHERE B.number=2;
语句2:SELECT * FROM A LEFT JOIN B ON (A.number=B.number AND B.number=2);
- 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个元素的集合