select name, bonus from Employee left join Bonus on Employee.EmpId = Bonus.EmpId where bonus is null or bonus < 1000 作者:力扣官方题解 链接:https://leetcode.cn/problems/employee-bonus/ 来源:力扣(LeetCode) 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
ON
子句的作用- 功能概述
ON
子句主要用于在连接(JOIN
)操作中指定连接条件。它定义了两个或多个表之间的关联关系,决定了如何将这些表中的行进行匹配。
- 在示例中的作用
- 在
SELECT name, bonus FROM Employee LEFT JOIN Bonus ON Employee.EmpId = Bonus.EmpId
这个查询中,ON Employee.EmpId = Bonus.EmpId
表示通过Employee
表中的EmpId
列和Bonus
表中的EmpId
列来建立连接。这样,查询会根据这个条件,将Employee
表中的每一行与Bonus
表中具有相同EmpId
的行进行匹配。对于LEFT JOIN
(左连接)来说,Employee
表中的所有行都会被返回,而Bonus
表中如果没有匹配的行,对应的列(这里是bonus
列)会显示为NULL
。
- 在
- 功能概述
WHERE
子句的作用- 功能概述
WHERE
子句用于过滤查询结果集。它在表连接完成后,根据指定的条件对结果集中的行进行筛选,只有满足条件的行才会被包含在最终的查询结果中。
- 在示例中的作用
- 在
WHERE bonus is null or bonus < 1000
中,这个条件是在Employee
表和Bonus
表连接完成后起作用。它会筛选出bonus
列的值为NULL
或者小于1000
的行。也就是说,即使在连接操作后得到了所有可能的行组合,WHERE
子句也会进一步排除那些不符合这个条件的行,从而得到我们真正想要的结果。
- 在
- 功能概述
- 两者的主要区别
- 执行顺序不同
- 在查询执行过程中,
ON
子句先执行。它在进行表连接操作时就开始起作用,用于确定如何连接表。而WHERE
子句是在表连接完成后才对结果集进行过滤。
- 在查询执行过程中,
- 作用对象不同
ON
子句作用于表之间的连接关系,是关于如何将不同表中的行进行匹配的规则。WHERE
子句作用于连接后的整个结果集,是对已经生成的行组合进行筛选的条件。
- 对连接结果的影响不同
ON
子句会影响连接的方式和结果集的大小,因为它决定了哪些行能够参与连接。例如,不同的连接条件(如使用不同的列进行连接或者使用更复杂的连接条件)会导致不同的行组合出现在连接后的结果中。WHERE
子句只是在连接后的结果上进行筛选,不会改变表之间的连接方式。例如,无论WHERE
条件如何,LEFT JOIN
的连接方式(返回左表的所有行以及右表中匹配的行)是不会改变的,只是最终返回的行数可能会因为WHERE
子句的筛选而减少。
- 执行顺序不同