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

📅  最后修改于: 2021-06-29 02:16:17             🧑  作者: Mango

考虑表employee(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都不是正确的查询答案: (A)
说明:首先要注意的是,他们要求任何人(=全部)而不是任何人
在这里,每个人都代表整个小组。
任何人都表示组的全部或任何部分。

让雇员(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”中的任何员工都要大)

————————————————————
现在是Q1:

注意:EXISTS(空集)为FALSE,而NOT EXISTS(空集)为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。
————————————————————
而第二季度:

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)是正确的。
这个问题的测验