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, department_id FROM employees WHERe department_id = 10 OR department_id = 20;
查询结果:
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的集合源码中的数组扩容源码曾经看到过这两个符号的身影,它们能够加快程序运行的效率。
三、 运算符的优先级运算符之间是有优先级的,不同运算符之间的优先级如下表所示:数字越大,优先级越高。



