📜  门| GATE-CS-2015(模拟测试)|问题 13

📅  最后修改于: 2021-09-25 06:22:01             🧑  作者: Mango

考虑以下员工表

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)
说明:背景:

  1. WHERE EXISTS 测试子查询中是否存在任何记录。
  2. 如果子查询返回一条或多条记录,则 EXISTS 返回 true。
  3. 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 提供
这个问题的测验