如何理解mysql中的unionlimitexists關鍵字

這篇文章給大家介紹如何理解MySQL中的union limit exists關鍵字,內容非常詳細,感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助。

網(wǎng)站制作、做網(wǎng)站介紹好的網(wǎng)站是理念、設計和技術的結合。創(chuàng)新互聯(lián)建站擁有的網(wǎng)站設計理念、多方位的設計風格、經(jīng)驗豐富的設計團隊。提供PC端+手機端網(wǎng)站建設,用營銷思維進行網(wǎng)站設計、采用先進技術開源代碼、注重用戶體驗與SEO基礎,將技術與創(chuàng)意整合到網(wǎng)站之中,以契合客戶的方式做到創(chuàng)意性的視覺化效果。

 

1.union:可以將查詢結果相加

union用于將查詢結果相加,尤其是將兩張毫無關系的表中的數(shù)據(jù),拼接在一起顯示的時候。

但是有一個前提條件:不同結果進行拼接的時候,列數(shù)必須相同。

利用下方的數(shù)據(jù)說明union的用法:

如何理解mysql中的union limit exists關鍵字  
 
1)union all:不能去重
如何理解mysql中的union limit exists關鍵字  
 
2)union:可以達到去重的效果。
如何理解mysql中的union limit exists關鍵字  
 

2.limit:分頁查詢全靠它

 
1)對limit用法的一些說明
  • ① limit是MySQL中特有的,其他數(shù)據(jù)庫中沒有,不通用;
  • ② limit取結果集中的部分數(shù)據(jù),這是它的作用;
  • ③ limit是sql語句最后執(zhí)行的一個環(huán)節(jié);
  • ④       limit的使用語法:      limit startIndex,length; 其中startIndex表示起始位置,從0開始,0表示第一條數(shù)據(jù),length表示取幾個。
 
2)案例說明

數(shù)據(jù)源如下:

如何理解mysql中的union limit exists關鍵字  
 ① 取出工資前五名的員工,顯示其信息。
如何理解mysql中的union limit exists關鍵字  
 ②找出工資排名在第4到第9名的員工。
如何理解mysql中的union limit exists關鍵字  
 
3)通用的標準分頁SQL
如何理解mysql中的union limit exists關鍵字  

根據(jù)上圖可以發(fā)現(xiàn):

如何理解mysql中的union limit exists關鍵字

拿百度瀏覽器進行說明:

如何理解mysql中的union limit exists關鍵字  
 

3.exists用法:又稱"相關子查詢"

如何理解mysql中的union limit exists關鍵字  
 
1)帶你理解exists的執(zhí)行原理

數(shù)據(jù)源如下:

如何理解mysql中的union limit exists關鍵字  
 ① 當返回結果是一行記錄的情況
如何理解mysql中的union limit exists關鍵字  
 ② 當返回結果是多行記錄的情況
如何理解mysql中的union limit exists關鍵字  
 ③ 原理解釋

從上圖演示可以發(fā)現(xiàn),不管exists關鍵字后面的SQL語句,不管是查詢出一條結果,還是多條結果,只要查出結果,整個結果就是True,而MySQL中True就用1表示,所以最終結果就是1。

一旦exists關鍵字后面的SQL語句,查詢不出任何一條結果的時候,最終的返回值就是False,在MySQL中False就用0表示,所以最終結果就是0。

 
2)案例演示

利用下方的數(shù)據(jù)源,完成如下兩個練習題。

如何理解mysql中的union limit exists關鍵字  
 ① 查詢jobs表中,哪個工作有人做?
如何理解mysql中的union limit exists關鍵字  
 ② 查詢jobs表中,哪個工作沒有人做?
如何理解mysql中的union limit exists關鍵字  
 
3)一張圖說明exists子查詢的原理
如何理解mysql中的union limit exists關鍵字  

解釋如下:

"有一個A公司,公司中所有的工作都在jobs表,emp表中可以看到哪些工作已經(jīng)被做了"
select jobs.job 
from jobs
where not exists(select * from emp where jobs.job=emp.job);

1)搞清楚你要得到的結果是什么。
   這里你要得到的是"哪些工作沒有人做",也就是說返回的結果來自于jobs表,但是
   "怎么知道哪些工作有人做,哪些沒人做呢?",這就需要我們對照emp表。

2)首先從jobs表中,取出第一條記錄,扔進到emp表中和該表的每一行進行匹配。當匹
   配到第一行的時候,由于emp表中的每一行都有8列,你究竟想匹配什么呢?是不是應該明
   確指明一下,也就是"where jobs.job=emp.job"這個條件,這個條件表明,我從jobs
   表中取出第一條記錄,去和emp中每一行進行匹配,并且我更為明確,我是和你第一行的
   job字段進行匹配,你只需要看看jobs.job和emp.job是否相等,如果相等,返回該條記
   錄,接著,拿著第一行再往下依次匹配,只要是jobs.job和emp.job是否相等,就返回
   該條記錄。因此jobs中的第一行和emp中每一行進行匹配,就會返回一個結果集。

3)再看exists關鍵字,exists()返回的結果是true或者false,當括號中有值的時候,
   就是存在,返回的是true;當括號中沒有值的時候,返回的是false。根據(jù)(1)中,我們
   已經(jīng)知道,jobs中的第一行和emp中每一行匹配后,返回了一個結果集,也就證明有返回
   值,因此exists()返回的結果是true。

4)當在exists()前面加了一個not,表示取反。exists()返回的是true,not exists()
   返回的就是false。

5)根據(jù)上述敘述,當not exists()變?yōu)閒alse后,原始語句就相當于變?yōu)椋?br/>   select jobs.job from jobs where false;
   因此,第一行clerk不能被取出來。
   
6)接著,再拿jobs中的第二行"SALESMAN",去和emp表中的每一行進行一一匹配,依然重
   復上述步驟。

關于如何理解mysql中的union limit exists關鍵字就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

文章名稱:如何理解mysql中的unionlimitexists關鍵字
鏈接地址:http://muchs.cn/article32/ijodsc.html

成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供品牌網(wǎng)站建設、網(wǎng)站設計軟件開發(fā)、網(wǎng)站收錄、網(wǎng)站排名、微信小程序

廣告

聲明:本網(wǎng)站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經(jīng)允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)

營銷型網(wǎng)站建設