(SQL語句執行順序是什麼樣的呢)
select語句定義如下:
<SELECT clause> [<FROM clause>] [<WHERE clause>] [<GROUP BY clause>] [<HAVING clause>] [<ORDER BY clause>] [<LIMIT clause>]
先給出SQL語句執行順序結論,後通過案例分析:
- 最先執行from tab;
- where語句是對條件加以限定;
- 執行分組語句group by
- 執行分組函數
- 執行分組後過濾having
- select語句。
- order by排序語句。
Select 6
...
分組函數(avg、sum等) 4
...
From 1
...
where 2
...
group by 3
...
having 5
...
order by 7
案例SQL執行分析
select deptno ,avg(sal) from emp where ename is not null group by deptno having avg(sal)>2000 order by deptno desc;
- 先确定從哪個表中取資料,是以最先執行from emp。如果存在多表連接配接,from tab1,tab2。可以對表加别名,友善後面的引用。
- 執行 where子句, 篩選 emp 表中ename資料不為 null的資料 。
- 執行 group by 子句, 把 emp 表按 "deptno" 進行分組。
- 執行 avg(sal) 分組函數, 按分組計算平均工資(sal)數值。 (常用的聚合函數有max,min, count,sum,聚合函數的執行在group by之後,having之前。如果在where中寫聚合函數,就會出錯。)
- 執行 having 子句, 篩選平均薪資大于2000的。
- 執行select選出要查找的字段,如果全選可以select *。這裡選出部門編号,各部門平均工資。
- 執行order by 排序語句。order by語句在最後執行,隻有select選出要查找的字段,才能進行排序。