[英]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.