MySQL的子查詢中FROM和EXISTS子句的使用教程
FROM 子查詢
FROM 子句中的子查詢
MySQL FROM 子查詢是指 FROM 的子句作為子查詢語句,主查詢?cè)俚阶硬樵兘Y(jié)果中獲取需要的數(shù)據(jù)。FROM 子查詢語法如下:
SELECT ... FROM (subquery) AS name ...
子查詢會(huì)生成一個(gè)臨時(shí)表,由于 FROM 子句中的每個(gè)表必須有一個(gè)名稱,因此 AS name 是必須的。FROM 子查詢也稱為衍生數(shù)據(jù)表子查詢。
FROM 子查詢實(shí)例
table1:
s1 s2 1 5 2 12 3 20
FROM 子查詢 SQL 如下:
SELECT s1,s2 FROM (SELECT s1, s2*2 AS s2 FROM table1) AS temp WHERE s1 > 1
查詢返回結(jié)果如下所示:
s1 s2 2 24 3 40
提示
MySQL FROM 子句中的子查詢可以返回標(biāo)量、列、行或表,但不能為有關(guān)聯(lián)的子查詢。
MySQL 子查詢 EXISTS 和 NOT EXISTS
MySQL EXISTS 和 NOT EXISTS 子查詢
MySQL EXISTS 和 NOT EXISTS 子查詢語法如下:
SELECT ... FROM table WHERE EXISTS (subquery)
該語法可以理解為:將主查詢的數(shù)據(jù),放到子查詢中做條件驗(yàn)證,根據(jù)驗(yàn)證結(jié)果(TRUE 或 FALSE)來決定主查詢的數(shù)據(jù)結(jié)果是否得以保留。
MySQL EXISTS 子查詢實(shí)例
下面以實(shí)際的例子來理解 EXISTS 子查詢。下面是原始的數(shù)據(jù)表:
article 文章表:

user 用戶表:

我們要查出 article 表中的數(shù)據(jù),但要求 uid 必須在 user 表中存在。SQL 語句如下:
SELECT * FROM article WHERE EXISTS (SELECT * FROM user WHERE article.uid = user.uid)
返回查詢結(jié)果如下:

從語句執(zhí)行結(jié)果可以看出,article 表中第 4 條記錄沒有被保留,原因就是該條記錄的數(shù)據(jù)在子查詢中返回的結(jié)果是 FALSE 。
當(dāng)上面的 SQL 使用 NOT EXISTS 時(shí),查詢的結(jié)果就是 article 表中 uid 不存在于 user 表中的數(shù)據(jù)記錄。
提示
EXISTS (subquery) 只返回 TRUE 或 FALSE,因此子查詢中的 SELECT * 也可以是 SELECT 1 或其他,官方說法是實(shí)際執(zhí)行時(shí)會(huì)忽略 SELECT 清單,因此沒有區(qū)別。
EXISTS 子查詢的實(shí)際執(zhí)行過程可能經(jīng)過了優(yōu)化而不是我們理解上的逐條對(duì)比,如果擔(dān)憂效率問題,可進(jìn)行實(shí)際檢驗(yàn)以確定是否有效率問題。
EXISTS 子查詢往往也可以用條件表達(dá)式、其他子查詢或者 JOIN 來替代,何種最優(yōu)需要具體問題具體分析。
- MySQL中in與exists的使用及區(qū)別介紹
- 對(duì)比分析MySQL語句中的IN 和Exists
- mysql exists與not exists實(shí)例詳解
- MySQL exists 和in 詳解及區(qū)別
- mySQL中in查詢與exists查詢的區(qū)別小結(jié)
- MySQL關(guān)于exists的一個(gè)bug
- 安裝mysql出錯(cuò)”A Windows service with the name MySQL already exists.“如何解決
- MYSQL IN 與 EXISTS 的優(yōu)化示例介紹
- mysql not in、left join、IS NULL、NOT EXISTS 效率問題記錄
- UCenter info: MySQL Query Error SQL:SELECT value FROM [Table]vars WHERE noteexists
- Mysql?exists用法小結(jié)
相關(guān)文章
mysql 5.7.17 zip安裝配置教程 mysql啟動(dòng)失敗的解決方法
這篇文章主要為大家詳細(xì)介紹了mysql 5.7.17 zip安裝配置教程,以及mysql啟動(dòng)失敗的解決方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-06-06
MySQL 中處理 BLOB 和 CLOB 數(shù)據(jù)類型小結(jié)
在MySQL中,BLOB和CLOB 數(shù)據(jù)類型用于存儲(chǔ)大量的二進(jìn)制數(shù)據(jù)和字符數(shù)據(jù),可以使用SQL 語句或編程語言將二進(jìn)制數(shù)據(jù)和字符數(shù)據(jù)插入到BLOB 和CLOB列中,這篇文章主要介紹了MySQL 中處理 BLOB 和 CLOB 數(shù)據(jù)類型,需要的朋友可以參考下2025-03-03
MySQL數(shù)據(jù)庫之?dāng)?shù)據(jù)表操作DDL數(shù)據(jù)定義語言
這篇文章主要介紹了MySQL數(shù)據(jù)庫之?dāng)?shù)據(jù)表操作DDL數(shù)據(jù)定義語言,文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下2022-08-08
SQL中current_date()函數(shù)的實(shí)現(xiàn)
日期時(shí)間類型的數(shù)據(jù)也是經(jīng)常要用到的,SQL中也提供了一些函數(shù)對(duì)這些數(shù)據(jù)進(jìn)行處理,本文主要介紹了SQL中current_date()函數(shù)的實(shí)現(xiàn),具有一定的參考價(jià)值2024-02-02
mysql如何設(shè)置主從數(shù)據(jù)庫的同步
這篇文章主要介紹了mysql如何設(shè)置主從數(shù)據(jù)庫的同步問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-10-10
MySQL 5.6下table_open_cache參數(shù)優(yōu)化合理配置詳解
這篇文章主要介紹了MySQL 5.6下table_open_cache參數(shù)合理配置詳解,需要的朋友可以參考下2018-03-03
CentOS7.3下mysql 8.0.13安裝配置方法圖文教程
這篇文章主要為大家詳細(xì)介紹了CentOS7.3下mysql 8.0.13安裝配置方法圖文教程,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-11-11
mysql優(yōu)化之query_cache_limit參數(shù)說明
query_cache_limit指定單個(gè)查詢能夠使用的緩沖區(qū)大小,缺省為1M,一般不需要優(yōu)化2021-07-07

