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

MySQL子查詢的使用詳解上篇

 更新時間:2022年08月30日 15:12:25   作者:一個風(fēng)輕云淡  
子查詢是在查詢語句里面再嵌套一個查詢,這是因為我們在提取數(shù)據(jù)的時候有很多不知道的數(shù)據(jù)產(chǎn)生了依賴關(guān)系。本文為大家總結(jié)了一下MySQL數(shù)據(jù)庫子查詢語法規(guī)則,感興趣的可以了解一下

前言

子查詢指一個查詢語句嵌套在另一個查詢語句內(nèi)部的查詢,這個特性從MySQL 4.1開始引入。

SQL 中子查詢的使用大大增強了 SELECT 查詢的能力,因為很多時候查詢需要從結(jié)果集中獲取數(shù)據(jù),或者 需要從同一個表中先計算得出一個數(shù)據(jù)結(jié)果,然后與這個數(shù)據(jù)結(jié)果(可能是某個標(biāo)量,也可能是某個集 合)進(jìn)行比較。

需求分析與問題解決

#方式一:
SELECT salary
FROM employees
WHERE last_name = 'Abel';
SELECT last_name , salary
FROM employees
WHERE salary > 1 1 000 ;
#方式二:自連接
SELECT e2 .last_name , e2 . salary
FROM employees e1 , employees e2
WHERE e1.last_name = ' Abel '
AND e1. ` salary ` < e2. ` salary `
#方式三:子查詢
SELECT last_name,salary
FROM employees
WHERE salary > (
SELECT salary
FROM employees
WHERE last_name = 'Abel'
);

子查詢的基本使用

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

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

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

注意事項

子查詢要包含在括號內(nèi)

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

單行操作符對應(yīng)單行子查詢,多行操作符對應(yīng)多行子查詢

子查詢的分類

分類方式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é)果,如果這個數(shù)據(jù)結(jié)果只執(zhí)行一次,然后這個數(shù)據(jù)結(jié)果作為主查詢的條件進(jìn)行執(zhí)行,那么這樣的子查詢叫做不相關(guān)子查詢。

同樣,如果子查詢需要執(zhí)行多次,即采用循環(huán)的方式,先從外部查詢開始,每次都傳入子查詢進(jìn)行查詢,然后再將結(jié)果反饋給外部,這種嵌套的執(zhí)行方式就稱為相關(guān)子查詢。

單行子查詢

代碼示例

題目:查詢工資大于149號員工工資的員工的信息

題目:返回job_id與141號員工相同,salary比143號員工多的員工姓名,job_id和工資

SELECT last_name, 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);

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

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

HAVING中的子查詢

顯式員工的employee_id,last_name和location。其中,若員工department_id與location_id為1800的department_id相同,則location為’Canada’,其余則為’USA’。

SELECT employee_id, last_name,
(CASE department_id
WHEN
(SELECT department_id FROM departments
WHERE location_id = 1800)
THEN 'Canada' ELSE 'USA' END) location
FROM employees;

非法使用子查詢

SELECT employee_id, last_name
FROM employees
WHERE salary =
(SELECT MIN(salary)
FROM employees
GROUP BY department_id);

多行子查詢

也稱為集合比較子查詢

內(nèi)查詢返回多行

使用多行比較操作符

多行比較操作符

代碼示例

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

題目:返回其它job_id中比job_id為‘IT_PROG’部門所有工資都低的員工的員工號、姓名、job_id以及id

題目:查詢平均工資最低的部門id

SELECT department_id
FROM employees
GROUP BY department_id
HAVING AVG(salary) <= ALL (
        SELECT AVG(salary) avg_sal
        FROM employees
        GROUP BY department_id)
SELECT department_id
FROM employees
GROUP BY department_id
HAVING AVG(salary) = (
SELECT MIN(avg_sal)
FROM (
        SELECT AVG(salary) avg_sal
        FROM employees
        GROUP BY department_id
        ) dept_avg_sal
)

