Select 列表中的表达式
在选择列表中,您可使用任何基本类型的表达式(列、常量、内建的函数、聚集函数和用户定义的例程)及其组合。在 表达式 中描述表达式类型。以下部分展示在选择列表中的简单表达式的示例。
您可通过加、减、乘、除算术运算符将简单的数值表达式连接组合起来。然而,如果您组合列表达式与聚集函数,则必须在 GROUP BY 子句中包括该列表达式。(另请参阅 GROUP BY 与 Projection 子句之间的依赖。)
通常,您不可在选择列表中使用变量(例如,在 GBase 8s ESQL/C 应用程序中的主变量)本身。然而,如果以算术运算符或连接运算符将它与变量相连接,则选择列表中的变量是有效的。
在 FOREACH SELECT 语句中,当 FROM 子句中的表为远程表时,您不可使用选择列表中的 SPL 变量本身或随同列名称使用。当 FROM 子句中的表为本地表时,您可使用 SPL 变量自身,或随同选择列表中的常量使用。
在 GBase 8s 的分布式查询中,表达式中的值(以及表达式返回的值)是受限的,如 跨服务器事务中的数据类型 所述。在同一 GBase 8s 实例的其他数据库中将其返回值用作表达式的任何 UDR,必须定义在每一参与的数据库中。
在 Projection 子句中,布尔操作符 NOT 不是有效的。
选择列
列表达式是在 SELECT 语句中最常用的表达式。要获取列表达式的语法和使用的完整描述,请参阅 列表达式。下列示例在 Projection 子句中使用列表达式:
SELECT orders.order_num, items.price FROM orders, items;
SELECT customer.customer_num ccnum, company FROM customer;
SELECT catalog_num, stock_num, cat_advert [1,15] FROM catalog;
SELECT lead_time - 2 UNITS DAY FROM manufact;
选择常量
如果您在 projection 列表中包含常量表达式,则对查询返回的每一行返回相同的值(除了当常量表达式为 NEXTVAL 之外)。要了解常量表达式的语法和使用的完整描述,请参阅 常量表达式。下列示例展示选择列表之内的常量表达式:
SELECT ‘The first name is’, fname FROM customer;
SELECT TODAY FROM cust_calls;
SELECT SITENAME FROM systables WHERE tabid = ;1
SELECT lead_time - 2 UNITS DAY FROM manufact;
SELECT customer_num + LENGTH(‘string’) from customer;
选择内建的函数表达式
内建的函数表达式使用对查询中每一行求值的函数。所有内建的函数表达式都需要参数。这些表达式包含时间函数和长度函数,当它们随同列名称作为参数使用时。下列示例展示 Projection 子句的选择列表之内的内建的函数表达式:
SELECT EXTEND(res_dtime, YEAR TO SECOND) FROM cust_calls;
SELECT LENGTH(fname) + LENGTH(lname) FROM customer;
SELECT HEX(order_num) FROM orders;
SELECT MONTH(order_date) FROM orders;
选择聚集函数表达式
聚集函数返回对一系列被查询的行的一个值。此值依赖于 SELECT 语句指定的 WHERE 子句的行的集合。如果缺少 WHERE 子句,则聚集函数采用的值依赖于 FROM 子句构成的所有行。
下列示例展示 projection 列表中的聚集函数:
SELECT SUM(total_price) FROM items WHERE order_num = 1013;
SELECT COUNT() FROM orders WHERE order_num = 1001;
SELECT MAX(LENGTH(fname) + LENGTH(lname)) FROM customer;
然而,如果 Projection 子句未指定 SELECT 语句的 DISTINCT 或 UNIQUE 关键字,则查询可包括一个或多个包括 DISTINCT 或 UNIQUE 关键字作为参数列表的第一个规范的聚集函数:
SELECT SUM(DISTINCT total_price) FROM items WHERE order_num = 1013;
SELECT COUNT(DISTINCT ) FROM orders WHERE order_num = 1001;
SELECT MAX(LENGTH(fname) + LENGTH(UNIQUE lname)) FROM customer;
然而,如果 Projection 子句和聚集函数表达式都在同一查询中指定 DISTINCT 或 UNIQUE 关键字,则数据库服务器发出错误。
对于包括聚集函数表达式的网格查询,您必须在子查询中指定 GRID 子句,每一网格服务器计算的聚集表达式的值为商,这个商的分母在参与的网格服务器之间不同。
请不要将 SQL 聚集函数与“联机分析处理”(OLAP)窗口聚集函数混淆,它们是不同类别的函数。
当聚集函数表达式紧跟在 OVER 子句之后时,数据库服务器尝试将它解释为 OLAP 聚集函数。有些 OLAP 聚集函数与 SQL 聚集函数同名(并支持相同语法的子集),但这两类函数的行为不同。
SQL 聚集函数可嵌套在 OLAP 聚集函数之中。例如,在 dollars 为 sales 表 中的列的上下文中,下列查询是有效的:
SELECT AVG(SUM(dollars)) OVER() FROM sales;
在上述示例中,SUM 函数是 SQL 聚集函数,且包含的 AVG 函数是 OLAP 窗口函数。查询处理的顺序规定总是在分组和聚集操作之后、最后的 ORDER BY 操作之前计算 OLAP 函数。
选择 OLAP 窗口表达式
您可在 Projection 子句的选择列表中包括 OLAP 窗口表达式。
“联机分析处理”(OLAP)函数可返回对查询或子查询的整个结果集、对 OLAP 定义的符合条件的行的分区的子集的排名、行号和聚集函数信息。您可使用 OLAP 规范来定义对于数据的检测维度结果集的分区之内移动窗口,以及标识模式、趋势和数据集内的例外。
包括 OLAP 窗口表达式的查询返回该查询的结果集中的行,以及 OLAP 窗口函数的结果,如果那些函数有任何返回的话。
OLAP 窗口聚集函数表达式可作为另一 OLAP 窗口聚集函数的参数。然而,OLAP 窗口聚集不可为非分析的聚集函数的参数。
选择用户定义的函数表达式
用户定义的函数扩展了您可用的函数的范围,并允许您对您选择的每一行执行子查询。
下列示例为每一 customer_num 调用 get_orders( ) 用户定义的函数,并显示 n_orders 标签之下的返回的值:
SELECT customer_num, lname, get_orders(customer_num) n_orders
FROM customer;
如果 SELECT 语句中的 SPL 例程包含某些 SQL 语句,则数据库服务器返回错误。要获取关于在查询之内调用的 SPL 例程中不可使用哪些 SQL 语句的信息,请参阅 在数据操纵语句中 SPL 例程的限制。
要获取用户定义的函数表达式的完整语法,请参阅 用户定义的函数。
选择使用算术运算符的表达式
您可将数值表达式与算术运算符组合来生成复合的表达式。您不可将包含聚集函数的表达式与列表达式组合。这些示例展示在 Projection 子句中的选择列表之内使用算术运算符的表达式:
SELECT stock_num, quantitytotal_price FROM customer;
SELECT price2 doubleprice FROM items;
SELECT count()+2 FROM customer;
SELECT count()+LENGTH(‘ab’) FROM customer;
南大通用GBase8s 常用SQL语句(202)
最新推荐文章于 2024-05-12 23:13:05 发布