欧美阿v视频在线大全_亚洲欧美中文日韩V在线观看_www性欧美日韩欧美91_亚洲欧美日韩久久精品

主頁 > 知識庫 > 關(guān)于sql和mysql對于別名不能調(diào)用的一些理解

關(guān)于sql和mysql對于別名不能調(diào)用的一些理解

熱門標簽:云南全自動外呼系統(tǒng)公司 競圣地圖標注服務(wù) 外呼系統(tǒng)的話術(shù) 陽光創(chuàng)信ai外呼獲客系統(tǒng)助力 安陽天音防封電銷卡 智能語音車載電話機器人 智能外呼系統(tǒng)需要多少錢 貴州外呼回撥系統(tǒng)是什么 衛(wèi)星地圖標注距離

在寫sql的時候,由于有部分語句別名不能調(diào)用,百度了一下原因,原來是由于別名機制不同引起的。為了避免下一次再犯同樣的錯誤,今天把網(wǎng)上找到資料總結(jié)了一下,sql和mysql執(zhí)行順序,發(fā)現(xiàn)內(nèi)部機制是一樣的。最大區(qū)別是在別名的引用上。

一、sql執(zhí)行順序
(1)from
(3) join
(2) on
(4) where
(5)group by
(6) avg,sum....
(7)having
(8) select
(9) distinct
(10) order by

從這個順序中我們不難發(fā)現(xiàn),所有的 查詢語句都是從from開始執(zhí)行的,在執(zhí)行過程中,每個步驟都會為下一個步驟生成一個虛擬表,這個虛擬表將作為下一個執(zhí)行步驟的輸入。
第一步:首先對from子句中的前兩個表執(zhí)行一個笛卡爾乘積,此時生成虛擬表 vt1(選擇相對小的表做基礎(chǔ)表)
第二步:接下來便是應(yīng)用on篩選器,on 中的邏輯表達式將應(yīng)用到 vt1 中的各個行,篩選出滿足on邏輯表達式的行,生成虛擬表 vt2
第三步:如果是outer join 那么這一步就將添加外部行,left outer jion 就把左表在第二步中過濾的添加進來,如果是right outer join 那么就將右表在第二步中過濾掉的行添加進來,這樣生成虛擬表 vt3
第四步:如果 from 子句中的表數(shù)目多余兩個表,那么就將vt3和第三個表連接從而計算笛卡爾乘積,生成虛擬表,該過程就是一個重復(fù)1-3的步驟,最終得到一個新的虛擬表 vt3。
第五步:應(yīng)用where篩選器,對上一步生產(chǎn)的虛擬表引用where篩選器,生成虛擬表vt4,在這有個比較重要的細節(jié)不得不說一下,對于包含outer join子句的查詢,就有一個讓人感到困惑的問題,到底在on篩選器還是用where篩選器指定邏輯表達式呢?on和where的最大區(qū)別在于,如果在on應(yīng)用邏輯表達式那么在第三步outer join中還可以把移除的行再次添加回來,而where的移除的最終的。舉個簡單的例子,有一個學(xué)生表(班級,姓名)和一個成績表(姓名,成績),我現(xiàn)在需要返回一個x班級的全體同學(xué)的成績,但是這個班級有幾個學(xué)生缺考,也就是說在成績表中沒有記錄。為了得到我們預(yù)期的結(jié)果我們就需要在on子句指定學(xué)生和成績表的關(guān)系(學(xué)生.姓名=成績.姓名)那么我們是否發(fā)現(xiàn)在執(zhí)行第二步的時候,對于沒有參加考試的學(xué)生記錄就不會出現(xiàn)在vt2中,因為他們被on的邏輯表達式過濾掉了,但是我們用left outer join就可以把左表(學(xué)生)中沒有參加考試的學(xué)生找回來,因為我們想返回的是x班級的所有學(xué)生,如果在on中應(yīng)用學(xué)生.班級='x'的話,那么在left outer join 中就會將不會把x班級的學(xué)生的所有記錄找回來,所以只能在where篩選器中應(yīng)用學(xué)生.班級='x' 因為它的過濾是最終的。
第六步:group by 子句將中的唯一的值組合成為一組,得到虛擬表vt5。如果應(yīng)用了group by,那么后面的所有步驟都只能得到的vt5的列或者是聚合函數(shù)(count、sum、avg等)。原因在于最終的結(jié)果集中只為每個組包含一行。這一點請牢記。
第七步:應(yīng)用cube或者rollup選項,為vt5生成超組,生成vt6.
第八步:應(yīng)用having篩選器,生成vt7。having篩選器是第一個也是為唯一一個應(yīng)用到已分組數(shù)據(jù)的篩選器。
第九步:處理select子句。將vt7中的在select中出現(xiàn)的列篩選出來。生成vt8.
第十步:應(yīng)用distinct子句,vt8中移除相同的行,生成vt9。事實上如果應(yīng)用了group by子句那么distinct是多余的,原因同樣在于,分組的時候是將列中唯一的值分成一組,同時只為每一組返回一行記錄,那么所以的記錄都將是不相同的。
第十一步:應(yīng)用order by子句。按照order_by_condition排序vt9,此時返回的一個游標,而不是虛擬表。sql是基于集合的理論的,集合不會預(yù)先對他的行排序,它只是成員的邏輯集合,成員的順序是無關(guān)緊要的。對表進行排序的查詢可以返回一個對象,這個對象包含特定的物理順序的邏輯組織。這個對象就叫游標。正因為返回值是游標,那么使用order by 子句查詢不能應(yīng)用于表表達式。排序是很需要成本的,除非你必須要排序,否則最好不要指定order by,最后,在這一步中是第一個也是唯一一個可以使用select列表中別名的步驟。
第十二步:應(yīng)用top選項。此時才返回結(jié)果給請求者即用戶。

