MySQL 8.4 版本說明
在其最簡單的形式中,子查詢是一個返回單一值的純量子查詢。純量子查詢是一個簡單的運算元,您幾乎可以在任何單一欄位值或常值合法的地方使用它,並且您可以預期它具有所有運算元都具有的特性:資料類型、長度、它可以是 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
獲得相同的結果。