MySQL系列理解運(yùn)用union(all)與limit及exists關(guān)鍵字教程
1.union:可以將查詢(xún)結(jié)果相加
union用于將查詢(xún)結(jié)果相加,尤其是將兩張毫無(wú)關(guān)系的表中的數(shù)據(jù),拼接在一起顯示的時(shí)候。
但是有一個(gè)前提條件:不同結(jié)果進(jìn)行拼接的時(shí)候,列數(shù)必須相同。
利用下方的數(shù)據(jù)說(shuō)明union的用法:
1)union all:不能去重
2)union:可以達(dá)到去重的效果。
2.limit:分頁(yè)查詢(xún)?nèi)克?/h2>
1)對(duì)limit用法的一些說(shuō)明
① limit是MySQL中特有的,其他數(shù)據(jù)庫(kù)中沒(méi)有,不通用;
② limit取結(jié)果集中的部分?jǐn)?shù)據(jù),這是它的作用;
③ limit是sql語(yǔ)句最后執(zhí)行的一個(gè)環(huán)節(jié);
limit的使用語(yǔ)法:
limit startIndex,length; 其中startIndex表示起始位置,從0開(kāi)始,0表示第一條數(shù)據(jù),length表示取幾個(gè)。
2)案例說(shuō)明
數(shù)據(jù)源如下:
① 取出工資前五名的員工,顯示其信息。
②找出工資排名在第4到第9名的員工。
3)通用的標(biāo)準(zhǔn)分頁(yè)SQL
根據(jù)上圖可以發(fā)現(xiàn):
拿百度瀏覽器進(jìn)行說(shuō)明:
3.exists用法:又稱(chēng)"相關(guān)子查詢(xún)"
1)帶你理解exists的執(zhí)行原理
數(shù)據(jù)源如下:
① 當(dāng)返回結(jié)果是一行記錄的情況
② 當(dāng)返回結(jié)果是多行記錄的情況
③ 原理解釋
從上圖演示可以發(fā)現(xiàn),不管exists關(guān)鍵字后面的SQL語(yǔ)句,不管是查詢(xún)出一條結(jié)果,還是多條結(jié)果,只要查出結(jié)果,整個(gè)結(jié)果就是True,而MySQL中True就用1表示,所以最終結(jié)果就是1。一旦exists關(guān)鍵字后面的SQL語(yǔ)句,查詢(xún)不出任何一條結(jié)果的時(shí)候,最終的返回值就是False,在MySQL中False就用0表示,所以最終結(jié)果就是0。
2)案例演示
利用下方的數(shù)據(jù)源,完成如下兩個(gè)練習(xí)題。
① 查詢(xún)jobs表中,哪個(gè)工作有人做?
② 查詢(xún)jobs表中,哪個(gè)工作沒(méi)有人做?
3)一張圖說(shuō)明exists子查詢(xún)的原理
解釋如下:
"有一個(gè)A公司,公司中所有的工作都在jobs表,emp表中可以看到哪些工作已經(jīng)被做了"
select jobs.job
from jobs
where not exists(select * from emp where jobs.job=emp.job);
1)搞清楚你要得到的結(jié)果是什么。
這里你要得到的是"哪些工作沒(méi)有人做",也就是說(shuō)返回的結(jié)果來(lái)自于jobs表,但是
"怎么知道哪些工作有人做,哪些沒(méi)人做呢?",這就需要我們對(duì)照emp表。
2)首先從jobs表中,取出第一條記錄,扔進(jìn)到emp表中和該表的每一行進(jìn)行匹配。當(dāng)匹
配到第一行的時(shí)候,由于emp表中的每一行都有8列,你究竟想匹配什么呢?是不是應(yīng)該明
確指明以下,也就是"where jobs.job=emp.job"這個(gè)條件,這個(gè)條件表明,我從jobs
表中取出第一條記錄,去和emp中每一行進(jìn)行匹配,并且我更為明確,我是和你第一行的
job字段進(jìn)行匹配,你只需要看看jobs.job和emp.job是否相等,如果相等,返回該條記
錄,接著,拿著第一行再往下依次匹配,只要是jobs.job和emp.job是否相等,就返回
該條記錄。因此jobs中的第一行和emp中每一行進(jìn)行匹配,就會(huì)返回一個(gè)結(jié)果集。
3)再看exists關(guān)鍵字,exists()返回的結(jié)果是true或者false,當(dāng)括號(hào)中有值的時(shí)候,
就是存在,返回的是true;當(dāng)括號(hào)中沒(méi)有值的時(shí)候,返回的是false。根據(jù)(1)中,我們
已經(jīng)知道,jobs中的第一行和emp中每一行匹配后,返回了一個(gè)結(jié)果集,也就證明有返回
值,因此exists()返回的結(jié)果是true。
4)當(dāng)在exists()前面加了一個(gè)not,表示取反。exists()返回的是true,not exists()
返回的就是false。
5)根據(jù)上述敘述,當(dāng)not exists()變?yōu)閒alse后,原始語(yǔ)句就相當(dāng)于變?yōu)椋?br />
select jobs.job from jobs where false;
因此,第一行clerk不能被取出來(lái)。
6)接著,再拿jobs中的第二行"SALESMAN",去和emp表中的每一行進(jìn)行一一匹配,依然重
復(fù)上述步驟。
以上就是MySQL系列一文讀懂union(all)與limit及exists關(guān)鍵字教程的詳細(xì)內(nèi)容,更多關(guān)于MySQL系列union(all)與limit及exists關(guān)鍵字的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
- MySQL中關(guān)鍵字UNION和UNION ALL的區(qū)別
- MySQL之union和union all的使用及區(qū)別說(shuō)明
- 簡(jiǎn)單聊一聊SQL中的union和union?all
- 帶例子詳解Sql中Union和Union?ALL的區(qū)別
- 簡(jiǎn)單了解MySQL union all與union的區(qū)別
- MySQL中UNION與UNION ALL的基本使用方法
- 淺析mysql union和union all
- 5分鐘了解MySQL5.7中union all用法的黑科技
- SQL語(yǔ)句之Union和Union All的用法
- SQL中UNION與UNION ALL的區(qū)別小結(jié)
相關(guān)文章
mysql alter table 修改表命令詳細(xì)介紹
MYSQL ALTER TABLE命令用于修改表結(jié)構(gòu),例如添加/修改/刪除字段、索引、主鍵等等,本文章通過(guò)實(shí)例向大家介紹MYSQL ALTER TABLE語(yǔ)句的使用方法,需要的朋友可以參考一下。2016-10-10安裝Mysql時(shí)可能會(huì)遇到的一些疑難雜癥
這篇文章主要給大家介紹了關(guān)于安裝Mysql時(shí)可能會(huì)遇到的一些疑難雜癥,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-01-01MySQL忘記root密碼以及遠(yuǎn)程無(wú)法連接的解決方法
這篇文章主要介紹了MySQL忘記root密碼以及遠(yuǎn)程無(wú)法連接問(wèn)題的解決方法,文中有詳細(xì)的代碼示例來(lái)解決這些辦法,需要的朋友可以參考下2023-06-06MySQL導(dǎo)入sql腳本錯(cuò)誤:2006 解決方法
本文給大家分享的是在使用mysql導(dǎo)入數(shù)據(jù)的時(shí)候,提示腳本錯(cuò)誤2006 MySQL server has gone away的解決方法,非常實(shí)用,有需要的小伙伴,可以參考下。2015-07-07解決MySQL5.7安裝后沒(méi)有data文件夾無(wú)法登錄的問(wèn)題
這篇文章主要介紹了解決MySQL5.7安裝后沒(méi)有data文件夾無(wú)法登錄的問(wèn)題,需要的朋友可以參考下2016-04-04在SQL中對(duì)同一個(gè)字段不同值,進(jìn)行數(shù)據(jù)統(tǒng)計(jì)操作
這篇文章主要介紹了在SQL中對(duì)同一個(gè)字段不同值,進(jìn)行數(shù)據(jù)統(tǒng)計(jì)操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-10-10