gpt4 book ai didi

mysql - 这两个简单的 SQL 查询有什么区别?

转载 作者:行者123 更新时间:2023-11-29 07:05:50 25 4
gpt4 key购买 nike

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 万的部门工作的经理的 ID。抱歉,格式不正确。

最佳答案

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

区别在于经理负责多个部门的情况。

如果您有一位经理负责这两个部门:

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)

为了完整起见,我已在此处添加了上面 URL 中的图片:

ALL operator in pictures

关于mysql - 这两个简单的 SQL 查询有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41733230/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com