欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

一文帶你了解MySQL中的子查詢

 更新時(shí)間:2023年06月06日 10:36:25   作者:我有一顆五葉草  
子查詢指一個(gè)查詢語(yǔ)句嵌套在另一個(gè)查詢語(yǔ)句內(nèi)部的查詢,這個(gè)特性從MySQL 4.1開始引入,SQL中子查詢的使用大大增強(qiáng)了SELECT 查詢的能力,本文帶大家詳細(xì)了解MySQL中的子查詢,需要的朋友可以參考下

1. 需求分析與問題解決

1.1實(shí)際問題

誰的工資比 馬云 高?

方式1:原始方法

SELECT salary
FROM employees
WHERE last_name = '馬云';

返回結(jié)果:馬云的工資為 11000

那么我們查詢出工資比 11000 高的即可。

SELECT last_name,salary
FROM employees
WHERE salary > 11000;

方式2:自連接

SELECT e2.last_name,e2.salary
FROM employees e1,employees e2
WHERE e1.last_name = '馬云'
AND e1.`salary` < e2.`salary`

方式3:子查詢

SELECT last_name,salary
FROM employees
WHERE salary > (
SELECT salary
FROM employees
WHERE last_name = '馬云'
);

1.2 子查詢的基本使用

  • 子查詢的基本語(yǔ)法結(jié)構(gòu)

  • 子查詢(內(nèi)查詢)在主查詢之前一次執(zhí)行完成。

  • 子查詢的結(jié)果被主查詢(外查詢)使用 。

  • 注意事項(xiàng)
    - 子查詢要包含在括號(hào)內(nèi)
    - 將子查詢放在比較條件的右側(cè)
    - 單行操作符對(duì)應(yīng)單行子查詢,多行操作符對(duì)應(yīng)多行子查詢

1.3 子查詢的分類

  • 分類方式1:
    我們按內(nèi)查詢的結(jié)果返回一條還是多條記錄,將子查詢分為 單行子查詢 、 多行子查詢 。

  • 分類方式2:

    我們按內(nèi)查詢是否被執(zhí)行多次,將子查詢劃分為 相關(guān)(或關(guān)聯(lián))子查詢 和 不相關(guān)(或非關(guān)聯(lián))子查詢 。

  • 子查詢從數(shù)據(jù)表中查詢了數(shù)據(jù)結(jié)果,如果這個(gè)數(shù)據(jù)結(jié)果只執(zhí)行一次,然后這個(gè)數(shù)據(jù)結(jié)果作為主查詢的條件進(jìn)行執(zhí)行,那么這樣的子查詢叫做不相關(guān)子查詢。
  • 同樣,如果子查詢需要執(zhí)行多次,即采用循環(huán)的方式,先從外部查詢開始,每次都傳入子查詢進(jìn)行查詢,然后再將結(jié)果反饋給外部,這種嵌套的執(zhí)行方式就稱為相關(guān)子查詢。

2. 單行子查詢

2.1 單行比較操作符

操作符含義
=等于
>大于
>=大于等于
<小于
<=小于等于
!=不等于

2.2 代碼示例

題目:查詢工資大于2023號(hào)員工工資的員工的信息

SELECT * FROM emp 
WHERE salary > 
	(SELECT salary FROM emp WHERE eid = 2023)

2.3 HAVING 中的子查詢

  • 首先執(zhí)行子查詢。
  • 向主查詢中的HAVING 子句返回結(jié)果。

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

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

2.4 注意的問題

  • 子查詢中的空值問題
SELECT last_name, job_id
FROM emp
WHERE job_id =
	(SELECT job_id
	FROM emp
	WHERE last_name = '劉強(qiáng)東');
  • 該子查詢不返回任何行,因?yàn)樽硬樵兎祷乜?/li>
  • 非法使用子查詢
SELECT employee_id, last_name
FROM emp
WHERE salary =
	(SELECT MIN(salary)
	FROM emp
	GROUP BY department_id);
  • 多行子查詢使用單行比較符

3. 多行子查詢

  • 也稱為集合比較子查詢
  • 內(nèi)查詢返回多行
  • 使用多行比較操作符

3.1 多行比較操作符

體會(huì) ANY 和 ALL 的區(qū)別

3.2 代碼示例

題目1:返回其它job_id中比job_id為‘IT_PROG’部門任一工資低的員工的員工號(hào)、姓名、job_id 以及salary

題目2:返回其它job_id中比job_id為‘IT_PROG’部門所有工資都低的員工的員工號(hào)、姓名、job_id以及salary

4. 相關(guān)子查詢

4.1 相關(guān)子查詢執(zhí)行流程

如果子查詢的執(zhí)行依賴于外部查詢,通常情況下都是因?yàn)樽硬樵冎械谋碛玫搅送獠康谋恚⑦M(jìn)行了條件關(guān)聯(lián),因此每執(zhí)行一次外部查詢,子查詢都要重新計(jì)算一次,這樣的子查詢就稱之為 關(guān)聯(lián)子查詢 。

相關(guān)子查詢按照一行接一行的順序執(zhí)行,主查詢的每一行都執(zhí)行一次子查詢。

