亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

mysql?子查詢的概述和分類及單行子查詢功能實(shí)現(xiàn)

 更新時(shí)間:2024年10月28日 10:38:42   作者:晴天qt01  
本文詳細(xì)介紹了MySQL的子查詢概念和應(yīng)用,解釋了子查詢是在主查詢中嵌套另一個(gè)查詢,包括外查詢和內(nèi)查詢,并從多個(gè)角度進(jìn)行分類,文章還深入探討了子查詢的編寫技巧和使用場(chǎng)景,對(duì)于學(xué)習(xí)和應(yīng)用MySQL的人來(lái)說(shuō),這是一篇非常有價(jià)值的指南

子查詢引入

查詢的基本結(jié)構(gòu)已經(jīng)給大家了,子查詢里面也是有一些新的內(nèi)容,子查詢其實(shí)就是在查詢中嵌套另一個(gè)查詢,叫嵌套查詢可能大家更容易理解一點(diǎn)..,類似與FOR循環(huán)和FOR循環(huán)的嵌套,這一章是我們查詢的最難的部分,大家

難度是查詢的頂峰,多表查詢和子查詢是非常重要,SQL優(yōu)化里面主要還是針對(duì)查詢的優(yōu)化.

子查詢是mysql4.1里面引入的,現(xiàn)在java用的比較多的是8.0,數(shù)據(jù)庫(kù)和java企業(yè)都沒(méi)有動(dòng)力去更新,我們講課的向下兼容的,雖然現(xiàn)在是8.0,但是講的還是會(huì)涉及,當(dāng)我們現(xiàn)在有一個(gè)需求,查詢誰(shuí)的工資比a高,所以我們要先查詢abel的工資,然后再把這個(gè)工資放入查詢條件中進(jìn)行查詢.

首先我們看到了這個(gè)需求,誰(shuí)的工資比abel高,我們?nèi)绾尾挥米硬樵儊?lái)進(jìn)行.

SELECT last_name,salary
FROM employees
WHERE last_name='abel'

我們可以看到abel工資的11000,我們現(xiàn)在就查詢工資比11000高就行.

我們要和數(shù)據(jù)庫(kù)服務(wù)器進(jìn)行2次交互,效率肯定是比較低的,我們就像能不能用一條語(yǔ)句來(lái)進(jìn)行.我們是不是可以用自連接來(lái)進(jìn)行

SELECT T1.last_name,T1.salary
FROM employees T1
JOIN employees T2
ON T1.salary>T2.salary AND T2.last_name='abel'

這時(shí)我們利用自連接,把所有工資比abel高的字段篩選出來(lái).

方式2自連接肯定要比方式1塊

1雖然這個(gè)條件可以用多表查詢,但是其他類似的條件就不能用自連接

2:這個(gè)不容易想出來(lái),不夠直觀

那么我們就可以引入子查詢

子查詢介紹

我們先寫WHERE條件,因?yàn)檫@個(gè)條件不是一個(gè)值,我們需要用另一個(gè)查詢才能查詢出來(lái),所以我們直接把查詢條件改成另一個(gè)查詢結(jié)構(gòu)SELECT last_name,salary

FROM employees
WHERE salary>(
              SELECT salary
              FROM employees
              WHERE last_name='abel')

注意這里的查詢條件只能出現(xiàn)一個(gè)值.由一個(gè)問(wèn)題需求引入一個(gè)查詢

首先我們談?wù)勔粋€(gè)名稱,一個(gè)稱謂,子查詢包括了外查詢,和內(nèi)查詢.

外面的查詢就叫外查詢,里面的就叫內(nèi)查詢,這是相對(duì)的叫法.

外查詢也被叫做主查詢,內(nèi)查詢也被叫子查詢.

接下來(lái)我們看看有什么具體的要求,

1子查詢是在主查詢之前一次查詢,

2子查詢的結(jié)果被外查詢使用

注意事項(xiàng)

1:子查詢要被括號(hào)包裹,由于子查詢比較復(fù)雜,用括號(hào)包裹會(huì)比較清晰

2子查詢要放在比較條件的右側(cè)

Ps,就是在比較符號(hào)的后面,如果在前面就是這樣

SELECT last_name,salary
FROM employees
WHERE (
              SELECT salary
              FROM employees
                    WHERE last_name='abel')<salary

我們會(huì)發(fā)現(xiàn)這樣也行,但是為什么要這樣呢,我們這是為了可讀性和美觀的考慮.頭短尾長(zhǎng)比較好.

3.單行操作費(fèi)對(duì)應(yīng)單行子查詢,多行操作符對(duì)應(yīng)多行子查詢.

子查詢分類

分類可以從不同的角度去分,第一個(gè)角度,

角度1: 出多個(gè)結(jié)果或者一個(gè)結(jié)

單行子查詢,,

查詢之后出一個(gè)結(jié)果的就是單行子查詢

多行子查詢

查詢之后出多個(gè)結(jié)果的就是單行子查詢

角度2內(nèi)查詢是否被執(zhí)行多次

