Click here to view and discuss this page in DocCommentXchange. In the future, you will be sent there automatically.

SQL Anywhere 11.0.1 (中文) » UltraLite - 数据库管理和参考 » UltraLite SQL 参考 » UltraLite SQL 语句

 

UltraLite FROM 子句

此子句用于指定 SELECT 语句中涉及的表或视图。

语法
FROM  table-expression, ...
table-expression :
table-name [ [ AS ] correlation-name ]
| ( select-list ) [ AS ] derived-table-name ( column-name, ... )
| ( table-expression )
| table-expression join-operator table-expression [ ON search-condition ] ...
join-operator :
,
| INNER JOIN
| CROSS JOIN 
| LEFT OUTER JOIN 
| JOIN
参数

table-name   基表或临时表。在 UltraLite 中,表不能由不同的用户拥有。如果用用户 ID 限定表,该 ID 将被忽略。

correlation-name   在引用位于语句其它位置的表时使用的标识符。例如,在下面语句中,a 被定义为 Contacts 表的相关名;b 为 Customers 表的相关名。

SELECT *
FROM Contacts a, Customers b 
WHERE a.CustomerID=b.ID;

derived-table-name   派生表是在 FROM 子句中的嵌套 SELECT 语句。

派生表的选择列表中的项将由后面跟有句点 (.) 和列名(可选)的派生表名引用。如果列名非常明确,则可单独使用。

您不能在 SELECT 语句中引用派生表。请参见表达式中的子查询

join-operator   指定连接的类型。如果指定了逗号 (,) 或 CROSS JOIN,则不能指定 ON 子句。如果指定了 JOIN,则必须指定 ON 子句。对于 INNER JOIN 和 LEFT OUTER JOIN,ON 子句是可选的。

注释

当没有 FROM 子句时,SELECT 语句中的表达式必须是常量表达式。

派生表

虽然此说明针对的是表,但它同样适用于派生表(除非另外说明)。

FROM 子句创建由所有指定表中的所有列组成的结果集。指定表中行的所有组合最初都在结果集中,但 JOIN 条件和/或 WHERE 条件通常会减少组合数。

如果未指定连接的类型,并且以逗号分隔列表的形式列出这些表,则缺省情况下会使用 CROSS JOIN。

对于 INNER 连接,使用 ON 子句或 WHERE 子句限制连接的结果会返回等效的结果。对于 OUTER 连接,使用 ON 或 WHERE 进行限制并不等效。

注意

UltraLite 不支持 KEY JOINS,也不支持 NATURAL 连接。

另请参见
示例

以下是有效的 FROM 子句:

...
FROM Employees
...
...
FROM Customers
CROSS JOIN SalesOrders
CROSS JOIN SalesOrderItems
CROSS JOIN Products
...

以下查询使用派生表在 Customers 表中返回在 SalesOrders 表中拥有超过三个订单的用户的姓名:

SELECT Surname, GivenName, number_of_orders
FROM Customers JOIN
     ( SELECT CustomerID, COUNT(*)
       FROM SalesOrders
       GROUP BY CustomerID )
     AS sales_order_counts( CustomerID, number_of_orders )
ON ( Customers.id = sales_order_counts.CustomerID )
WHERE number_of_orders > 3;