考虑以下员工表
ID salary DeptName
1 10000 EC
2 40000 EC
3 30000 CS
4 40000 ME
5 50000 ME
6 60000 ME
7 70000 CS
以下查询的结果中有多少行?
SELECT E.ID
FROM Employee E
WHERE EXISTS (SELECT E2.salary
FROM Employee E2
WHERE E2.DeptName = 'CS'
AND E.salary > E2.salary)
(一) 0
(乙) 4
(三) 5
(四) 6答案: (C)
说明:背景:
- WHERE EXISTS 测试子查询中是否存在任何记录。
- 如果子查询返回一条或多条记录,则 EXISTS 返回 true。
- EXISTS 通常与相关子查询一起使用。
在上面的问题中,有一个相关的子查询,因为该子查询引用了封闭查询(关系 Employee 重命名为 E)
子查询( SELECT E2.salary FROM Employee E2
WHERE E2.DeptName = ‘CS’)
过滤掉 E2 关系为(所有 DeptName 为 CS 的元组和各自的薪水)
现在相关查询的工作方式如下:
选择电子身份证
来自员工 E
WHERE EXISTS (SELECT E2.salary FROM Employee E2
WHERE E2.DeptName = ‘CS’
AND E.salary > E2.salary)
如果 WHERE EXISTS 返回 true,即子查询返回一条或多条记录,它会从 Employee Relation 中获取一个元组并显示其 ID。当来自员工关系 E 的元组的薪水属性值大于上面过滤掉的薪水属性值中的任何一个时,就会发生这种情况。
因此,过滤掉的元组将是所有其薪水属性值大于 E2 关系(3000 和 7000)中至少一个的薪水值的元组。
ID 工资部门名称
2 40000 欧文
4 40000 ME
5 50000 米
6 60000 米
7 70000 CS
最后它会显示他们的 ID,输出将是:
2
4
5
6
7
因此选项 (C) 5 行。
该解决方案由Yashika Arora 提供。
这个问题的测验