MySQL的子查詢中FROM和EXISTS子句的應用教程。本站提示廣大學習愛好者:(MySQL的子查詢中FROM和EXISTS子句的應用教程)文章只能為提供參考,不一定能成為您想要的結果。以下是MySQL的子查詢中FROM和EXISTS子句的應用教程正文
FROM 子查詢
FROM 子句中的子查詢
MySQL FROM 子查詢是指 FROM 的子句作為子查詢語句,主查詢再到子查詢成果中獲得須要的數據。FROM 子查詢語法以下:
SELECT ... FROM (subquery) AS name ...
子查詢會生成一個暫時表,因為 FROM 子句中的每一個表必需有一個稱號,是以 AS name 是必需的。FROM 子查詢也稱為衍生數據表子查詢。
FROM 子查詢實例
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
查詢前往成果以下所示:
s1 s2 2 24 3 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 文章表:
user 用戶表:
我們要查出 article 表中的數據,但請求 uid 必需在 user 表中存在。SQL 語句以下:
SELECT * FROM article WHERE EXISTS (SELECT * FROM user WHERE article.uid = user.uid)
前往查詢成果以下:
從語句履行成果可以看出,article 表中第 4 筆記錄沒有被保存,緣由就是該筆記錄的數據在子查詢中前往的成果是 FALSE 。
當下面的 SQL 應用 NOT EXISTS 時,查詢的成果就是 article 表中 uid 不存在於 user 表中的數據記載。
提醒
EXISTS (subquery) 只前往 TRUE 或 FALSE,是以子查詢中的 SELECT * 也能夠是 SELECT 1 或其他,官方說法是現實履行時會疏忽 SELECT 清單,是以沒有差別。
EXISTS 子查詢的現實履行進程能夠經由了優化而不是我們懂得上的逐條比較,假如擔心效力成績,可停止現實磨練以肯定能否有用率成績。
EXISTS 子查詢常常也能夠用前提表達式、其他子查詢或許 JOIN 來替換,何種最優須要詳細成績詳細剖析。