【MySQL】SQL語句的基本執(zhí)行順序詳解

一、基本SQL語句

1犯祠、基本執(zhí)行順序

  • \color{red} {7} SELECT

  • \color{red} {8} DISTINGCT(T1.name)

  • \color{red} {1} FROM table_name1 T1

  • \color{red} {3} JOIN table_name2 T2

  • \color{red} {2} ON T2.t1_id = T1.id

  • \color{red} {4} WHERE T1.name = 'test'

  • \color{red} {5} GROUP BY T1.class

  • \color{red} {6} HAVING AVG(T1.age)

  • \color{red} {9} ORDER BY createTime DESC

  • \color{red} {10} LIMIT 1,10;

2旭等、說明

  • FORM: 對FROM的左邊的表和右邊的表計算笛卡爾積。產(chǎn)生虛表VT1

  • ON: 對虛表VT1進行ON篩選衡载,只有那些符合<join-condition>的行才會被記錄在虛表VT2中搔耕。

  • JOIN: 如果指定了OUTER JOIN(比如left join、 right join)痰娱,那么保留表中未匹配的行就會作為外部行添加到虛擬表VT2中弃榨,產(chǎn)生虛擬表VT3, rug from子句中包含兩個以上的表的話,那么就會對上一個join連接產(chǎn)生的結(jié)果VT3和下一個表重復(fù)執(zhí)行步驟1~3這三個步驟梨睁,一直到處理完所有的表為止鲸睛。

  • WHERE: 對虛擬表VT3進行WHERE條件過濾。只有符合<where-condition>的記錄才會被插入到虛擬表VT4中

  • GROUP BY: 根據(jù)group by子句中的列坡贺,對VT4中的記錄進行分組操作官辈,產(chǎn)生VT5.

  • CUBE | ROLLUP: 對表VT5進行cube或者rollup操作,產(chǎn)生表VT6.

  • HAVING: 對虛擬表VT6應(yīng)用having過濾遍坟,只有符合<having-condition>的記錄才會被 插入到虛擬表VT7中拳亿。

  • SELECT: 執(zhí)行select操作,選擇指定的列愿伴,插入到虛擬表VT8中肺魁。

  • DISTINCT: 對VT8中的記錄進行去重。產(chǎn)生虛擬表VT9.

  • ORDER BY: 將虛擬表VT9中的記錄按照<order_by_list>進行排序操作隔节,產(chǎn)生虛擬表VT10.

  • LIMIT:取出指定行的記錄鹅经,產(chǎn)生虛擬表VT11, 并將結(jié)果返回。

  • 寫的順序:
select ... from. where.. group by.. having.. order by.. limit [offset,] (rows)
  • 執(zhí)行順序:
from... where...group by... having.... select ... order by... limit

3怎诫、WHERE瘾晃、HAVING 的區(qū)別

  • WHERE 是一個約束聲明,使用Where來約束來之?dāng)?shù)據(jù)庫的數(shù)據(jù)刽虹,Where是在結(jié)果返回之前起作用的酗捌,且Where中不能使用聚合函數(shù)。

  • HAVING是一個過濾聲明,是在查詢返回結(jié)果集以后對查詢結(jié)果進行的過濾操作胖缤,在Having中可以使用聚合函數(shù)尚镰。

  • HAVING子句可以讓我們篩選成組后的各組數(shù)據(jù),WHERE子句在聚合前先篩選記錄,也就是說作用在GROUP BY 子句和HAVING子句前哪廓;而HAVING子句在聚合后對組記錄進行篩選狗唉。

1、實例

  • 顯示每個地區(qū)的總?cè)丝跀?shù)和總面積:
SELECT region, SUM(population), SUM(area)
FROM bbc
GROUP BY region

先以region把返回記錄分成多個組涡真,這就是GROUP BY的字面含義分俯。分完組后,然后用聚合函數(shù)對每組中的不同字段(一或多條記錄)作運算哆料。

  • 顯示每個地區(qū)的總?cè)丝跀?shù)和總面積.僅顯示那些人口數(shù)量超過1000000的地區(qū)缸剪。并通過sum后的字段進行排序
SELECT region, SUM(population), SUM(area)
FROM bbc
GROUP BY region
HAVING SUM(population)>1000000
ORDER BY sum(population) desc

<font color='red'>用having就一定要和group by連用,
用group by不一有having (它只是一個篩選條件用的)</font>


二东亦、聚合函數(shù)

1杏节、常用聚合函數(shù)

  • 平均值AVG
  • 標(biāo)準(zhǔn)偏差STDEV
  • 方差VAR
  • 最大值MAX
  • 最小值MIN
  • 合計SUM
  • 次數(shù)COUNT
  • 極差值MAX-MIN
  • 變異系數(shù)STDEV/AVG*100
SELECT  Name AS '射擊手' ,
        AVG(Score) AS '平均值' ,
        STDEV(Score) AS '標(biāo)準(zhǔn)偏差' ,
        VAR(Score) AS '方差' ,
        MAX(Score) AS '最大值' ,
        MIN(Score) AS '最小值' ,
        MAX(Score) - MIN(Score) AS '極差值' ,
        STDEV(Score) / AVG(Score) AS '變異系數(shù)' ,
        COUNT(Score) AS '次數(shù)'
FROM    @t1
GROUP BY Name

2、為什么要用標(biāo)準(zhǔn)差?

