天天看點

SQL語句執行順序是什麼樣的呢

(SQL語句執行順序是什麼樣的呢)

select語句定義如下:

<SELECT clause> [<FROM clause>] [<WHERE clause>] [<GROUP BY clause>] [<HAVING clause>] [<ORDER BY clause>] [<LIMIT clause>] 
           

先給出SQL語句執行順序結論,後通過案例分析:

  1. 最先執行from tab;
  2. where語句是對條件加以限定;
  3. 執行分組語句group by
  4. 執行分組函數
  5. 執行分組後過濾having
  6. select語句。
  7. 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;
           
  1. 先确定從哪個表中取資料,是以最先執行from emp。如果存在多表連接配接,from tab1,tab2。可以對表加别名,友善後面的引用。
  2. 執行 where子句, 篩選 emp 表中ename資料不為 null的資料 。
  3. 執行 group by 子句, 把 emp 表按 "deptno" 進行分組。
  4. 執行 avg(sal) 分組函數, 按分組計算平均工資(sal)數值。 (常用的聚合函數有max,min, count,sum,聚合函數的執行在group by之後,having之前。如果在where中寫聚合函數,就會出錯。)
  5. 執行 having 子句, 篩選平均薪資大于2000的。
  6. 執行select選出要查找的字段,如果全選可以select *。這裡選出部門編号,各部門平均工資。
  7. 執行order by 排序語句。order by語句在最後執行,隻有select選出要查找的字段,才能進行排序。