式のリスト(Expression List)は、一連の式を組み合わせたものです。
式のリストは、比較条件やメンバー条件、およびクエリとサブクエリの GROUP BY 句に記述できます。比較条件やメンバー条件における式のリストは、行値コンストラクタ(Row Value Constructor)または行コンストラクタ(Row Constructor)と呼ばれることがあります。
比較条件やメンバー条件は WHERE 句に記述されます。これらには、カンマ区切りの1つ以上の式、または複数の式グループを含めることができます。各式グループには、さらにカンマ区切りの1つ以上の式を含めることができます。複数の式グループを使用する場合の書式要件は以下の通りです:
各グループは括弧で囲みます。
各グループには同じ数の式を含める必要があります。
各グループ内の式の数は、比較条件における演算子の前の式の数、またはメンバー条件における
INキーワードの前の式の数と一致している必要があります。
カンマ区切りの式のリストは、最大1000個の式を含めることができます。カンマ区切りの式グループのリストは任意の数の式グループを含めることができますが、各式グループは最大1000個の式を含めることができます。
以下の例は有効な式のリストです:
(100, 200, 300)
('SCOTT', 'BLAIR', 'MARK')
( ('fruit', 'apple', 'red'),('vegetable', 'eggplant', 'purple') )
3番目の例では、各グループの式の数はSQL文の条件の最初の部分の式の数と等しくなければなりません。例:
SELECT * FROM products
WHERE (category, name, color) IN
( ('fruit', 'apple', 'red'),('vegetable', 'eggplant', 'purple') );
単純な GROUP BY 句では、式のリストは大文字または小文字をサポートします。例:
SELECT dept_id, MIN(salary) min, MAX(salary) max FROM emp
GROUP BY dept_id, salary
ORDER BY dept_id, min, max;
SELECT dept_id, MIN(salary) min, MAX(salary) max FROM emp
GROUP BY (dept_id, salary)
ORDER BY dept_id, min, max;
GROUP BY 句の ROLLUP および GROUPING SETS 句では、同一の式のリスト内で単一の式と式グループを組み合わせることができます。以下の例は、SQL文で有効なグループ化のための式のリストです:
SELECT prod_category, prod_subcategory, country_id, cust_city, count(*)
FROM products, sales, customers
WHERE sales.prod_id = products.prod_id
AND sales.cust_id=customers.cust_id
AND sales.time_id = '01-dec-00'
AND customers.cust_year_of_birth BETWEEN 1970 and 1980
GROUP BY GROUPING SETS (
(prod_category, prod_subcategory, country_id, cust_city), (prod_category, prod_subcategory, country_id), (prod_category, prod_subcategory),
country_id
)
ORDER BY prod_category, prod_subcategory, country_id, cust_city;