一、逻辑运算符
定义:逻辑运算符又被称为布尔运算符,通常用来判断表达式的真假,如果为真返回 1,否则返回 0,
真和假也可以用 TRUE 和 FALSE 表示。
1.1 MySQL 中支持使用的逻辑运算符有四种
- NOT 或 ! 逻辑非
- AND 或 && 逻辑与
- OR 逻辑或
- XOR 逻辑异或
1.1.1 逻辑非
- 逻辑非将跟在它后面的逻辑测试取反
- NOT 后面的操作数为 0 时,所得值为 1
- 操作数为非 0 时,所得值为 0
- 操作数为 NULL 时,所得值为 NULL
1.1.2 逻辑与
- 判断两个值或多个值的有效性
- 如果所有值都是真返回 1,否则返回 0
1.1.3逻辑或
- 任意一个为非零值并且不是 NULL 值时,返回 1,否则返回0
1.1.4 逻辑异或
- 两个非 NULL 值的操作数,如果两者都是 0 或者都是非 0,则返回 0
- 如果一个为 0, 另一个为非 0,则返回结果为 1
- 当任意一个值为 NULL 时,返回值为 NULL
二、位运算符
& | 按位与 |
| | 按位或 |
~ | 按位取反 |
^ | 按位异或 |
<< | 按位左移 |
>> | 按位右移 |
举例 mysql> SELECT 10 & 15, 10 | 15, 10 ^ 15, 5 &~1; +---------+---------+---------+-------+ | 10 & 15 | 10 | 15 | 10 ^ 15 | 5 &~1 | +---------+---------+---------+-------+ | 10 | 15 | 5 | 4 | +---------+---------+---------+-------+ 1 row in set (0.00 sec)
-
10 转换为二进制数是 1010, 15 转换为二进制数是 1111。
- 按位与运算(&),是对应的二进制位都是 1 的,它们的运算结果为 1,否则为 0,所以 10 & 15 的结果为 10
- 按位或运算(|),是对应的二进制位有一个或两个为 1 的,运算结果为 1,否则为 0, 所以 10 | 15 的结果为 15
- 按位异或运算(^),是对应的二进制位不相同时,运算结果 1,否则为 0,所以 10 ^ 15的结果为 5。
- 按位取反(~),是对应的二进制数逐位反转,即 1 取反后变为 0, 0 取反后变为 1。数字 1 的二进制是 0001,取反后变为 1110, 数字 5 的二进制是 0101,将 1110 和 0101
例如,对数字进行左移或右移的运算: mysql> SELECT 1<<2, 2<<2,10>>2,15>>2; +------+------+-------+-------+ | 1<<2 | 2<<2 | 10>>2 | 15>>2 | +------+------+-------+-------+ | 4 | 8 | 2 | 3 | +------+------+-------+-------+ 1 row in set (0.00 sec)
- 2<<2”将数字 2 的二进制数 0010, 向左移动两位后变成 10,右侧用 00 补齐,最终变为二进制的 1000,转换为十进制是 8
- 15>>2”将数字 15 转换为二进制是 1111,向右移动两位,右侧的两位 11 被丢弃,变为 11, 左侧用 00 补齐,最终变为二进制的 0011,转换为十进制就是 3
三、连接查询
通常都是将来自两个或多个表的行结合起来,基于这些表之间的共同字段,进行数据的拼接
3.1 常用连接查询
- 内连接
- 左连接
- 右连接
3.1.1 内连接 inner join
关键字:inner join on
语句:select * from a_table a inner join b_table b on a.a_id = b.b_id;
说明:组合两个表中的记录,返回关联字段相符的记录,也就是返回两个表的交集(阴影)部分
3.1.2 左连接查询 left join
关键字:left join on / left outer join on
语句:SELECT * FROM a_table a left join b_table b ON a.a_id = b.b_id;
说明: 左(外)连接,左表(a_table)的记录将会全部表示出来,而右表(b_table)只会显示符合搜索条件的记录。右表记录不足的地方均为NULL。
3.1.3 右连接 right join
关键字:right join on / right outer join on
语句:SELECT * FROM a_table a right outer join b_table b on a.a_id = b.b_id;
说明:全称是右外连接,是外连接中的一种。与左(外)连接相反,右(外)连接,左表(a_table)只会显示符合搜索条件的记录,而右表(b_table)的记录将会全部表示出来。左表记录不足的地方均为NULL。