1. 程式人生 > >標準sql語句執行分析

標準sql語句執行分析

標準sql語句執行分析
SELECT count() as “人數” ,round(avg(reseau),2) as “平均工資”
FROM (
select t.
,serial,shopaddress ,rownum as rn
FROM (
SELECT openid,account,city,reseau,createTime,name
FROM sys_usermgr_gzhuser
WHERE appid=‘wx974429c0e031da47’ and CREATETime is not null and reseau is not null
ORDER BY createtime asc
) t
LEFT JOIN businesshall b
ON t.city=b.city
WHERE rownum<=100

)
WHERE rn>0
GROUP BY city
HAVING
round(avg(reseau),2)>2000
ORDER BY count(*) asc
標準sql執行順序:
1.FROM:對FROM子句中的前兩個表執行笛卡爾積(Cartesian product)(交叉聯接),生成虛擬表VT1
2.ON:對VT1應用ON篩選器。只有那些使<join_condition>為真的行才被插入VT2。
3.OUTER(JOIN):如 果指定了OUTER JOIN(相對於CROSS JOIN 或(INNER JOIN),保留表(preserved table:左外部聯接把左表標記為保留表,右外部聯接把右表標記為保留表,完全外部聯接把兩個表都標記為保留表)中未找到匹配的行將作為外部行新增到 VT2,生成VT3.如果FROM子句包含兩個以上的表,則對上一個聯接生成的結果表和下一個表重複執行步驟1到步驟3,直到處理完所有的表為止。
4.WHERE:對VT3應用WHERE篩選器。只有使<where_condition>為true的行才被插入VT4.
5.GROUP BY:按GROUP BY子句中的列列表對VT4中的行分組,生成VT5.
6.CUBE|ROLLUP:把超組(Suppergroups)插入VT5,生成VT6.
7.HAVING:對VT6應用HAVING篩選器。只有使<having_condition>為true的組才會被插入VT7.
8.SELECT:處理SELECT列表,產生VT8.
9.DISTINCT:將重複的行從VT8中移除,產生VT9.
10.ORDER BY:將VT9中的行按ORDER BY 子句中的列列表排序,生成遊標(VC10).
11.TOP:從VC10的開始處選擇指定數量或比例的行,生成表VT11,並返回呼叫者。