式リスト(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;