此子句用于指定 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; |
Copyright © 2009, iAnywhere Solutions, Inc. - SQL Anywhere 11.0.1 |