南大通用GBase8s 常用SQL语句(205)

FROM 子句
SELECT 语句的 FROM 子句罗列要从其检索数据的表对象。
FROM 子句有此语法:
FROM 子句
在这里插入图片描述
表引用
在这里插入图片描述
关系
在这里插入图片描述

元素 描述 限制 语法
alias 在此查询中的表、视图或派生的表的临时名称 请参阅 AS 关键字。 标识符
derived _column 在表表达式中派生的列的临时名称 除非底层集合为 ROW 类型,否则您声明的 derived_column 名称不能超过一个 标识符
external 从其检索数据的外部的表 必须存在,但不可为外连接中的外表 数据库对象名
synonym、table、view 从其检索数据的表的同义词 同义词和表或它指向的视图必须存在 数据库对象名
每个 SELECT 语句都需要 FROM 子句,不论是否需要任何数据源。如果您的查询使用数据库服务器来对一不需要数据源的表达式求值,则 FROM 子句可引用您在其上持有充足的访问权限的当前数据库中任何现有的表,如下例所示:
SELECT ATANH(SQRT(POW(4,2) + POW(5,2))) FROM systables;
如果 FROM 子句指定多个数据源,则该查询称为连接,因为它的结果集可从几个表引用连接行。要了解更多关于连接的信息,请参阅 连接表的查询。
表或视图的别名
您可为 FROM 子句中的表或视图声明别名。如果你这么做,则必须在 SELECT 语句的其他子句中使用该别名来引用该表或视图。您还可使用别名来缩短查询。
下列示例展示 FROM 子句的典型使用。第一个查询从 customer 表选择所有列和行。第二个查询在 customer 和 orders 表之间使用连接,来选择所有已下了订单的客户。
SELECT * FROM customer;
SELECT fname, lname, order_num FROM customer, orders
WHERE customer.customer_num = orders.customer_num;
下一示例等同于前一示例中的第二个查询,但它在 FROM 子句中声明别名,并在 WHERE 子句中使用它们:
SELECT fname, lname, order_num FROM customer c, orders o
WHERE c.customer_num = o.customer_num;
别名(有时称为相关名称)对自连接特别有用。要获取更多关于自连接的信息,请参阅 自连接。在自连接中,您必须在 FROM 子句中罗列表名称两次,并为该表名称的两个示例各自声明一个不同的别名。
AS 关键字
如果您使用可能发生歧义的此作为别名(或作为显示标签),则必须以关键字 AS 开始它的声明。如果您使用任何关键字 ORDER、FOR、AT、GROUP、HAVING、INTO、NOT、UNION、WHERE、WITH、CREATE 或 GRANT 作为表或视图的别名,则需要此关键字。
如果下一示例未包括了 AS 关键字来表明 not 是显示标签,而不是操作符,则数据库服务器会发出错误:
CREATE TABLE t1(a INT);
SELECT a AS not FROM t1;
如果您未为集合派生的表声明别名,则数据库服务器为它指定一个与实现相关的名称。
表表达式
表表达式(有时称为派生的表)是表或视图的名称,或对一系列行求值的规范。这些行通常是嵌入到嵌套的 SELECT 语句中,或一些其他 SQL 语句中的查询的结果。
表表达式可有下列语法:
表表达式

元素 描述 限制 语法
subquery 外查询可用其结果的嵌套的查询 请参阅下文用法说明 SELECT 语句
table _object 名称、同义词,或表、视图或 EXTERNAL 表的别名 必须存在,或必须引用 SELECT 语句创建的派生的表 标识符 或 数据库对象名
用法
表表达式可为简单的或复合的:
简单的表表达式
简单的表表达式是在保持查询结果的正确性时,其基础查询可包含进主查询内的表达式。
复合的表表达式
复合的表表达式是在保持查询结果的正确性时,其基础查询不可包含进主查询内的表达式。数据库服务器将这样的表表达式具体化成在主查询中使用的临时表。在 FROM 子句中指定聚集、集合操作符或 ORDER BY 子句的子查询作为复合的表表达式实现,通常需要比简单的表表达式更多的数据库服务器资源。
在两种情况下,该表表达式作为常规的 SQL 查询求值,且它的结果可被认为是逻辑表。此逻辑表及其列可就如普通的基础表那样使用,但它不是持久的。它仅在引用它的查询的执行期间存在。
对表表达式的限制
表表达式与常规的 SELECT 语句有相同的语法,但有在其他上下文中适用于子查询的大部分限制。表表达式不可包括显式地创建结果表的 SELECT INTO 子句。
GBase 8s 不支持“通用化的键”索引。它支持在 CREATE TRIGGER 语句的触发器活动中的表表达式,并作为 Select 触发器的触发事件。 GBase 8s 还支持表表达式中的 ORDER BY 子句。
GBase 8s 支持迭代器函数作为 FROM 子句表标识符。然而,SPL 的 CALL 语句不可在 FROM 子句中的子查询内调用迭代器 TABLE 函数。
除了这些限制之外,任何有效的 SQL 查询都可为表表达式。表表达式可嵌套在另一表表达式之内,且可在它的定义中包括表和视图。您可在 CREATE VIEW 语句中使用表表达式来定义视图。
相关的子查询和派生的表
相关的子查询是引用未罗列在其 FROM 子句中的表的列的子查询。相反,仅引用罗列在其 FROM 子句中的表中的列的子查询是不相关的子查询。
在下列示例中,在其 FROM 子句中定义派生的表的不相关的子查询,在其 WHERE 子句中包含相关的子查询:
SELECT * FROM (SELECT * FROM t1
WHERE a IN (SELECT b FROM t2 WHERE t1.a = t2.b));
此处,在第一个 WHERE 子句中的子查询是相关的子查询,因为它引用表 t1 的列 a,但它的 FROM 子句仅指定表 t2。
在 FROM 子句表表达式中,GBase 8s 还支持 ORDER BY 子句,这在 FROM 子句之外的子查询中不是有效的。在表表达式中通过 ORDER BY 子句指定的列或表达式不需要包括在 Projection 子句中。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值