sql数据库中on和where的区别
封面图
•
2025-09-23
•
SQL Server
234
0
0
0
在 SQL 数据库中,`ON` 和 `WHERE` 是两个不同的关键字,虽然它们都用于过滤数据,但它们的使用场景和作用是不同的。以下是它们的主要区别: --- ### 一、基本定义 | 关键字 | 使用场景 | 作用 | |--------|----------|------| | `ON` | **JOIN 操作**(如 `INNER JOIN`, `LEFT JOIN`, `RIGHT JOIN`, `FULL JOIN`) | 用于指定两个表之间的连接条件 | | `WHERE` | **查询语句**(`SELECT`, `UPDATE`, `DELETE`) | 用于过滤结果集中的行 | --- ### 二、详细对比 #### 1. `ON` 的作用 - **用于 JOIN 操作**,表示两个表之间如何关联。 - 它是 **连接条件**,决定了哪些行会被连接在一起。 - 即使没有匹配的行,使用 `LEFT JOIN` 或 `RIGHT JOIN` 时,也会保留左/右表的所有记录。 ##### 示例: ```sql SELECT * FROM employees LEFT JOIN departments ON employees.department_id = departments.id; ``` > 这里 `ON` 表示 `employees` 表和 `departments` 表通过 `department_id` 和 `id` 字段连接。 --- #### 2. `WHERE` 的作用 - **用于过滤结果集**,在查询中对最终结果进行筛选。 - 它是 **行级过滤条件**,只返回满足条件的行。 - 只能用在 `SELECT`, `UPDATE`, `DELETE` 等语句中。 ##### 示例: ```sql SELECT * FROM employees WHERE salary > 5000; ``` > 这里 `WHERE` 过滤出工资大于 5000 的员工。 --- ### 三、关键区别总结 | 特性 | `ON` | `WHERE` | |------|------|---------| | 使用场景 | JOIN 操作中 | SELECT, UPDATE, DELETE 中 | | 作用 | 连接条件 | 过滤结果集 | | 是否影响连接类型(如 LEFT JOIN) | 是(影响连接方式) | 否(不影响连接类型) | | 是否可以出现在非 JOIN 查询中 | 否 | 是 | --- ### 四、一个综合例子说明 ```sql SELECT e.name, d.department_name FROM employees e LEFT JOIN departments d ON e.department_id = d.id WHERE e.salary > 5000; ``` - `ON e.department_id = d.id`:表示两表如何连接。 - `WHERE e.salary > 5000`:表示只选择工资大于 5000 的员工。 --- ### 五、常见误区 - **不要混淆 `ON` 和 `WHERE` 在 JOIN 中的作用**: - 如果你在 `LEFT JOIN` 中使用 `WHERE` 来过滤右边表的字段,可能会意外地丢失一些行。 - 应该将右边表的过滤条件放在 `ON` 中,而不是 `WHERE`。 ##### 错误示例(可能导致意外结果): ```sql SELECT e.name, d.department_name FROM employees e LEFT JOIN departments d ON e.department_id = d.id WHERE d.department_name = 'Sales'; ``` > 这会把所有不满足 `d.department_name = 'Sales'` 的行排除掉,相当于变成了 `INNER JOIN`。 ##### 正确做法(使用 `ON` 过滤): ```sql SELECT e.name, d.department_name FROM employees e LEFT JOIN departments d ON e.department_id = d.id AND d.department_name = 'Sales'; ``` --- ### 六、总结 | 项目 | `ON` | `WHERE` | |------|------|---------| | 用途 | 连接条件 | 过滤结果 | | 位置 | JOIN 子句中 | SELECT 语句中 | | 影响连接类型 | 是 | 否 | --- 如果你有具体的 SQL 查询语句,我可以帮你分析 `ON` 和 `WHERE` 的使用是否正确。
上一篇:
数据倾斜是什么?怎么解决?
下一篇:
SQL查询课程编号为“01”的课程比“02”的课程成绩高的所有学生的学号
标题录入,一次不能超过6条
返回顶部
留言
留言
评论