mysql - 下面SQL查询的解释

标签 mysql sql database

下面是用于选择所有教师姓名的 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/

相关文章:

mysql - 从指定范围内的表中获取条目数

sql - RIGHT JOIN 是处理此查询的方法吗?

MySQL 连接与关系表上的匹配

java - 通过准备好的语句设置 RAW 数据类型

.net - Entity Framework 支持的数据库

mysql - 使用变量选择列

mysql - Django-MySQL : 1146 Table doesn't exist

mysql - 创建字段所需的 SQL 查询帮助

ruby-on-rails - 将记录添加到 rails 中的表

php - 用户名(和密码)中的 Unicode?