溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

MySQL系列理解如何使用union(all)與limit及exists關(guān)鍵字

發(fā)布時間:2021-10-26 13:40:37 來源:億速云 閱讀:227 作者:iii 欄目:開發(fā)技術(shù)

本篇內(nèi)容主要講解“MySQL系列理解如何使用union(all)與limit及exists關(guān)鍵字”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學(xué)習(xí)“MySQL系列理解如何使用union(all)與limit及exists關(guān)鍵字”吧!

目錄
  • 1.union:可以將查詢結(jié)果相加

    • 1)union all:不能去重

    • 2)union:可以達到去重的效果。

  • 2.limit:分頁查詢?nèi)克?/p>

    • 1)對limit用法的一些說明

    • 2)案例說明

    • 3)通用的標(biāo)準(zhǔn)分頁SQL

  • 3.exists用法:又稱"相關(guān)子查詢"

    • 1)帶你理解exists的執(zhí)行原理

    • 2)案例演示

    • 3)一張圖說明exists子查詢的原理

1.union:可以將查詢結(jié)果相加

union用于將查詢結(jié)果相加,尤其是將兩張毫無關(guān)系的表中的數(shù)據(jù),拼接在一起顯示的時候。
但是有一個前提條件:不同結(jié)果進行拼接的時候,列數(shù)必須相同。

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

MySQL系列理解如何使用union(all)與limit及exists關(guān)鍵字

1)union all:不能去重

MySQL系列理解如何使用union(all)與limit及exists關(guān)鍵字

2)union:可以達到去重的效果。

MySQL系列理解如何使用union(all)與limit及exists關(guān)鍵字

2.limit:分頁查詢?nèi)克?/h3>

1)對limit用法的一些說明

① limit是MySQL中特有的,其他數(shù)據(jù)庫中沒有,不通用;

② limit取結(jié)果集中的部分?jǐn)?shù)據(jù),這是它的作用;

③ limit是sql語句最后執(zhí)行的一個環(huán)節(jié);

 limit的使用語法:

limit startIndex,length; 其中startIndex表示起始位置,從0開始,0表示第一條數(shù)據(jù),length表示取幾個。

2)案例說明

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

MySQL系列理解如何使用union(all)與limit及exists關(guān)鍵字

① 取出工資前五名的員工,顯示其信息。

MySQL系列理解如何使用union(all)與limit及exists關(guān)鍵字

②找出工資排名在第4到第9名的員工。

MySQL系列理解如何使用union(all)與limit及exists關(guān)鍵字

3)通用的標(biāo)準(zhǔn)分頁SQL

MySQL系列理解如何使用union(all)與limit及exists關(guān)鍵字

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

MySQL系列理解如何使用union(all)與limit及exists關(guān)鍵字

拿百度瀏覽器進行說明:

MySQL系列理解如何使用union(all)與limit及exists關(guān)鍵字

3.exists用法:又稱"相關(guān)子查詢"

MySQL系列理解如何使用union(all)與limit及exists關(guān)鍵字

1)帶你理解exists的執(zhí)行原理

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

MySQL系列理解如何使用union(all)與limit及exists關(guān)鍵字

① 當(dāng)返回結(jié)果是一行記錄的情況

MySQL系列理解如何使用union(all)與limit及exists關(guān)鍵字

② 當(dāng)返回結(jié)果是多行記錄的情況

MySQL系列理解如何使用union(all)與limit及exists關(guān)鍵字

③ 原理解釋

從上圖演示可以發(fā)現(xiàn),不管exists關(guān)鍵字后面的SQL語句,不管是查詢出一條結(jié)果,還是多條結(jié)果,只要查出結(jié)果,整個結(jié)果就是True,而MySQL中True就用1表示,所以最終結(jié)果就是1。一旦exists關(guān)鍵字后面的SQL語句,查詢不出任何一條結(jié)果的時候,最終的返回值就是False,在MySQL中False就用0表示,所以最終結(jié)果就是0。

2)案例演示

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

MySQL系列理解如何使用union(all)與limit及exists關(guān)鍵字

① 查詢jobs表中,哪個工作有人做?

MySQL系列理解如何使用union(all)與limit及exists關(guān)鍵字

② 查詢jobs表中,哪個工作沒有人做?

MySQL系列理解如何使用union(all)與limit及exists關(guān)鍵字

3)一張圖說明exists子查詢的原理

MySQL系列理解如何使用union(all)與limit及exists關(guān)鍵字

解釋如下:

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

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

4)當(dāng)在exists()前面加了一個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表中的每一行進行一一匹配,依然重
   復(fù)上述步驟。

到此,相信大家對“MySQL系列理解如何使用union(all)與limit及exists關(guān)鍵字”有了更深的了解,不妨來實際操作一番吧!這里是億速云網(wǎng)站,更多相關(guān)內(nèi)容可以進入相關(guān)頻道進行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!

向AI問一下細節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI