在SQL中,WHERE、HAVING和ON都是用于限制查询结果的条件语句,但它们的使用场景和作用有所不同。
- WHERE子句
WHERE子句通常用于选择从单个表中获取数据。它筛选满足指定条件的行,返回一个子集。它可以与SELECT、UPDATE和DELETE语句一起使用。WHERE子句出现在FROM子句之后,如果存在JOIN语句,则在JOIN语句之后。
例如:
Copy Code
SELECT * FROM employees WHERE department = 'Sales'
该语句将返回所有属于销售部门的员工记录。
- HAVING子句
HAVING子句通常用于对聚合函数的结果进行过滤,而WHERE子句无法处理聚合函数。它出现在GROUP BY子句之后,允许在计算GROUP BY子句中指定的每个组的聚合值之后过滤结果集。
例如:
Copy Code
SELECT department, SUM(sales) FROM sales GROUP BY department HAVING SUM(sales) > 50000
该语句将返回所有销售额大于50000的销售部门及其总销售额。
- ON子句
ON子句通常用于连接两个或多个表。它指定如何连接表,并筛选匹配的行。ON子句出现在JOIN子句之后,并在WHERE子句之前。
例如:
Copy Code
SELECT customers.name, orders.order_date FROM customers JOIN orders ON customers.id = orders.customer_id
该语句将返回所有客户的姓名和订单日期,其中订单与客户通过ID进行匹配。
总体而言,WHERE子句用于过滤行,HAVING子句用于过滤聚合值,而ON子句用于连接表。
以上三种子句都可以用来进行数据筛选,替代被过滤where