zoukankan      html  css  js  c++  java
  • MySQL进阶查询(二)

    一、逻辑运算符

    定义:逻辑运算符又被称为布尔运算符,通常用来判断表达式的真假,如果为真返回 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。

    道阻且长,行则将至!加油! --不是冷漠
  • 相关阅读:
    JS中attribute和property的区别
    px(像素)、pt(点)、ppi、dpi、dp、sp之间的关系
    计算几何
    动态凸包
    斜率DP题目
    斜率DP个人理解
    后缀数组题目
    CF#190DIV.1
    MANACHER---求最长回文串
    扩展KMP题目
  • 原文地址:https://www.cnblogs.com/bushilengmo/p/13820309.html
Copyright © 2011-2022 走看看