SQL AND、OR 运算符优先级

在 SQL 中,我们经常会使用 AND 和 OR 运算符来组合多个条件来过滤数据。但是当我们同时使用 AND 和 OR 时,就会引发一个问题:这两个逻辑运算符之间的优先级问题。
在 SQL 中,AND 运算符的优先级高于 OR 运算符。这意味着当一个查询语句中同时包含 AND 和 OR 时,AND 会先于 OR 进行计算,即会先计算 AND 条件,再计算 OR 条件。
为了更好地理解 AND 和 OR 运算符的优先级,我们需要通过一些示例来说明。
假设有一个学生表(students)如下:
| id | name | age | gender |
|---|---|---|---|
| 1 | Amy | 20 | Female |
| 2 | Bob | 22 | Male |
| 3 | Cindy | 21 | Female |
| 4 | David | 23 | Male |
示例 1:使用 AND 和 OR
首先,我们来查询学生表中年龄在 20 到 22 之间,并且性别为 Female 或 Male 的学生:
SELECT *
FROM students
WHERE (age >= 20 AND age <= 22) OR gender = 'Female' OR gender = 'Male';
根据运算符优先级,上面的查询会被解析为以下逻辑:
- 计算
age >= 20 AND age <= 22,选出年龄在 20 到 22 岁之间的学生; - 再计算
gender = 'Female' OR gender = 'Male',选出性别为 Female 或 Male 的学生。
因此,上面的查询会返回所有学生的信息,因为所有学生都符合以上条件。
示例 2:使用括号改变运算优先级
如果我们想要查询年龄在 20 到 22 之间,并且性别为 Female 的学生或者性别为 Male 的学生,可以使用括号来改变运算符的优先级:
SELECT *
FROM students
WHERE (age >= 20 AND age <= 22) AND (gender = 'Female' OR gender = 'Male');
根据运算符优先级,上面的查询会被解析为以下逻辑:
- 计算
age >= 20 AND age <= 22,选出年龄在 20 到 22 岁之间的学生; - 然后计算
gender = 'Female' OR gender = 'Male',选出性别为 Female 或 Male 的学生。
因此,上面的查询只会返回 Amy 和 Cindy 两名学生的信息,因为她们的年龄在 20 到 22 岁之间,并且性别为 Female。
通过以上示例,我们可以清楚地看到 AND 和 OR 运算符在 SQL 中的优先级关系。合理地使用括号可以帮助我们更好地控制条件的组合,从而得到我们想要的查询结果。
极客教程