二、mysql的執(zhí)行順序
SELECT語句定義
一個完成的SELECT語句包含可選的幾個子句。SELECT語句的定義如下:
SQL代碼

復(fù)制代碼 代碼如下:

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


SELECT子句是必選的,其它子句如WHERE子句、GROUP BY子句等是可選的。
一個SELECT語句中,子句的順序是固定的。例如GROUP BY子句不會位于WHERE子句的前面。

SELECT語句執(zhí)行順序
SELECT語句中子句的執(zhí)行順序與SELECT語句中子句的輸入順序是不一樣的,所以并不是從SELECT子句開始執(zhí)行的,而是按照下面的順序執(zhí)行:
開始->FROM子句->WHERE子句->GROUP BY子句->HAVING子句->ORDER BY子句->SELECT子句->LIMIT子句->最終結(jié)果
每個子句執(zhí)行后都會產(chǎn)生一個中間結(jié)果,供接下來的子句使用,如果不存在某個子句,就跳過
對比了一下,mysql和sql執(zhí)行順序基本是一樣的, 標準順序的 SQL 語句為:

SQL代碼
復(fù)制代碼 代碼如下:

select 考生姓名, max(總成績) as max總成績

from tb_Grade

where 考生姓名 is not null

group by 考生姓名

having max(總成績) > 600

order by max總成績

   在上面的示例中 SQL 語句的執(zhí)行順序如下:

   (1). 首先執(zhí)行 FROM 子句, 從 tb_Grade 表組裝數(shù)據(jù)源的數(shù)據(jù)

   (2). 執(zhí)行 WHERE 子句, 篩選 tb_Grade 表中所有數(shù)據(jù)不為 NULL 的數(shù)據(jù)

   (3). 執(zhí)行 GROUP BY 子句, 把 tb_Grade 表按 "學(xué)生姓名" 列進行分組

   (4). 計算 max() 聚集函數(shù), 按 "總成績" 求出總成績中最大的一些數(shù)值

   (5). 執(zhí)行 HAVING 子句, 篩選課程的總成績大于 600 分的.

   (7). 執(zhí)行 ORDER BY 子句, 把最后的結(jié)果按 "Max 成績" 進行排序.

下面以一個實例來說明別名不能用的根本原因:

例子 一

SQL代碼
復(fù)制代碼 代碼如下:

select m.mname as username,
avg(s.score) as rscore,
(case
when avg(s.score) 60 then
'差'
when avg(s.score) >= 60 and avg(s.score) = 80 then
'良'
when avg(s.score) > 80 and avg(s.score) = 100 then
'優(yōu)'
else
'不合法'
end)
from score s, student m
where s.mid = m.mid
group by m.mname
order by rscore desc;

假如把case 里面avg(s.score)改成別名rscore 在sql下運行就報錯了

例子二

SQL代碼
復(fù)制代碼 代碼如下:

select count( *) as c from score group by mid having count(*)>2;