相關(guān)查詢:

比如我們需要查詢部門工資大于本部門平均工資的員工信息

里面的子查詢會(huì)因?yàn)橥獠樵冇涗洸块T的不同返回的值而改變.也就是返回不同的平均值.

比如白和白生的就是黑的,

不相關(guān)查詢

比如需求我們要查詢工資大于公司的平均工資的員工.

里面的子查詢,或者說(shuō)內(nèi)查詢條件,不會(huì)跟隨外查詢記錄的改變而改變,

這里的就說(shuō)清楚了,因?yàn)槲覀兊淖硬樵冋Z(yǔ)句比較多,所以要寫的行數(shù)也比較多,所以我們先做一個(gè)分類,我們下面要講的就是單行子查詢和多行子查詢的案例.

我會(huì)把這兩個(gè)查詢的范圍都限制在不相關(guān)子查詢內(nèi)容,所以下面的相關(guān)子查詢把這個(gè)難度就調(diào)高起來(lái)

趁熱打鐵開(kāi)始吧

也就是里面只有一個(gè)數(shù)據(jù)供我們外部使用,

子查詢的編寫技巧:

1從里往外寫

2從外往里寫

單行子查詢

單行子查詢操作符號(hào)

= != > < <> <= >=

也就是我們之前的邏輯操作符號(hào)

情況1

”查詢工資大于149號(hào)員工工資的員工信息

由于我們不知道149號(hào)員工的工資,我們就要進(jìn)行子查詢.”

這里因?yàn)楸容^簡(jiǎn)單,所以我們技巧1和技巧2都可以

我們就先寫子查詢

        SELECT employee_id
        FROM employees
        WHERE employee_id=149

再寫外查詢

沒(méi)問(wèn)題,我們就查詢出來(lái)了

題目2返回job_id與141號(hào)員工相同,salary比143員工多的員工姓名

SELECT employee_id,job_id,salary
FROM employees
WHERE job_id=(
        SELECT job_id
        FROM employees
        WHERE employee_id=141)
AND salary>(
        SELECT salary
        FROM employees
        WHERE employee_id=143)

如果我們看見(jiàn)了一個(gè)查詢語(yǔ)句,我們可以把這個(gè)語(yǔ)句轉(zhuǎn)換為中文嗎,也就是要看出這個(gè)查詢語(yǔ)句來(lái)看出它的需求.這個(gè)能力也要有,我們現(xiàn)在主要是做需求.

題目返回公司工資最少的員工last_name,job_id和salary

SELECT last_name,job_id,salary
FROM employees
WHERE salary=(
        SELECT MIN(salary)
        FROM employees)

注意這里可能是好幾個(gè)員工,但是還是單行子查詢,因?yàn)槲覀儍?nèi)查詢只返回一條記錄

情況2

查詢與141號(hào)員工的manager_id和department_id相同的其他員工的employee_id,manager_id,department_id

我們先不用理過(guò)濾條件,查詢其他員工的

employee_id,manager_id,department_id還是會(huì)寫的把,我們就先寫外查詢
SELECT employee_id,manager_id,department_id
FROM employees
WHERE

然后補(bǔ)充內(nèi)查詢

SELECT employee_id,manager_id,department_id
FROM employees
WHERE manager_id =(
              SELECT manager_id
              FROM employees
              WHERE employee_id=141)
AND department_id =(
              SELECT department_id
              FROM employees
              WHERE employee_id=141)

這是方式1:

方式1成對(duì)子查詢

我們還有一個(gè)方式2,可以一次性把兩個(gè)字段條件寫在一起

SELECT employee_id,manager_id,department_id
FROM employees
WHERE (manager_id,department_id) =(
              SELECT manager_id,department_id
              FROM employees
              WHERE employee_id=141)

結(jié)果是一致的,這叫我們的成對(duì)子查詢.效率上差別不大,上面的適用性比較高,所以這個(gè)不會(huì)寫也沒(méi)事,了解就可以了.適用場(chǎng)景太窄了

情況3,HAVING中的子查詢

題目:查詢最低工資大于50號(hào)部門最低工資的 部門id和其最低工資

SELECT MIN(salary)
SELECT department_id,MIN(salary)
FROM employees
GROUP BY department_id
HAVING MIN(salary)>(
                    SELECT MIN(salary)
                    FROM employees
                    WHERE department_id=50)

因?yàn)槲迨?hào)部門工資是不確定的,所以我們要用到子查詢

這里不行要空值我們就可以用外查詢WHERE篩選掉

SELECT department_id,MIN(salary)
FROM employees
WHERE department_id IS NOT NULL
GROUP BY department_id
HAVING MIN(salary)>(
                    SELECT MIN(salary)
                    FROM employees
                    WHERE department_id=50)

所以我們HAVING中我們也可以使用子查詢

情況4:CASE中的子查詢

顯示員工的employee_id,last_name和location.其中若員工department_id與location_id為1800的department_id相同則location為canada,其余為USA

這里我們還是先寫外查詢?cè)賹憙?nèi)查詢,

