這篇文章給大家介紹如何理解MySQL中的union limit exists關(guān)鍵字,內(nèi)容非常詳細(xì),感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助。
網(wǎng)站制作、做網(wǎng)站介紹好的網(wǎng)站是理念、設(shè)計(jì)和技術(shù)的結(jié)合。創(chuàng)新互聯(lián)建站擁有的網(wǎng)站設(shè)計(jì)理念、多方位的設(shè)計(jì)風(fēng)格、經(jīng)驗(yàn)豐富的設(shè)計(jì)團(tuán)隊(duì)。提供PC端+手機(jī)端網(wǎng)站建設(shè),用營銷思維進(jìn)行網(wǎng)站設(shè)計(jì)、采用先進(jìn)技術(shù)開源代碼、注重用戶體驗(yàn)與SEO基礎(chǔ),將技術(shù)與創(chuàng)意整合到網(wǎng)站之中,以契合客戶的方式做到創(chuàng)意性的視覺化效果。
union用于將查詢結(jié)果相加,尤其是將兩張毫無關(guān)系的表中的數(shù)據(jù),拼接在一起顯示的時(shí)候。
但是有一個(gè)前提條件:不同結(jié)果進(jìn)行拼接的時(shí)候,列數(shù)必須相同。
利用下方的數(shù)據(jù)說明union的用法:
limit的使用語法:
limit startIndex,length; 其中startIndex表示起始位置,從0開始,0表示第一條數(shù)據(jù),length表示取幾個(gè)。數(shù)據(jù)源如下:
根據(jù)上圖可以發(fā)現(xiàn):
拿百度瀏覽器進(jìn)行說明:
數(shù)據(jù)源如下:
從上圖演示可以發(fā)現(xiàn),不管exists關(guān)鍵字后面的SQL語句,不管是查詢出一條結(jié)果,還是多條結(jié)果,只要查出結(jié)果,整個(gè)結(jié)果就是True,而MySQL中True就用1表示,所以最終結(jié)果就是1。
一旦exists關(guān)鍵字后面的SQL語句,查詢不出任何一條結(jié)果的時(shí)候,最終的返回值就是False,在MySQL中False就用0表示,所以最終結(jié)果就是0。
利用下方的數(shù)據(jù)源,完成如下兩個(gè)練習(xí)題。
解釋如下:
"有一個(gè)A公司,公司中所有的工作都在jobs表,emp表中可以看到哪些工作已經(jīng)被做了"
select jobs.job
from jobs
where not exists(select * from emp where jobs.job=emp.job);
1)搞清楚你要得到的結(jié)果是什么。
這里你要得到的是"哪些工作沒有人做",也就是說返回的結(jié)果來自于jobs表,但是
"怎么知道哪些工作有人做,哪些沒人做呢?",這就需要我們對照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)行匹配,就會返回一個(gè)結(jié)果集。
3)再看exists關(guān)鍵字,exists()返回的結(jié)果是true或者false,當(dāng)括號中有值的時(shí)候,
就是存在,返回的是true;當(dāng)括號中沒有值的時(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后,原始語句就相當(dāng)于變?yōu)椋?br/> select jobs.job from jobs where false;
因此,第一行clerk不能被取出來。
6)接著,再拿jobs中的第二行"SALESMAN",去和emp表中的每一行進(jìn)行一一匹配,依然重
復(fù)上述步驟。
關(guān)于如何理解mysql中的union limit exists關(guān)鍵字就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,可以學(xué)到更多知識。如果覺得文章不錯(cuò),可以把它分享出去讓更多的人看到。