请问以下sql子查询的执行顺序是什么?

请问这段sql 的执行顺序是什么?特别是这段
‘where wh_bill.SID=aa.SPID and aa.SItemID=Wh_BillSub.SItemID’
起到什么作用呢?


select
    (select distinct Sa_Order.SNO
     from Wh_BillSub as aa
    left join Sa_Order on sa_order.SID=aa.SSaOrderID
    where wh_bill.SID=aa.SPID and aa.SItemID=Wh_BillSub.SItemID
    for xml path(''))
from Wh_Bill
inner join Wh_BillSub on wh_bill.SID=Wh_BillSub.SPID

where是筛选器做匹配记录用的,Order 表中找到唯一订单号列表,在根据订单id号两个表做匹配筛选以 XML 字符串的形式返回,执行顺序需要你去看Tsql高级部分,读语句:from-join-on-where-group by-having-select-order by,了解投影选择链接的顺序,如果是刚开始学习,这部分还是较容易的

先关联查出SNO,然后对关联之后的数据进行筛选,筛选出符合 wh_bill.SID=aa.SPID and aa.SItemID=Wh_BillSub.SItemID的数据

这张图我感觉很棒。

img


20190909144440851.png

①执行FROM 子句 
②执行inner join
③执行SELECT子句
      其中SELECT子句括号中的执行顺序是
                           ①from Wh_BillSub as aa
                                ②left join Sa_Order on sa_order.SID
                                ③where wh_bill.SID=aa.SPID
                                ④SELECT  distinct Sa_Order.SNO