阅读(2980) (21)

OceanBase 表达式列表

2021-06-24 11:17:16 更新

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

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

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

  • 每一组被括号包含。

  • 每一组必须包含相同数量的表达式。

  • 每一组中表达式的数量需要与比较条件中运算符之前的表达式的数量匹配,或者与成员条件中 IN 关键字之前的表达式的数量匹配。

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

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

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

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

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

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

SELECT department_id, MIN(salary) min, MAX(salary) max FROM employees 
    GROUP BY department_id, salary
    ORDER BY department_id, min, max;

SELECT department_id, MIN(salary) min, MAX(salary) max FROM employees 
    GROUP BY (department_id, salary)
    ORDER BY department_id, min, max;

在 GROUP BY 子句的 ROLLUPCUBE 和 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-oct-00'
        AND customers.cust_year_of_birth BETWEEN 1960 and 1970
    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;