MySQL 9.0 發行說明
最簡單的形式中,子查詢是回傳單一值的純量子查詢。純量子查詢是一個簡單的運算元,您幾乎可以在任何單一欄位值或常值合法的的地方使用它,並且您可以期望它具有所有運算元都具有的特性:資料類型、長度、它可以是 NULL 的指示等等。例如
CREATE TABLE t1 (s1 INT, s2 CHAR(5) NOT NULL);
INSERT INTO t1 VALUES(100, 'abcde');
SELECT (SELECT s2 FROM t1);此 SELECT 中的子查詢回傳一個單一值('abcde'),其資料類型為 CHAR,長度為 5,字元集和排序規則等於 CREATE TABLE 時生效的預設值,並指出該欄位中的值可以是 NULL。純量子查詢選取的值的可空性不會被複製,因為如果子查詢結果為空,則結果為 NULL。對於剛剛顯示的子查詢,如果 t1 為空,則結果將為 NULL,即使 s2 為 NOT NULL。
在某些情況下,純量子查詢無法使用。如果語句只允許常值,則您不能使用子查詢。例如,LIMIT 需要常值整數參數,而 LOAD DATA 需要常值字串檔案名稱。您不能使用子查詢來提供這些值。
當您在以下章節中看到包含相當簡略的結構 (SELECT column1 FROM t1) 的範例時,請想像您自己的程式碼包含更多樣化和複雜的結構。
假設我們建立兩個表格
CREATE TABLE t1 (s1 INT);
INSERT INTO t1 VALUES (1);
CREATE TABLE t2 (s1 INT);
INSERT INTO t2 VALUES (2);然後執行 SELECT
SELECT (SELECT s1 FROM t2) FROM t1;結果是 2,因為 t2 中有一列包含一個值為 2 的欄位 s1。
前面的查詢也可以這樣寫,使用 TABLE
SELECT (TABLE t2) FROM t1;純量子查詢可以是運算式的一部分,但請記住括號,即使子查詢是為函式提供引數的運算元。例如
SELECT UPPER((SELECT s1 FROM t1)) FROM t2;使用 SELECT UPPER((TABLE t1)) FROM t2 可以獲得相同的結果。