方差和標(biāo)準(zhǔn)差時表示一組數(shù)據(jù)離散程度的最好指標(biāo)典阵,是最常用的差異量數(shù)奋渔。

  • 其特點有:

    • 1、反應(yīng)靈敏壮啊,每個數(shù)據(jù)變化都應(yīng)在方差上體現(xiàn)嫉鲸;
    • 2、計算嚴(yán)密歹啼;
    • 3玄渗、容易計算;
    • 4狸眼、適合代數(shù)運算捻爷;
    • 5、受抽樣變動影響蟹萜蟆;
    • 6巡莹、簡單明了司志;
    • 7、容易受極端數(shù)據(jù)影響降宅。
  • 計算方差的步驟可概括為“先平均骂远,后求差,平方后腰根,再平均”.

  • 方差用來衡量一批數(shù)據(jù)的波動大小.(即這批數(shù)據(jù)偏離平均數(shù)的大小).

  • 方差越大,說明數(shù)據(jù)的波動越大,越不穩(wěn)定.

3激才、變異系數(shù):

變異系數(shù)又稱“標(biāo)準(zhǔn)差率”,是衡量資料中各觀測值變異程度的另一個統(tǒng)計量。當(dāng)進行兩個或多個資料變異程度的比較時瘸恼,如果度量單位與平均數(shù)相同劣挫,可以直接利用標(biāo)準(zhǔn)差來比較。如果單位和(或)平均數(shù)不同時东帅,比較其變異程度就不能采用標(biāo)準(zhǔn)差压固,而需采用標(biāo)準(zhǔn)差與平均數(shù)的比值(相對值)來比較。

4靠闭、極差值:

指一組數(shù)據(jù)中最大數(shù)據(jù)與最小數(shù)據(jù)的差帐我,在統(tǒng)計中常用極差來刻畫一組數(shù)據(jù)的離散程度。

4愧膀、注意

  • having放在group by 的后面

  • group by 后面只能放非聚合函數(shù)的列

  • where 子句的作用是在對查詢結(jié)果進行分組前拦键,將不符合where條件的行去掉,即在分組之前過濾數(shù)據(jù)檩淋,條件中不能包含聚組函數(shù)芬为,使用where條件顯示特定的行。

  • having 子句的作用是篩選滿足條件的組狼钮,即在分組之后過濾數(shù)據(jù)碳柱,條件中經(jīng)常包含聚組函數(shù),使用having 條件顯示特定的組熬芜,也可以使用多個分組標(biāo)準(zhǔn)進行分組莲镣。

  • 用having就一定要和group by連用,

  • 用group by不一有having (它只是一個篩選條件用的

三涎拉、實例

  • 查詢每個租戶對應(yīng)的用戶數(shù)量瑞侮,且用戶數(shù)量大于10,并且以數(shù)量倒序排序
SELECT a.tenantId,COUNT(1) 
FROM fsmuserex a 
WHERE !a.deleted 
GROUP BY a.tenantId 
HAVING COUNT(1) > 10 
ORDER BY COUNT(1) DESC;
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末鼓拧,一起剝皮案震驚了整個濱河市半火,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌季俩,老刑警劉巖钮糖,帶你破解...
    沈念sama閱讀 221,548評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異酌住,居然都是意外死亡店归,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,497評論 3 399
  • 文/潘曉璐 我一進店門酪我,熙熙樓的掌柜王于貴愁眉苦臉地迎上來消痛,“玉大人,你說我怎么就攤上這事都哭≈壬。” “怎么了逞带?”我有些...
    開封第一講書人閱讀 167,990評論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長纱新。 經(jīng)常有香客問我展氓,道長,這世上最難降的妖魔是什么怒炸? 我笑而不...
    開封第一講書人閱讀 59,618評論 1 296
  • 正文 為了忘掉前任带饱,我火速辦了婚禮,結(jié)果婚禮上阅羹,老公的妹妹穿的比我還像新娘勺疼。我一直安慰自己,他們只是感情好捏鱼,可當(dāng)我...
    茶點故事閱讀 68,618評論 6 397
  • 文/花漫 我一把揭開白布执庐。 她就那樣靜靜地躺著,像睡著了一般导梆。 火紅的嫁衣襯著肌膚如雪轨淌。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,246評論 1 308
  • 那天看尼,我揣著相機與錄音递鹉,去河邊找鬼。 笑死藏斩,一個胖子當(dāng)著我的面吹牛躏结,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播狰域,決...
    沈念sama閱讀 40,819評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼媳拴,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了兆览?” 一聲冷哼從身側(cè)響起屈溉,我...
    開封第一講書人閱讀 39,725評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎抬探,沒想到半個月后子巾,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,268評論 1 320
  • 正文 獨居荒郊野嶺守林人離奇死亡小压,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,356評論 3 340
  • 正文 我和宋清朗相戀三年砰左,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片场航。...
    茶點故事閱讀 40,488評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖廉羔,靈堂內(nèi)的尸體忽然破棺而出溉痢,到底是詐尸還是另有隱情僻造,我是刑警寧澤,帶...
    沈念sama閱讀 36,181評論 5 350
  • 正文 年R本政府宣布孩饼,位于F島的核電站髓削,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏镀娶。R本人自食惡果不足惜立膛,卻給世界環(huán)境...
    茶點故事閱讀 41,862評論 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望梯码。 院中可真熱鬧宝泵,春花似錦、人聲如沸轩娶。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,331評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽鳄抒。三九已至闯捎,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間许溅,已是汗流浹背瓤鼻。 一陣腳步聲響...
    開封第一講書人閱讀 33,445評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留贤重,地道東北人茬祷。 一個月前我還...
    沈念sama閱讀 48,897評論 3 376
  • 正文 我出身青樓,卻偏偏與公主長得像游桩,于是被迫代替她去往敵國和親牲迫。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,500評論 2 359