MySQL中的逻辑运算符,位运算符
转自:https://blog.csdn.net/Sihang_Xie/article/details/125480206
一、 逻辑运算符
MySQL中支持4种逻辑运算符:
运算符 | 作用 |
---|---|
NOT 或 ! | 逻辑非 |
AND 或 && | 逻辑与 |
OR 或 || | 逻辑或 |
XOR | 逻辑异或 |
以上4种逻辑运算符都非常简单,如果有其他编程语言的基础,看一下以下的例子就理解了。
1.1 逻辑非NOT
【例子】查询员工表 employees
中月工资 salary
不在6000 ~ 8000 的员工的 employee_id
、last_name
、salary
信息。
SELECT employee_id, last_name, salary FROM employees WHERE salary NOT BETWEEN 6000 AND 8000;
查询结果:
1.2 逻辑与AND
【例子】查询员工表 employees
中部门ID department_id
为 50 且工资 salary
大于 5000 的员工的 employee_id
、last_name
、salary
和 department_id
信息。
SELECT employee_id, last_name, salary, department_id FROM employees WHERE department_id = 50 AND salary >= 5000;
查询结果:
1.3 逻辑或OR
【例子】查询员工表 employees
中部门ID department_id
为 10 或 20 的员工的 employee_id
、last_name
和 department_id
信息。
SELECT employee_id, last_name, salary FROM employees WHERE salary NOT BETWEEN 6000 AND 8000;
查询结果:
1.4 逻辑异或XOR
异或XOR用得比较少。
【例子】查询员工表 employees
中部门ID department_id
为 50 但月工资 salary
大于 5000,和部门ID department_id
不为 50 但月工资 salary
小于 5000的员工的 employee_id
、last_name
、salary
和 department_id
信息。
SELECT employee_id, last_name, salary, department_id FROM employees WHERE department_id = 50 XOR salary < 5000;
查询结果:
【注意】
- AND的优先级高于OR。
二、 位运算符
MySQL中有6种位运算符:
运算符 | 作用 |
---|---|
& | 按位与 (位AND) |
| | 按位或 (位OR) |
^ | 按位异或 (位XOR) |
~ | 按位取反 |
>> | 按位右移 |
<< | 按位左移 |
【例子1】
SELECT 12 & 5, 12 | 5, 12 ^ 5 FROM DUAL;
查询结果:
至于为什么得数是这样,把上面的十进制数转化为二进制数,按位操作即可。如下图所示:
【例子2】
SELECT 4 << 1, 8 >> 1 FROM DUAL;
查询结果:
其实,位运算符无论在MySQL还是在其他编程语言中都用得比较少。按我个人的经验来说,用得最多的就是最下面两行的 <<
和 >>
,按位右移就表示二进制数除以2;而按位左移就表示二进制数乘2。在Java的集合源码中的数组扩容源码曾经看到过这两个符号的身影,它们能够加快程序运行的效率。
三、 运算符的优先级
运算符之间是有优先级的,不同运算符之间的优先级如下表所示:数字越大,优先级越高。