一、MySQL的select語句輸出多行常量的方法
使用union all運算符將多個 SELECT 查詢的結果集組合起來作為一個更大的結果集輸出。
例子:
SELECT 'ABC' AS col1, '123' AS col2UNION ALLSELECT 'DEF' AS col1, '456' AS col2;
在以上代碼中,我們定義了兩個 SELECT 語句,每個 SELECT 語句都選擇了兩個常量值,并使用 UNION ALL 運算符將兩個結果集組合起來。輸出結果如下:
+------+------+ | col1 | col2 | +------+------+ | ABC | 123 | | DEF | 456 | +------+------+
在這個例子中,我們定義了兩個 SELECT 語句,每個 SELECT 語句都返回兩個常量值,并使用 UNION ALL 運算符將這些結果集組合在一起,形成一個包含兩個行的結果集。需要注意的是,每個 SELECT 語句返回的列數和數據類型必須相同,否則將會出現錯誤。
二、union all 運算符
union all 運算符使用同名的物理運算符來實現。union all 是一種相當簡單的操作,僅在查詢要移動大量數據時才應并行使用它。
1、并行 union all
要生成并行的 union all,少數的條件是它的操作數必須具有相同的度,而無論這些操作數具有何種分區類型。
以下示例(使用表HA2)顯示了要并行處理的 union all 運算符。exchange 運算符的位置高于 union all 運算符,這表示它要由多個線程共同處理:
create table HA2(a1 int, a2 int, a3 int)partition by hash(a1, a2) (p1, p2)select * from RA2union allselect * from HA2QUERY PLAN FOR STATEMENT 1 (at line 1).Executed in parallel by coordinating process and 2 worker processes.The type of query is SELECT.ROOT:EMIT Operator????|EXCHANGE Operator (Merged)????|Executed in parallel by 2 Producer and 1 Consumer ?????processes.?????|????| |EXCHANGE:EMIT Operator????| |????| | |UNION ALL Operator has 2 children.????| | |????| | | |SCAN Operator????| | | | FROM TABLE????| | | | RA2????| | | | Table Scan.. . . . . . . . . . . . . . . . . . .????| | | | Executed in parallel with a 2-way ???????????????????partition scan.. . . . . . . . . . . . . . . . . . .????| | |????| | | |SCAN Operator????| | | | FROM TABLE????| | | | HA2????| | | | Table Scan.????. . . . . . . . . . . . . . . . . . .????| | | | Executed in parallel with a 2-way ???????????????????partition scan.
2、串行 union all
在下一示例中,來自 union 運算符每一側的數據分別由每一側的選擇性謂詞加以限制。
要通過 union all 運算符發送的數據量將很少,足以決定不并行運行聯合。相反,通過在 union 的每一側都放置 2 對 1 的 exchange 運算符,將對表 RA2 和 HA2 的每次掃描進行組織。結果操作數隨后由 union all 操作符并行處理:
select * from RA2where a2 > 2400union allselect * from HA2where a3 in (10,20)
Executed in parallel by coordinating process and 4 worker processes.7 operator(s) under rootThe type of query is SELECT.ROOT:EMIT Operator |UNION ALL Operator has 2 children. | | |EXCHANGE Operator (Merged) | |Executed in parallel by 2 Producer and 1??????????????Consumer processes. | | | | |EXCHANGE:EMIT Operator?| | | | | | |SCAN Operator | | | | FROM TABLE | | | | RA2 | | | | Table Scan. | | | | Executed in parallel with a 2-way??????????????????????partition scan. | | |EXCHANGE Operator (Merged) | |Executed in parallel by 2 Producer and 1??????????????Consumer processes. | | | | |EXCHANGE:EMIT Operator | | | | | | |SCAN Operator | | | | FROM TABLE | | | | HA2 | | | | ?Table Scan. | | | | Executed in parallel with a 2-way??????????????????????partition scan.
延伸閱讀1:MySQL
MySQL是一個關系型數據庫管理系統,由瑞典MySQL AB 公司開發,屬于 Oracle 旗下產品。MySQL 是最流行的關系型數據庫管理系統之一,在 WEB 應用方面,MySQL是較好的 RDBMS (Relational Database Management System,關系數據庫管理系統) 應用軟件之一。