这两个简单的SQL查询之间的区别是什么?

时间:2017-01-19 03:32:05

标签: mysql sql database

Emp(eid: integer, ename: string, age: integer, salary: real)

Works(eid: integer, did: integer, pct time: integer)

Dept(did: integer, dname: string, budget: real, managerid: integer)
SELECT DISTINCT D.managerid

FROM Dept D

WHERE 1000000 < ALL (SELECT D2.budget
 FROM Dept D2
 WHERE D2.managerid = D.managerid )


other one:
SELECT DISTINCT managerid FROM dept WHERE dept.budget > 1000000

他们都得到了在预算超过100万的部门工作的经理人的身份。抱歉格式化。

1 个答案:

答案 0 :(得分:2)

区别在于ALL运算符。与比较运算符一起使用时,请阅读有关ALL运算符的here

不同之处在于经理监督多个部门的情况。

如果您有一位管理这两个部门的经理:

declare @Dept table (did integer, dname varchar(20), budget real, managerid integer)
insert into @Dept values(1, 'dept1', 10, 1),(2, 'dept2', 20000000, 1)

然后第一个查询不会给你任何结果,因为managerid = 1的经理有一个预算超过且少于1000000的部门

SELECT DISTINCT D.managerid
FROM @Dept D
WHERE 1000000 < ALL (SELECT D2.budget
 FROM @Dept D2
 WHERE D2.managerid = D.managerid )

managerid
-----------
(0 row(s) affected)

第二个查询愉快地返回结果:

SELECT DISTINCT managerid FROM @dept WHERE budget > 1000000

managerid
-----------
1
(1 row(s) affected)

更新:要使两个查询等效,您可以使用ANY运算符:

SELECT DISTINCT D.managerid
FROM @Dept D
WHERE 1000000 < ANY (SELECT D2.budget
 FROM @Dept D2
 WHERE D2.managerid = D.managerid )
managerid
-----------
1
(1 row(s) affected)

为了完整性,我在此处添加了上面网址中的图片:

ALL operator in pictures

相关问题