表达式列表(Expression List)是一组其它表达式的组合。

    表达式列表可以出现在比较和成员条件,以及查询和子查询的 GROUP BY 子句中。在比较和成员条件中的表达式列表有时被称为行值构造器(Row value constructor)或者行构造器(Row constructor)。

    比较和成员条件出现在 WHERE 子句中。它们可以包含一个或多个逗号分隔的表达式,或是一组或多组表达式,其中每组表达式包含一个或多个逗号分隔的表达式。在接下来的例子中(多组表达式):

    • 每一组被括号包含。
    • 每一组必须包含相同数量的表达式。
    • 每一组中表达式的数量需要与比较条件中运算符之前的表达式的数量匹配,或者与成员条件中 IN 关键字之前的表达式的数量匹配。

    逗号分隔的表达式列表最多只能包含 1000 个表达式。逗号分隔的表达式组列表可以包含任意数量表达式组,但是每一表达式组最多只能包含 1000 个表达式。

    下例是一些有效的表达式列表:

    1. (10, 20, 40)
    2. ('SCOTT', 'BLAKE', 'TAYLOR')
    3. ( ('Guy', 'Himuro', 'GHIMURO'),('Karen', 'Colmenares', 'KCOLMENA') )

    在第三个例子中,每一组的表达式数量必须与 SQL 语句条件的第一部分的表达式数量相等。例如:

    1. SELECT * FROM employees
    2. WHERE (first_name, last_name, email) IN
    3. (('Guy', 'Himuro', 'GHIMURO'),('Karen', 'Colmenares', 'KCOLMENA'));

    在简单的 GROUP BY 子句中,使用大写或小写形式的表达式列表都可以:

    1. SELECT department_id, MIN(salary) min, MAX(salary) max FROM employees
    2. GROUP BY department_id, salary
    3. ORDER BY department_id, min, max;
    4. SELECT department_id, MIN(salary) min, MAX(salary) max FROM employees
    5. GROUP BY (department_id, salary)
    6. ORDER BY department_id, min, max;

    GROUP BY 子句的 ROLLUPCUBEGROUPING SETS 子句中,您可以在同一表达式列表中将单个表达式与表达式组结合。下例展示了一些在 SQL 语句中有效分组表达式列表:

    1. SELECT prod_category, prod_subcategory, country_id, cust_city, count(*)
    2. FROM products, sales, customers
    3. WHERE sales.prod_id = products.prod_id
    4. AND sales.cust_id=customers.cust_id
    5. AND sales.time_id = '01-oct-00'
    6. AND customers.cust_year_of_birth BETWEEN 1960 and 1970
    7. GROUP BY GROUPING SETS (
    8. (prod_category, prod_subcategory, country_id, cust_city), (prod_category, prod_subcategory, country_id), (prod_category, prod_subcategory),
    9. country_id
    10. )
    11. ORDER BY prod_category, prod_subcategory, country_id, cust_city;