国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 數據庫 > MySQL > 正文

MySQL的子查詢中FROM和EXISTS子句的使用教程

2024-07-24 13:08:16
字體:
來源:轉載
供稿:網友
這篇文章主要介紹了MySQL的子查詢中FROM和EXISTS子句的使用教程,子查詢是MySQL入門學習中的基礎知識,需要的朋友可以參考下
 

FROM 子查詢
FROM 子句中的子查詢
MySQL FROM 子查詢是指 FROM 的子句作為子查詢語句,主查詢再到子查詢結果中獲取需要的數據。FROM 子查詢語法如下:

SELECT ... FROM (subquery) AS name ...

子查詢會生成一個臨時表,由于 FROM 子句中的每個表必須有一個名稱,因此 AS name 是必須的。FROM 子查詢也稱為衍生數據表子查詢。
FROM 子查詢實例
table1:

s1 s21  52  123  20

FROM 子查詢 SQL 如下:
SELECT s1,s2 FROM (SELECT s1, s2*2 AS s2 FROM table1) AS temp WHERE s1 > 1
查詢返回結果如下所示:

s1 s22 243 40

提示
MySQL FROM 子句中的子查詢可以返回標量、列、行或表,但不能為有關聯的子查詢。

MySQL 子查詢 EXISTS 和 NOT EXISTS
MySQL EXISTS 和 NOT EXISTS 子查詢
MySQL EXISTS 和 NOT EXISTS 子查詢語法如下:

SELECT ... FROM table WHERE EXISTS (subquery)

該語法可以理解為:將主查詢的數據,放到子查詢中做條件驗證,根據驗證結果(TRUE 或 FALSE)來決定主查詢的數據結果是否得以保留。
MySQL EXISTS 子查詢實例
下面以實際的例子來理解 EXISTS 子查詢。下面是原始的數據表:
article 文章表:

MySQL的子查詢中FROM和EXISTS子句的使用教程

user 用戶表:

MySQL的子查詢中FROM和EXISTS子句的使用教程

我們要查出 article 表中的數據,但要求 uid 必須在 user 表中存在。SQL 語句如下:

SELECT * FROM article WHERE EXISTS (SELECT * FROM user WHERE article.uid = user.uid)

返回查詢結果如下:

MySQL的子查詢中FROM和EXISTS子句的使用教程

從語句執行結果可以看出,article 表中第 4 條記錄沒有被保留,原因就是該條記錄的數據在子查詢中返回的結果是 FALSE 。
當上面的 SQL 使用 NOT EXISTS 時,查詢的結果就是 article 表中 uid 不存在于 user 表中的數據記錄。
提示
EXISTS (subquery) 只返回 TRUE 或 FALSE,因此子查詢中的 SELECT * 也可以是 SELECT 1 或其他,官方說法是實際執行時會忽略 SELECT 清單,因此沒有區別。
EXISTS 子查詢的實際執行過程可能經過了優化而不是我們理解上的逐條對比,如果擔憂效率問題,可進行實際檢驗以確定是否有效率問題。
EXISTS 子查詢往往也可以用條件表達式、其他子查詢或者 JOIN 來替代,何種最優需要具體問題具體分析。



注:相關教程知識閱讀請移步到MYSQL教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 鸡西市| 阜康市| 山丹县| 阜新市| 翁牛特旗| 合作市| 纳雍县| 新河县| 绥化市| 城口县| 涪陵区| 招远市| 堆龙德庆县| 石柱| 哈尔滨市| 澜沧| 阳曲县| 剑阁县| 同江市| 呼伦贝尔市| 江安县| 磴口县| 手游| 汕尾市| 石柱| 麻栗坡县| 珲春市| 博爱县| 平原县| 灌南县| 石城县| 宜都市| 林口县| 富民县| 长葛市| 和平县| 慈利县| 个旧市| 拉萨市| 辉县市| 宿州市|