WHERE子句
- 作用范围 :
WHERE
子句主要用于过滤FROM
子句返回的结果集。它可以在SELECT
、UPDATE
、DELETE
语句中使用,以限制哪些行被包含在最终的查询结果中,或者哪些行被更新或删除。 - 应用场景 :当需要基于某些条件过滤结果集时,使用
WHERE
子句。例如,查询年龄大于30的所有用户。 - 与JOINs的关系 :在
JOIN
操作中,WHERE
子句通常用于过滤连接后的结果集,即先连接两个或多个表,然后根据WHERE
子句中的条件过滤结果。但是,使用WHERE
子句过滤连接条件(即,作为连接条件)通常不是最佳实践,因为这可能会导致不必要的全表扫描或笛卡尔积(如果连接条件被错误地放在WHERE
中而没有ON
子句)。
ON子句
- 作用范围 :
ON
子句专门用于JOIN
操作中,用于指定两个或多个表之间的连接条件。它决定了哪些行应该被连接在一起。 - 应用场景 :当需要连接两个或多个表,并基于某些条件匹配行时,使用
ON
子句。例如,连接用户表和订单表,基于用户ID匹配用户和他们的订单。 - 与WHERE的关系 :虽然
ON
子句和WHERE
子句都可以包含条件,但它们的用途不同。ON
子句用于定义如何连接表,而WHERE
子句用于过滤连接后的结果集。在某些情况下,两者可以组合使用,以先连接表,然后过滤结果。
总结
- 使用
ON
子句来定义表之间的连接条件。 - 使用
WHERE
子句来过滤查询结果,或者作为连接后结果的进一步筛选条件。 - 在进行表连接时,应优先使用
ON
子句来指定连接条件,因为这样可以提高查询效率,避免不必要的全表扫描或笛卡尔积。 WHERE
子句在连接操作后使用,用于过滤连接后的结果集