Collection Contents 上一页 下一页 PDF

ASA SQL 用户指南

使用子查询

用 IN 条件测试集合成员资格


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

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

示例 

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

SELECT emp_fname, emp_lname
FROM employee
WHERE emp_id IN (
   SELECT dept_head_id
   FROM department
   WHERE (dept_name='Finance' or dept_name = 'Shipping'))
emp_fname emp_lname
Jose Martinez
Mary Anne Shea

此示例中的子查询

SELECT dept_head_id
FROM department
WHERE (dept_name='Finance' OR dept_name = 'Shipping')

从 department 表提取对应于运输部门和财务部门领导的 ID 号。主查询然后返回其 ID 号与该子查询找到的两个 ID 号中的一个相匹配的雇员的姓名。

集合成员资格测试等效于 =ANY 测试 

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

SELECT emp_fname, emp_lname
FROM employee
WHERE emp_id =ANY (
   SELECT dept_head_id
   FROM department
   WHERE (dept_name='Finance' or dept_name = 'Shipping'))
集合成员资格测试的取非 

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

示例 

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

SELECT emp_fname, emp_lname
FROM employee
WHERE emp_id NOT IN (
   SELECT dept_head_id
   FROM department
   WHERE (dept_name='Finance' OR dept_name = 'Shipping'))

Collection Contents 上一页 下一页 PDF