📜  门| GATE-CS-2007 |第 61 题

📅  最后修改于: 2021-09-24 05:51:51             🧑  作者: Mango

考虑表员工(empId,姓名,部门,工资)和下面的两个查询 Q1 ,Q2。假设部门 5 有不止一名员工,并且我们想要找到比部门 5 中任何人薪水都高的员工,对于任意员工表,以下哪一项语句是正确的?

Q1 : Select e.empId
     From employee e
     Where not exists
        (Select * From employee s where s.department = “5” and 
                                        s.salary >=e.salary)
Q2 : Select e.empId
     From employee e
     Where e.salary > Any
    (Select distinct salary From employee s Where s.department = “5”)

(A) Q1 是正确的查询
(B) Q2 是正确的查询
(C) Q1 和 Q2 产生相同的答案。
(D) Q1 和 Q2 都不是正确的查询答案:(一)
说明:首先请注意,他们要求Any (= All)而不是 Any 。
在这里, Everyone是指整个组。
任何人是指该组的全部或任何部分。

让员工(empId,姓名,部门,工资)有以下实例。

empId 名称 部门工资
——————————————

e1 ------- A-------- 1---------10000
e2 -------B ------- 5 ---------5000
e3 -------C ------- 5----------7000
e4 -------D ------- 2----------2000
e5 -------E ------- 3----------6000

现在实际结果应该包含 empId : e1 、 e3 和 e5 (因为他们的薪水比部门“5”中的任何员工都要高)

—————————————————————
现在第一季度:

注意:EXISTS(empty set) 给出 FALSE,NOT EXISTS(empty set) 给出 TRUE。

Select e.empId
From employee e
Where not exists
(Select * From employee s where s.department = “5” and
s.salary >=e.salary)

Q1 将仅产生 empId e1。
————————————————————
而 Q2 :

Select e.empId
From employee e
Where e.salary > Any
(Select distinct salary From employee s Where s.department = “5”)

Q2 将产生 empId e1、e3 和 e5。
—————————————————————
因此 Q1 是正确的查询。

请注意,如果我们在第二个查询中使用 ALL代替Any ,那么这将是正确的。

选项(A)是正确的。
这个问题的测验