下面是用于选择所有教师姓名的 sql 查询,这些教师的薪水至少超过一位教师。(即离开薪水最低的一位教师)。此查询来自 Korth Silberchatz 的数据库系统概念。但我无法想象查询是如何使用的,除此之外,这是以这种方式进行查询所必需的。
我猜你可以想象这张 table 。
select distinct T.name
from instructor as T,instructor as S
where T.salary > S.salary;
最佳答案
编写该查询的另一种方式是...
SELECT DISTINCT
T.name
FROM
instructor AS T
CROSS JOIN
instructor AS S
WHERE
T.salary > S.salary
一般来说,CROSS JOIN
不是一个好主意。在这里,他们是一个非常糟糕的主意。如果您有 100 位讲师,您可以评估 4950 种不同的组合以获得包含 99 位讲师的唯一列表。
- instructor001 有 99 名教员的薪水较低
- instructor002 有 98 名教员的薪水较低
- ...
- Instructor100 有 00 名教员的薪水较低
- 总计 4950 种组合
如果您有 1000 位讲师,您可以评估 499500 个组合以获得包含 999 位讲师的唯一列表。
更好的主意是...
SELECT
i.Name
FROM
instructor i
WHERE
i.salary > (SELECT MIN(salary) FROM instructor)
或者...
SELECT
i.Name
FROM
instructor i
WHERE
i.Name <> (SELECT Name FROM instructor ORDER BY Salary ASC LIMIT 1)
或者...
SELECT
i.*
FROM
instructor i
EXCEPT
SELECT
i.*
FROM
instructor i
ORDER BY
Salary ASC
LIMIT 1
所以,你是对的,没有必要(甚至不是一个好主意)那样做。
关于mysql - 下面SQL查询的解释,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38587581/