在SQL语句,过滤条件放on里和放where里,有什么区别?

发布时间 2023-03-23 18:33:34作者: 一曲轻扬

在SQL语句中,过滤条件可以放在JOIN子句的ON条件中,也可以放在WHERE子句中,两者有着不同的作用。

  1. ON条件中的过滤条件

当查询涉及多个表时,使用JOIN操作将它们连接在一起。在JOIN子句中,可以使用ON关键字指定连接条件。ON条件用于指定两个表之间的匹配条件,以便将它们连接在一起。此时,可以在ON条件中添加过滤条件,以过滤连接的结果集。

例如,以下是一个使用ON条件过滤连接结果的示例:

SELECT customers.customer_id, orders.order_id
FROM customers
INNER JOIN orders ON customers.customer_id = orders.customer_id
    AND orders.order_date >= '2021-01-01'

 

上面的代码使用INNER JOIN将customers表和orders表连接起来,并在ON条件中指定了两个过滤条件:要求customers表和orders表中的customer_id列相等,同时要求orders表中的order_date列大于等于2021年1月1日。使用ON条件过滤连接结果可以提高查询效率,因为它可以在连接之前排除不必要的记录。

  1. WHERE条件中的过滤条件

WHERE子句用于对查询结果集进行过滤。WHERE子句中的条件会在FROM子句中指定的表和JOIN子句中指定的连接结果集之后进行过滤。在WHERE子句中,可以指定任何条件,包括连接条件和其他过滤条件。

例如,以下是一个使用WHERE条件过滤查询结果的示例:

SELECT customer_id, order_date, order_total
FROM orders
WHERE order_date >= '2021-01-01' AND order_total >= 1000

 

上面的代码使用WHERE子句过滤查询结果,要求查询结果中的order_date列大于等于2021年1月1日,同时order_total列大于等于1000。使用WHERE条件过滤查询结果可以进一步缩小结果集,以满足特定的查询需求。

总的来说,使用ON条件和WHERE条件的区别在于它们的作用范围不同。ON条件用于指定连接条件和过滤连接结果,WHERE条件用于对查询结果进行过滤。通常情况下,应该在ON条件中使用连接条件和连接过滤条件,在WHERE条件中使用其他过滤条件。