打卡
Topic source可是最后一个练习,
SELECT * FROM students WHERE score < 80 OR score > 90 AND gender = 'M';
不加括号,结果是
id class_id name gender score
4 1 小米 F 73
6 2 小兵 M 55
似乎只执行了最前面的命令,这是为什么?
如果不加括号,条件运算按照NOT
、AND
、OR
的优先级进行,即NOT
优先级最高,其次是AND
,最后是OR
。加上括号可以改变优先级。
SELECT * FROM students WHERE score < 80 OR score > 90 AND gender = 'M';
等价于
SELECT * FROM students WHERE score < 80 OR (score > 90 AND gender = 'M');
回复二楼:
如果你学过C/C++,应该明白||和&&都具有“短路效应”。
也就是删掉括号后的代码可以写成如下这个格式:
SELECT * FROM students WHERE score < 80 OR (score > 90 AND gender = 'M');
在OR后面的一串先执行,执行完成后后面的一串再与OR前面的score < 80运算,优先运算OR左边的表达式,若左边的表达式成立,则OR右边的表达式将不会再执行。
同理,若没有记录满足OR左边表达式,则筛选满足OR右边表达式的记录。
这就类似于C/C++中的||
- 1
喵喵喵喵猫女士
如果不加括号,条件运算按照
NOT
、AND
、OR
的优先级进行,即NOT
优先级最高,其次是AND
,最后是OR
。加上括号可以改变优先级。