文件首頁
MySQL 8.4 參考手冊
相關文件 下載本手冊
PDF (美國 Letter) - 39.9Mb
PDF (A4) - 40.0Mb
手冊頁 (TGZ) - 258.5Kb
手冊頁 (Zip) - 365.5Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb


MySQL 8.4 參考手冊  /  ...  /  子查詢作為純量運算元

15.2.15.1 子查詢作為純量運算元

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