《Mysql必讀MySQL的子查詢中FROM和EXISTS子句的使用教程》要點:
本文介紹了Mysql必讀MySQL的子查詢中FROM和EXISTS子句的使用教程,希望對您有用。如果有疑問,可以聯(lián)系我們。
MYSQL學習FROM 子查詢
FROM 子句中的子查詢
MySQL FROM 子查詢是指 FROM 的子句作為子查詢語句,主查詢再到子查詢結(jié)果中獲取需要的數(shù)據(jù).FROM 子查詢語法如下:
MYSQL學習
SELECT ... FROM (subquery) AS name ...
MYSQL學習子查詢會生成一個臨時表,由于 FROM 子句中的每個表必須有一個名稱,因此 AS name 是必須的.FROM 子查詢也稱為衍生數(shù)據(jù)表子查詢.
FROM 子查詢實例
table1:
MYSQL學習
s1 s2
1 5
2 12
3 20
MYSQL學習FROM 子查詢 SQL 如下:
SELECT s1,s2 FROM (SELECT s1, s2*2 AS s2 FROM table1) AS temp WHERE s1 > 1
查詢返回結(jié)果如下所示:
MYSQL學習
s1 s2
2 24
3 40
MYSQL學習提示
MySQL FROM 子句中的子查詢可以返回標量、列、行或表,但不能為有關(guān)聯(lián)的子查詢.
MYSQL學習MySQL 子查詢 EXISTS 和 NOT EXISTS
MySQL EXISTS 和 NOT EXISTS 子查詢
MySQL EXISTS 和 NOT EXISTS 子查詢語法如下:
MYSQL學習
SELECT ... FROM table WHERE EXISTS (subquery)
MYSQL學習該語法可以理解為:將主查詢的數(shù)據(jù),放到子查詢中做條件驗證,根據(jù)驗證結(jié)果(TRUE 或 FALSE)來決定主查詢的數(shù)據(jù)結(jié)果是否得以保存.
MySQL EXISTS 子查詢實例
下面以實際的例子來理解 EXISTS 子查詢.下面是原始的數(shù)據(jù)表:
article 文章表:
MYSQL學習
MYSQL學習user 用戶表:
MYSQL學習
MYSQL學習我們要查出 article 表中的數(shù)據(jù),但要求 uid 必須在 user 表中存在.SQL 語句如下:
MYSQL學習
SELECT * FROM article WHERE EXISTS (SELECT * FROM user WHERE article.uid = user.uid)
MYSQL學習返回查詢結(jié)果如下:
MYSQL學習
MYSQL學習從語句執(zhí)行結(jié)果可以看出,article 表中第 4 條記錄沒有被保存,原因就是該條記錄的數(shù)據(jù)在子查詢中返回的結(jié)果是 FALSE .
當上面的 SQL 使用 NOT EXISTS 時,查詢的結(jié)果就是 article 表中 uid 不存在于 user 表中的數(shù)據(jù)記錄.
提示
EXISTS (subquery) 只返回 TRUE 或 FALSE,因此子查詢中的 SELECT * 也可以是 SELECT 1 或其他,官方說法是實際執(zhí)行時會忽略 SELECT 清單,因此沒有區(qū)別.
EXISTS 子查詢的實際執(zhí)行過程可能經(jīng)過了優(yōu)化而不是我們理解上的逐條對比,如果擔憂效率問題,可進行實際檢驗以確定是否有效率問題.
EXISTS 子查詢往往也可以用條件表達式、其他子查詢或者 JOIN 來替代,何種最優(yōu)需要具體問題具體分析.
《Mysql必讀MySQL的子查詢中FROM和EXISTS子句的使用教程》是否對您有啟發(fā),歡迎查看更多與《Mysql必讀MySQL的子查詢中FROM和EXISTS子句的使用教程》相關(guān)教程,學精學透。維易PHP學院為您提供精彩教程。
轉(zhuǎn)載請注明本頁網(wǎng)址:
http://www.snjht.com/jiaocheng/12300.html