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 的用法 » 查询和修改数据 » 使用子查询 » 测试子查询

 

子查询和 IN 测试

您可以使用子查询集合成员资格测试将来自主查询的值与子查询中的多个值进行比较。

子查询集合成员资格测试将主查询中每一行的单个数据值与该子查询生成的单列数据值进行比较。如果主查询的数据值与该列中的某一 数据值匹配,则该子查询返回 TRUE。

示例

选择领导运输部门或财务部门的雇员的姓名:

SELECT GivenName, Surname
FROM Employees
WHERE EmployeeID IN (
   SELECT DepartmentHeadID
   FROM Departments
   WHERE ( DepartmentName='Finance' OR 
          DepartmentName = 'Shipping' ) );
GivenName Surname
Mary Anne Shea
Jose Martinez

此示例中的子查询从 Departments 表提取与运输部和财务部领导对应的 ID 号。主查询随后返回 ID 号与该子查询找到的两个 ID 号中的一个匹配的雇员的姓名。

SELECT DepartmentHeadID
FROM Departments
WHERE ( DepartmentName='Finance' OR 
       DepartmentName = 'Shipping' );
集合成员资格测试等效于 =ANY 测试

子查询集合成员资格测试等同于 =ANY 测试。以下查询等同于上面示例中的查询。

SELECT GivenName, Surname
FROM Employees
WHERE EmployeeID = ANY (
   SELECT DepartmentHeadID
   FROM Departments
   WHERE ( DepartmentName='Finance' OR 
          DepartmentName = 'Shipping' ) );
集合成员资格测试的取非

您还可以使用子查询集合成员资格测试来提取列值与由子查询生成的任何值均不相等的那些行。要对集合成员资格测试取非,请在关键字 IN 之前插入 NOT 一词。

示例

下面的查询中的子查询返回不是财务部门或运输部门领导的雇员的名和姓。

SELECT GivenName, Surname
FROM Employees
WHERE EmployeeID NOT IN (
   SELECT DepartmentHeadID
   FROM Departments
   WHERE ( DepartmentName='Finance' OR 
          DepartmentName = 'Shipping' ) );