繁体   English   中英

where子句中条件的优先顺序是什么?

[英]What is the precedence of conditions in where clause?

我正在使用MySQL。 我有一个表,名为id,name,dept_name,salary作为属性的讲师。 我写了一个查询,以“找到所有薪水高于物理部门至少一名教师的教师”为

select t.name, t.dept_name, t.salary
from instructor t, instructor s
where t.salary > s.salary and s.dept_name='physics';

现在将首先应用哪种条件?

将应用整个WHERE条件,这意味着为了使一条记录出现在结果集中,它必须同时满足薪资和部门要求。

您的查询看起来几乎是正确的,只是您可能希望包括DISTINCT ,以确保在结果集中不会多次报告同一位教师:

select distinct t.name, t.dept_name, t.salary
from instructor t
inner join instructor s
    on t.salary > s.salary and s.dept_name='physics'

您会注意到,我还用显式inner join替换了您的隐式联接语法。 您应该避免将逗号放在from子句中,因为这是进行联接的一种非常古老的方法,现代RDBMS认为该方法已弃用。

正如蒂姆(Tim)在回答中所提到的,整个标准都在考虑之中。 我还向他评论说,我认为您要的是其他部门的教师,他们的薪水比物理学部门的任何人都高。 如果您有3个物理专业的人,并且工资各不相同,那么两个人的工资要比最低工资的物理专业高,但是这3个人的工资可能会比学校中的其他所有人都高。

最好使用子查询先找到最低的物理部门薪水,然后再寻找大于该值的人来处理。

另外,由于没有JOIN条件,因此您将拥有笛卡尔比较的能力。 将教师表中的每个记录与第二教师表中的每个记录进行比较(包括与之进行比较的记录)。

为了解决这个问题,下面别名中的第二个是预先计算物理部门的最低工资一次,然后将那个答案应用于不在物理部门的所有其他教师工资。

select 
      t.name, 
      t.dept_name, 
      t.salary
   from 
      instructor t,
      ( select min( ps.salary ) PhysicsLowest
           from instructor ps
           where ps.dept_name='physics' ) as Phys
   where
          t.salary > Phys.PhysicsLowest
      AND NOT t.dept_name = 'physics'

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM