✅on和where有什么区别?

典型回答

在SQL中,ONWHERE子句都用于指定条件,但它们在JOIN操作中的应用和影响是不同的。

ON子句主要用在JOIN操作中,用于指定JOIN的条件。他仅影响JOIN操作的结果

SELECT * FROM table1
JOIN table2
ON table1.id = table2.foreign_id;

WHERE子句用于对结果集进行过滤,无论是简单的SELECT查询还是复杂的JOIN查询。**WHERE**子句在JOIN操作之后应用,即在所有的JOIN操作完成后,对这个已经组合起来的数据集进行过滤。

SELECT * FROM table1
JOIN table2
ON table1.id = table2.foreign_id
WHERE table1.column > 100;

二者区别

  1. 应用阶段ON子句在JOIN阶段应用,而WHERE子句在所有JOIN操作完成后应用。
  2. 用途ON定义了如何JOIN两个表,WHERE定义了如何筛选结果。

举例说明

考虑以下两个查询:

  • 使用ON子句:
SELECT * FROM employees
LEFT JOIN departments ON employees.department_id = departments.id
   AND departments.name = 'IT';

这将返回所有员工,即使他们不在IT部门。对于不在IT部门的员工,部门相关的列将为NULL。

  • 使用WHERE子句:
SELECT * FROM employees
LEFT JOIN departments ON employees.department_id = departments.id
WHERE departments.name = 'IT';

这将仅返回IT部门的员工。那些不在IT部门的员工将被过滤掉。

通过这个例子可以看出,尽管这两个查询看起来相似,但它们的结果会非常不同,这是由ONWHERE子句的不同用法造成的。

原文: https://www.yuque.com/hollis666/xkm7k3/iiasw1frpq30mdvo