每个涉及表、视图或存储过程中数据的 SELECT 语句都需要有 FROM 子句。
FROM 子句可以包括链接两个或多个表的 JOIN 条件,也可以包括与其它查询(派生表)的连接。有关这些功能的信息,请参见连接:从多个表检索数据。
在 FROM 子句中,始终允许使用表和视图的全称语法,例如:
SELECT select-list FROM owner.table-name; |
只有当对象所有者的用户 ID 与当前连接的用户 ID 不同,或者所有者的用户 ID 不是当前连接的用户 ID 所属组的名称时,才有必要限定表、视图和过程名称。
将相关名赋予某个表名,可提高可读性,并且在每次引用该表名时不必输入完整的表名。您可以在 FROM 子句中指派相关名,方法是在表名之后输入该相关名,如下所示:
SELECT d.DepartmentID, d.DepartmentName FROM Departments d; |
使用相关名时,对该表的其它所有引用(例如,在 WHERE 子句中)都必须 使用相关名而不是表名。相关名必须符合有效标识符的规则。
请参见FROM 子句。
派生表是通过计算查询表达式从一个或多个表直接或间接派生的表。派生表在 SELECT 语句的 FROM 子句中定义。
查询派生表的作用方式与查询视图相同。即,派生表的值在评估派生表定义时决定。但是,派生表与视图不同,因为派生表的定义不存储在数据库中。派生表与基表和临时表不同,因为它们不被实例化,并且不能在对其进行定义的查询之外引用它们。
以下查询使用派生表 (my_drv_tbl) 保存每个部门的最高薪水。然后,将派生表中的数据与 Employees 表相连接,以得到赚取这些薪水的雇员的姓。
SELECT Surname, my_drv_tbl.max_sal AS Salary, my_drv_tbl.DepartmentID FROM Employees e, ( SELECT MAX( Salary ) AS max_sal, DepartmentID FROM Employees GROUP BY DepartmentID ) my_drv_tbl WHERE e.Salary = my_drv_tbl.max_sal AND e.DepartmentID = my_drv_tbl.DepartmentID ORDER BY Salary DESC; |
Surname | Salary | DepartmentID |
---|---|---|
Shea | 138948.00 | 300 |
Scott | 96300.00 | 100 |
Kelly | 87500.00 | 200 |
Evans | 68940.00 | 400 |
Martinez | 55500.80 | 500 |
以下示例创建一个对 Products 表中的项目进行排序的派生表 (MyDerivedTable),然后查询该派生表以返回三个最低开销项目:
SELECT TOP 3 * FROM ( SELECT Description, Quantity, UnitPrice, RANK() OVER ( ORDER BY UnitPrice ASC ) AS Rank FROM Products ) AS MyDerivedTable ORDER BY Rank; |
另请参见: FROM 子句.
FROM 子句中最常用的元素是表名。但是,也可以从结构与表类似的其它数据库对象—即,一组明确定义的行和列中查询行。例如,可以查询视图,还可以查询返回结果集的存储过程。
例如,以下语句查询名为 ShowCustomerProducts 的存储过程的结果集。
SELECT * FROM ShowCustomerProducts( 149 ); |
Copyright © 2009, iAnywhere Solutions, Inc. - SQL Anywhere 11.0.1 |