在 MySQL 中,AND 的优先级高于 OR
当 AND 和 OR 混合使用时,AND 条件会被优先执行,除非用括号明确指定优先顺序(若改变默认的优先级,可以使用括号来明确逻辑顺序)。
例子1:
SELECT *
FROM user_profile
WHERE condition1 OR condition2 AND condition3;
等同于
SELECT *
FROM user_profile
WHERE condition1 OR (condition2 AND condition3);
如果改变默认的优先级,使用括号来明确逻辑顺序
SELECT *
FROM user_profile
WHERE (condition1 OR condition2) AND condition3;
这里OR 条件会先被计算,然后再和 condition3 结合进行 AND 计算
例子2:
SELECT device_id, gender, age, university, gpa
FROM user_profile
WHERE gpa > 3.5 AND university = '山东大学'
OR gpa > 3.8 AND university = '复旦大学';
首先执行 gpa > 3.5 AND university = ‘山东大学’,然后再与 gpa > 3.8 AND university = ‘复旦大学’ 进行 OR 计算,若看起来更加明确,添加括号。
上面等同于
SELECT device_id, gender, age, university, gpa
FROM user_profile
WHERE (gpa > 3.5 AND university = '山东大学')
OR (gpa > 3.8 AND university = '复旦大学');