假如把having 里面的count( *)換成別名c,這句在sql里面就變成錯誤的了,在 mysql下是正確的,百思不得其解,給朋友指點了一下,終于理解通了,下面是說明:
GroupBy和Having,Where,Orderby語句的執(zhí)行順序:
最后要說明一下的GroupBy,Having,Where,Orderby幾個語句的執(zhí)行順序。一個SQL語句往往會產(chǎn)生多個臨時視圖,那么這些關(guān)鍵字的執(zhí)行順序就非常重要了,因為你必須了解這個關(guān)鍵字是在對應(yīng)視圖形成前的字段進行操作還是對形成的臨時視圖進行操作,這個問題在使用了別名的視圖尤其重要。以上列舉的關(guān)鍵字是按照如下順序進行執(zhí)行的:Where,GroupBy,Having,Orderby。首先where將最原始記錄中不滿足條件的記錄刪除,然后通過GroupBy關(guān)鍵字后面指定的分組條件將篩選得到的視圖進行分組,接著系統(tǒng)根據(jù)Having關(guān)鍵字后面指定的篩選條件,將分組視圖后不滿足條件的記錄篩選掉,然后按照OrderBy語句對視圖進行排序,這樣最終的結(jié)果就產(chǎn)生了。在這四個關(guān)鍵字中,只有在OrderBy語句中才可以使用最終視圖的列名,如:

SQL代碼
復(fù)制代碼 代碼如下:

SELECT FruitName,ProductPlace,Price,ID AS IDE,Discount FROMT_TEST_FRUITINFO WHERE ORDER BY IDE

這里只有在ORDERBY語句中才可以使用IDE,其他條件語句中假如需要引用列名則只能使用ID,而不能使用IDE。

您可能感興趣的文章:
  • Mysql聯(lián)合查詢UNION和UNION ALL的使用介紹
  • MySQL中union和order by同時使用的實現(xiàn)方法
  • Mysql聯(lián)合查詢UNION和Order by同時使用報錯問題的解決辦法
  • MySQL union 語法代碼示例分析
  • 淺析mysql union和union all
  • MySQL中使用表別名與字段別名的基本教程
  • MySQL筆記之別名的使用
  • MySQL Union合并查詢數(shù)據(jù)及表別名、字段別名用法分析

標簽:河源 欽州 周口 鄂爾多斯 寧夏 預(yù)約服務(wù) 營口 湘潭

