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

SQL Anywhere 11.0.1 (中文) » SQL Anywhere 服务器 - SQL 的用法 » 查询和修改数据 » 查询数据

 

FROM 子句:指定表

每个涉及表、视图或存储过程中数据的 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 );