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
可以獲得相同的結果。