說明:子查詢中使用主查詢中的列

4.2 代碼示例

題目:查詢員工中工資大于本部門平均工資的員工的last_name,salary和其department_id

方式1:略

方式2:在 FROM 中使用子查詢

SELECT last_name,salary,e1.department_id
FROM employees e1,(SELECT department_id,AVG(salary) dept_avg_sal FROM employees
GROUP BY department_id) e2
WHERE e1.`department_id` = e2.department_id
AND e2.dept_avg_sal < e1.`salary`;

from型的子查詢:子查詢是作為from的一部分,子查詢要用()引起來,并且要給這個(gè)子查詢?nèi)e名,把它當(dāng)成一張“臨時(shí)的虛擬的表”來使用。

以上就是一文帶你了解MySQL中的子查詢的詳細(xì)內(nèi)容,更多關(guān)于MySQL 子查詢的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • MySql中流程控制函數(shù)/統(tǒng)計(jì)函數(shù)/分組查詢用法解析

    MySql中流程控制函數(shù)/統(tǒng)計(jì)函數(shù)/分組查詢用法解析

    這篇文章主要介紹了MySql中流程控制函數(shù)/統(tǒng)計(jì)函數(shù)/分組查詢用法解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-07-07
  • Mysql 字符集不一致導(dǎo)致連表異常的解決

    Mysql 字符集不一致導(dǎo)致連表異常的解決

    做一個(gè)簡(jiǎn)單的如下的連表查詢,居然直接提示錯(cuò)誤,居然是字符集不一致的問題,本文記錄一下mysql的字符集類型,感興趣的可以了解一下
    2021-09-09
  • Mysql給普通分頁(yè)查詢結(jié)果加序號(hào)實(shí)操

    Mysql給普通分頁(yè)查詢結(jié)果加序號(hào)實(shí)操

    這篇文章主要介紹了Mysql給普通分頁(yè)查詢結(jié)果加序號(hào)實(shí)操,文章通過圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下
    2022-09-09
  • 解決Win7 x64安裝解壓版mysql 5.7.18 winx64出現(xiàn)服務(wù)無法啟動(dòng)問題

    解決Win7 x64安裝解壓版mysql 5.7.18 winx64出現(xiàn)服務(wù)無法啟動(dòng)問題

    這篇文章主要介紹了解決Win7 x64安裝解壓版mysql 5.7.18 winx64出現(xiàn)服務(wù)無法啟動(dòng)問題,需要的朋友可以參考下
    2017-05-05
  • mysql插入前判斷數(shù)據(jù)是否存在的操作

    mysql插入前判斷數(shù)據(jù)是否存在的操作

    這篇文章主要介紹了mysql插入前判斷數(shù)據(jù)是否存在的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2020-12-12
  • MySQL更新某個(gè)字段拼接固定字符串的實(shí)現(xiàn)

    MySQL更新某個(gè)字段拼接固定字符串的實(shí)現(xiàn)

    在MySQL中,我們經(jīng)常需要對(duì)數(shù)據(jù)庫(kù)中的某個(gè)字段進(jìn)行更新操作,本文就來介紹一下MySQL更新某個(gè)字段拼接固定字符串的實(shí)現(xiàn),感興趣的可以了解一下
    2025-04-04
  • Mysql如何在linux中實(shí)現(xiàn)定時(shí)備份

    Mysql如何在linux中實(shí)現(xiàn)定時(shí)備份

    這篇文章主要介紹了Mysql如何在linux中實(shí)現(xiàn)定時(shí)備份,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-09-09
  • Mysql8主從復(fù)制解讀(兼容低高版本)

    Mysql8主從復(fù)制解讀(兼容低高版本)

    文章詳細(xì)介紹了MySQL主從復(fù)制的理論知識(shí)、必要前提、實(shí)現(xiàn)原理、binlog的三種類型以及主從同步的具體步驟,通過配置主庫(kù)和從庫(kù)的MySQL配置文件,并創(chuàng)建用于主從同步的用戶,可以實(shí)現(xiàn)主從復(fù)制,最后,文章還討論了主從同步的驗(yàn)證和故障切換的方法
    2025-02-02
  • MySQL ERROR 2013 (HY000)錯(cuò)誤解決方法

    MySQL ERROR 2013 (HY000)錯(cuò)誤解決方法

    這篇文章主要介紹了MySQL ERROR 2013 (HY000)錯(cuò)誤解決方法,錯(cuò)誤提示全文ERROR 2013 (HY000): Lost connection to MySQL server at 'reading initial communication packet', system error: 104,需要的朋友可以參考下
    2015-01-01
  • MySQL的order?by如何避免"未命中索引"(推薦)

    MySQL的order?by如何避免"未命中索引"(推薦)

    本文詳細(xì)解析了在使用MySQL的OrderBy語(yǔ)句時(shí),如何通過Explain查看執(zhí)行計(jì)劃以及如何有效利用索引,介紹了常見的索引未命中情況,提供了多個(gè)示例來解釋如何根據(jù)索引的不同使用情況調(diào)整SQL語(yǔ)句,以確保最優(yōu)的查詢性能
    2024-11-11

最新評(píng)論