巨人網(wǎng)絡(luò)通訊聲明:本文標題《關(guān)于sql和mysql對于別名不能調(diào)用的一些理解》,本文關(guān)鍵詞  關(guān)于,sql,和,mysql,對于,別名,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《關(guān)于sql和mysql對于別名不能調(diào)用的一些理解》相關(guān)的同類信息!
  • 本頁收集關(guān)于關(guān)于sql和mysql對于別名不能調(diào)用的一些理解的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    欧美阿v视频在线大全_亚洲欧美中文日韩V在线观看_www性欧美日韩欧美91_亚洲欧美日韩久久精品
  • <rt id="w000q"><acronym id="w000q"></acronym></rt>
  • <abbr id="w000q"></abbr>
    <rt id="w000q"></rt>
    色综合欧美在线视频区| 日韩欧美的一区| 国产精品看片你懂得| 久久av中文字幕片| 国产网站无遮挡| 欧美无砖专区一中文字| 亚洲卡通动漫在线| 99精品视频在线观看| 中文字幕在线有码| 国产精品久久久久久久久图文区| 国产精品亚洲人在线观看| 国产精品理论在线| 国产清纯美女被跳蛋高潮一区二区久久w | 日本电影亚洲天堂一区| 国产精品你懂的| 成人黄页在线观看| 色视频欧美一区二区三区| 亚洲免费观看高清在线观看| 99精品久久久久久| 欧美日韩一区二区不卡| 亚洲成av人影院在线观看网| 午夜不卡久久精品无码免费| 制服丝袜激情欧洲亚洲| 日韩国产在线观看一区| 高潮毛片无遮挡| 国产日韩欧美一区二区三区乱码| 国产成人av影院| 国产精品白嫩白嫩大学美女| 亚洲免费成人av| 无码国产精品一区二区免费式直播| 在线综合+亚洲+欧美中文字幕| 日本中文一区二区三区| 少妇无套高潮一二三区| 国产精品视频观看| 99在线热播精品免费| 欧美日韩在线三级| 男女男精品视频| 大吊一区二区三区| 亚洲日本一区二区| 国产69视频在线观看| 欧美大胆人体bbbb| 国产凹凸在线观看一区二区| 色老汉av一区二区三区| 午夜视频一区在线观看| 国产亚洲精品熟女国产成人| 中文字幕精品一区二区三区精品| 91视频91自| 欧美不卡123| 成人性生交大合| 欧美精品乱码久久久久久| 久久国产婷婷国产香蕉| 手机在线免费看毛片| 一区二区三区色| 免费看污黄网站在线观看| 国产精品每日更新| 国产原创剧情av| 国产欧美一区二区三区鸳鸯浴| 91一区在线观看| 欧美成人三级电影在线| 成人aa视频在线观看| 91精品国产免费| 韩国女主播一区二区三区| 91国内精品野花午夜精品| 免费在线观看视频一区| 国产精品久久久久久久精| 五月婷婷欧美视频| 国精品人伦一区二区三区蜜桃| 亚洲一二三专区| 蜜桃av免费观看| 亚洲v日本v欧美v久久精品| 国产一区二区三区视频播放| 亚洲国产欧美在线| 污污视频网站在线免费观看| 亚洲小说春色综合另类电影| 国产黄a三级三级| 午夜欧美在线一二页| 国产精品嫩草影院俄罗斯| 五月天精品一区二区三区| 顶臀精品视频www| 卡一卡二国产精品| 欧美日韩一区三区四区| 风间由美中文字幕在线看视频国产欧美| 欧美精品123区| proumb性欧美在线观看| 精品国产髙清在线看国产毛片| 在线观看免费看片| 国产欧美日韩久久| 中文字幕xxx| 亚洲一区在线观看视频| 欧美第一页在线观看| 久久成人免费电影| 91精品国产综合久久久久久久久久 | 精品粉嫩aⅴ一区二区三区四区| 99re成人精品视频| 久久久99精品久久| 野花社区视频在线观看| 亚洲影院理伦片| 一本大道久久a久久综合婷婷 | 91精品免费观看| 91视视频在线观看入口直接观看www | 丝袜a∨在线一区二区三区不卡| 超碰手机在线观看| 国产乱一区二区| 精品国产一区二区三区久久影院 | 久久无码专区国产精品s| 国产精品全国免费观看高清| av电影在线不卡| 免费在线观看一区| 日韩一二三四区| 国产精品九九视频| 亚洲午夜激情网站| 欧美性受xxxx| av日韩在线网站| 综合色天天鬼久久鬼色| 亚洲xxxx3d动漫| 国产精品自拍av| 久久九九久久九九| 先锋影音av在线| 激情综合网av| 久久免费偷拍视频| 男人的天堂官网| 国产中文字幕一区| 久久久精品国产99久久精品芒果| 中文字幕被公侵犯的漂亮人妻| 男男成人高潮片免费网站| 日韩精品中文字幕在线一区| 成人网站免费观看| 日本一不卡视频| 日韩区在线观看| 欧美多人猛交狂配| 久久av老司机精品网站导航| 久久婷婷色综合| 婷婷丁香综合网| 风间由美性色一区二区三区| 国产精品国产自产拍高清av王其| 卡通动漫亚洲综合| 99久久国产综合精品女不卡| 亚洲精品日日夜夜| 欧美色图第一页| 欧美双性人妖o0| 免费xxxx性欧美18vr| 精品国产露脸精彩对白| 五月天免费网站| 成av人片一区二区| 一区二区三区电影在线播| 欧美精选午夜久久久乱码6080| 久久福利小视频| 久久成人精品无人区| 国产色爱av资源综合区| 色综合久久综合中文综合网| 免费观看黄网站| 日韩高清在线观看| 美女黄色一级视频| 亚洲成a人v欧美综合天堂| 欧美va在线播放| 免费成人美女女在线观看| 成人av在线资源| 亚洲午夜免费福利视频| 日韩欧美在线1卡| 国产免费嫩草影院| 91视频一区二区三区| 日韩激情中文字幕| 国产亚洲欧美在线| 日本高清不卡在线观看| 国产精品边吃奶边做爽| 国产乱国产乱300精品| 亚洲欧洲99久久| 欧美一区二视频| 欧美日韩国产一二三区| 日本少妇xxx| 久草这里只有精品视频| 中文字幕中文字幕一区二区| 欧美日韩国产中文| 少妇人妻好深好紧精品无码| 成人h动漫精品| 日韩精品色哟哟| 国产精品视频yy9299一区| 欧美日韩在线不卡| 中文字幕人妻一区二区三区在线视频| 盗摄精品av一区二区三区| 亚洲国产aⅴ天堂久久| 久久精品夜色噜噜亚洲aⅴ| 欧洲色大大久久| 国产视频三区四区| 日本黄色一级网站| 精品一区二区三区在线视频| 亚洲精品一二三| 精品国产91乱码一区二区三区 | 欧美一区二区三区视频免费| 国产精品久久久免费看| 精人妻一区二区三区| 国产精品资源在线| 亚洲成人在线免费| 国产精品美女久久福利网站| 日韩欧美一级二级| 91国产免费观看| 中文字幕求饶的少妇| 久久丫精品国产亚洲av不卡| 成人免费视频caoporn| 美女www一区二区|