到此這篇關(guān)于MySQL子查詢的使用詳解上篇的文章就介紹到這了,更多相關(guān)MySQL子查詢內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • mysqldump加-w參數(shù)備份數(shù)據(jù)時需要注意的事項

    mysqldump加-w參數(shù)備份數(shù)據(jù)時需要注意的事項

    這篇文章主要介紹了mysqldump加-w參數(shù)備份數(shù)據(jù)時需要注意的事項,需要的朋友可以參考下
    2014-06-06
  • mysql中插入表數(shù)據(jù)中文亂碼問題的解決方法

    mysql中插入表數(shù)據(jù)中文亂碼問題的解決方法

    mysql是我們項目中非經(jīng)常常使用的數(shù)據(jù)型數(shù)據(jù)庫,下面這篇文章主要給大家介紹了關(guān)于mysql中插入表數(shù)據(jù)中文亂碼問題的解決方法,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考借鑒,下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2018-09-09
  • 進(jìn)入mysql命令行和退出mysql命令行詳解

    進(jìn)入mysql命令行和退出mysql命令行詳解

    這篇文章主要介紹了進(jìn)入mysql命令行和退出mysql命令行,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-11-11
  • MySQL 獨立索引和聯(lián)合索引的選擇

    MySQL 獨立索引和聯(lián)合索引的選擇

    為了提高數(shù)據(jù)庫效率,建索引是家常便飯;那么當(dāng)查詢條件為2個及以上時,我們是創(chuàng)建多個單列索引還是創(chuàng)建一個聯(lián)合索引好呢?他們之間的區(qū)別是什么?哪個效率高呢?本文將詳細(xì)測試分析下。
    2021-05-05
  • Mysql大型SQL文件快速恢復(fù)方案分享

    Mysql大型SQL文件快速恢復(fù)方案分享

    這篇文章主要給大家介紹了關(guān)于Mysql大型SQL文件快速恢復(fù)方案的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用Mysql具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-09-09
  • Sysbench多線程性能測試工具

    Sysbench多線程性能測試工具

    sysbench是一個多線程性能測試工具,可以進(jìn)行CPU/內(nèi)存/IO/數(shù)據(jù)庫等性能測試,不過我絕大多數(shù)的時候都是用它來對數(shù)據(jù)庫(MySQL)進(jìn)行oltp測試
    2012-11-11
  • 為何不要在MySQL中使用UTF-8編碼方式詳解

    為何不要在MySQL中使用UTF-8編碼方式詳解

    這篇文章主要給大家介紹了關(guān)于為何不要在MySQL中使用UTF-8編碼方式的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用MySQL具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-06-06
  • 解決MySQL因不能創(chuàng)建臨時文件而導(dǎo)致無法啟動的方法

    解決MySQL因不能創(chuàng)建臨時文件而導(dǎo)致無法啟動的方法

    這篇文章主要跟大家介紹了關(guān)于解決MySQL因不能創(chuàng)建臨時文件而導(dǎo)致無法啟動的方法,文中通過示例代碼介紹了詳細(xì)的解決方法,對大家具有一定的的參考學(xué)習(xí)價值,需要的朋友們下面來一起看看吧。
    2017-06-06
  • mysql密碼過期導(dǎo)致連接不上mysql

    mysql密碼過期導(dǎo)致連接不上mysql

    mysql密碼過期了,今天遇到了連接mysql,總是連接不上去,下面有兩種錯誤現(xiàn)象,有類似問題的朋友可以參考看看,或許對你有所幫助
    2013-05-05
  • Mysql中禁用與啟動觸發(fā)器教程【推薦】

    Mysql中禁用與啟動觸發(fā)器教程【推薦】

    在使用MYSQL過程中,經(jīng)常會使用到觸發(fā)器,但是有時使用不當(dāng)會造成一些麻煩。下面小編給大家?guī)砹薓ysql中禁用與啟動觸發(fā)器教程,感興趣的朋友一起看看吧
    2018-08-08

最新評論