一、运算符优先级金字塔(从高到低)

1. 最高优先级运算符

运算符描述
!逻辑非
~位取反
-(负号)单目负号


2. 算术运算符

运算符描述
^幂运算(MySQL特有)
* / / / %乘 / 除 / 取模
+ / -加 / 减


3. 位移动运算符

运算符描述
<<位左移
>>位右移


4. 位运算符

运算符描述
&位与
|位或


运算符描述
=<=>>=><=<<>!=各种比较
ISLIKEREGEXPIN特殊比较
BETWEENCASEWHENTHENELSE范围判断和条件表达式


6. 逻辑运算符

运算符描述
NOT逻辑非
AND&&逻辑与
XOR逻辑异或
OR||逻辑或


7. 最低优先级运算符

运算符描述
=赋值运算
:=赋值运算


二、常见优先级问题示例

示例1:算术与比较运算

SELECT 5 + 2 * 3 > 10; --先算2*3=6,再5+6=11,最后11>10返回1

示例2:逻辑运算顺序

SELECT NOT 1 = 0 AND 1 = 1; --等价于(NOT (1=0)) AND (1=1)

示例3:位运算优先级

SELECT 1 | 2 & 3; --先算2&3=2,再1|2=3


三、优先级黄金法则

1. 括号最优先:任何时候不确定优先级,就用括号明确

SELECT (1 + 2) * 3; --明确先加后乘


2. 同级别从左到右:

SELECT 10 / 2 * 5; --先除后乘,结果为25


3. 特殊注意点:

    `NOT`优先级高于`AND`

    `AND`优先级高于`OR`

    比较运算符优先级高于逻辑运算符

 

四、实际应用建议

1. 条件查询中的优先级:

  查找价格>100且库存<10,或者折扣>0.5的商品

 SELECT * FROM products 
   WHERE (price > 100 AND stock < 10) OR discount > 0.5;


2. 计算表达式中的优先级:

   正确计算加权分数

  SELECT (test1 * 0.3) + (test2 * 0.7) AS total_score FROM grades;

 

3. 权限检查中的优先级:

  检查管理员或具有特定权限的用户

   SELECT * FROM users 
   WHERE is_admin = 1 OR (permissions & 7) = 7;


五、易混淆点提醒

1. `=`的不同含义:

    在最高优先级作为比较运算符

    在最低优先级作为赋值运算符

 

2. `NOT`与`!`的区别:

    `NOT`是逻辑运算符(优先级中等)

    `!`是位取反(优先级最高)

 

3. `BETWEEN`的优先级:

    高于比较运算符但低于算术运算符

SELECT * FROM table WHERE col1 + 10 BETWEEN 20 AND 30;
点赞(1)

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

Dotcpp在线编译      (登录可减少运行等待时间)