top
Loading...
13.2.8.Subquery語法
13.2.8. Subquery語法
13.2.8.1. 子查詢作為標量操作數
13.2.8.2. 使用子查詢進行比較
13.2.8.3. 使用ANY, IN和SOME進行子查詢
13.2.8.4. 使用ALL進行子查詢
13.2.8.5. 行子查詢
13.2.8.6. EXISTS和NOT EXISTS
13.2.8.7. 關聯子查詢
13.2.8.8. FROM子句中的子查詢
13.2.8.9. 子查詢錯誤
13.2.8.10. 優化子查詢
13.2.8.11. 把子查詢作為用于早期MySQL版本的聯合進行改寫

子查詢是另一個語句中的一個SELECT語句。

MySQL支持SQL標準要求的所有子查詢格式和操作,也支持MySQL特有的幾種特性。

以下是一個子查詢的例子:

SELECT * FROM t1 WHERE column1 = (SELECT column1 FROM t2);

在本例中,SELECT * FROM t1...是外部查詢(或外部語句),SELECT column1 FROM t2)是子查詢。我們可以說子查詢嵌套在外部查詢中。實際上,子查詢也可以嵌套在其它子查詢中,嵌套程度可以很深。子查詢必須要位于圓括號中。

子查詢的主要優勢為:

·         子查詢允許結構化的查詢,這樣就可以把一個語句的每個部分隔離開。

·         有些操作需要復雜的聯合和關聯。子查詢提供了其它的方法來執行這些操作。

·         在許多人看來,子查詢是可讀的。實際上,子查詢給予人們調用早期SQL“結構化查詢語言”的原本的想法,這是子查詢的創新。

以下是一個示例語句。該語句顯示了有關子查詢語法的要點。子查詢語法由SQL標準指定并被MySQL支持。

DELETE FROM t1
WHERE s11 > ANY
(SELECT COUNT(*) /* no hint */ FROM t2
WHERE NOT EXISTS
(SELECT * FROM t3
WHERE ROW(5*t2.s1,77)=
(SELECT 50,11*s1 FROM t4 UNION SELECT 50,77 FROM
(SELECT * FROM t5) AS t5)));

一個子查詢會返回一個標量(單一值)、一個行、一個列或一個表(一行或多行及一列或多列)。這些子查詢被稱為標量、列、行和表子查詢。可返回一個特定種類結果的子查詢經常只被用于特定的語境中,在后面各節中有說明。

有些語句可以使用子查詢。對這些語句的類型基本沒有限定。子查詢可以包括普通SELECT可以包括的任何關鍵詞或子句:DISTINCT, GROUP BY, ORDER BY, LIMIT, 聯合, 索引提示, UNION結構化, 評注和函數等。

有一個限定是,一個子查詢的外部語句必須是以下語句之一:SELECT, INSERT, UPDATE, DELETE, SETDO。還有一個限定是,目前,您不能在一個子查詢中修改一個表,又在同一個表中選擇。這適用于DELETE, INSERT, REPLACEUPDATE語句。在附錄I:特性限制中給出了對子查詢使用的更綜合的討論。

作者:mysql.com
來源:http://dev.mysql.com/doc/refman/5.1/zh/sql-syntax.html
北斗有巢氏 有巢氏北斗