SELECT employee_id,last_name,(
  CASE department_id
                                         WHEN (
        SELECT department_id
        FROM departments
        JOIN locations T3
        ON T3.location_id=departments.location_id
        WHERE T3.location_id=1800)
 THEN
                                          'canada'
                                         ELSE
                                          'USA'
END
) "location"
FROM employees

情況5:子查詢中的空值問(wèn)題.

如果子查詢的結(jié)果是空值,那么不會(huì)報(bào)錯(cuò),返回的會(huì)是一個(gè)空表比如下面這種情況

SELECT last_name,job_id
FROM employees
WHERE job_id=(SELECT job_id FROM employees WHERE last_name=102)

情況6:非法使用子查詢

如果我們用單行操作符進(jìn)行多行操作,會(huì)出現(xiàn)什么情況

這時(shí)會(huì)直接報(bào)錯(cuò)

到此這篇關(guān)于mysql 子查詢的概述和分類及單行子查詢的文章就介紹到這了,更多相關(guān)mysql 子查詢內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • MySQL升級(jí)PostgreSQL遇到的一些常見(jiàn)問(wèn)題及解決方案

    MySQL升級(jí)PostgreSQL遇到的一些常見(jiàn)問(wèn)題及解決方案

    MySQL是一款性能優(yōu)越、數(shù)據(jù)可靠性高的數(shù)據(jù)庫(kù)軟件,然而為了保證其長(zhǎng)期有效運(yùn)行,數(shù)據(jù)庫(kù)升級(jí)是非常重要的,下面這篇文章主要給大家介紹了關(guān)于MySQL升級(jí)PostgreSQL遇到的一些常見(jiàn)問(wèn)題及解決方案的相關(guān)資料,需要的朋友可以參考下
    2024-05-05
  • 解決MySQL server has gone away錯(cuò)誤的方案

    解決MySQL server has gone away錯(cuò)誤的方案

    在本篇文章里小編給大家分享的是一篇關(guān)于MySQL server has gone away錯(cuò)誤的解決辦法,有需要的朋友們可以參考下。
    2020-02-02
  • mysql中secure_file_priv=不生效問(wèn)題及解決

    mysql中secure_file_priv=不生效問(wèn)題及解決

    這篇文章主要介紹了mysql中secure_file_priv=不生效問(wèn)題及解決方案,以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家,
    2024-01-01
  • MySQL8的主要目錄結(jié)構(gòu)解讀

    MySQL8的主要目錄結(jié)構(gòu)解讀

    這篇文章主要介紹了MySQL8的主要目錄結(jié)構(gòu),具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-09-09
  • MySQL 多個(gè)%等模糊查詢功能實(shí)現(xiàn)

    MySQL 多個(gè)%等模糊查詢功能實(shí)現(xiàn)

    這篇文章主要介紹了MySQL 多個(gè)%等模糊查詢功能實(shí)現(xiàn),本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-07-07
  • MySQL重定位數(shù)據(jù)目錄的方法

    MySQL重定位數(shù)據(jù)目錄的方法

    這篇文章主要介紹了MySQL重定位數(shù)據(jù)目錄的實(shí)現(xiàn)方法,分析了重定位MySQL數(shù)據(jù)目錄的實(shí)現(xiàn)原理與技巧,具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2014-12-12
  • MySQL從一個(gè)表中查出數(shù)據(jù)并插入到另一個(gè)表的詳細(xì)處理方案

    MySQL從一個(gè)表中查出數(shù)據(jù)并插入到另一個(gè)表的詳細(xì)處理方案

    這篇文章主要給大家介紹了關(guān)于MySQL從一個(gè)表中查出數(shù)據(jù)并插入到另一個(gè)表的詳細(xì)處理方案,文中通過(guò)圖文介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用MySQL具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-12-12
  • Mysql version can not be less than 4.1 出錯(cuò)解決辦法

    Mysql version can not be less than 4.1 出錯(cuò)解決辦法

    這篇文章主要介紹了Mysql version can not be less than 4.1 解決辦法的相關(guān)資料,需要的朋友可以參考下
    2016-10-10
  • mysql zip 文件安裝教程

    mysql zip 文件安裝教程

    這篇文章主要為大家詳細(xì)介紹了mysql zip 文件安裝教程,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-04-04
  • MySQL 查詢某個(gè)字段含有字母數(shù)字的值示例詳解

    MySQL 查詢某個(gè)字段含有字母數(shù)字的值示例詳解

    在本文中,我們?cè)敿?xì)介紹了如何在 MySQL 中查詢某個(gè)字段含有字母和數(shù)字的值,我們首先介紹了正則表達(dá)式的基礎(chǔ)知識(shí),然后通過(guò)五個(gè)具體示例展示了如何應(yīng)用這些知識(shí),通過(guò)這些示例,我們可以看到正則表達(dá)式在處理復(fù)雜字符串模式匹配時(shí)的強(qiáng)大功能,感興趣的朋友跟隨小編一起看看吧
    2024-05-05

最新評(píng)論