MySQL基础之select基本查询


一、基本的select语句
    • 1.查询常量
    • 2.从表中查数据
    • 3.使用列的别名查询
    • 4.去重
    • 5.空值NULL参与运算
    • 6.过滤数据
  • 二、 运算符
    • 1.算术运算符
    • 2.比较运算符
    • 3.逻辑运算符
    • 4.位运算符
  • 三、 排序和分页
    • 1.排序
    • 2.分页
  • 运算符

    逻辑运算符


    逻辑非
    逻辑与

    逻辑或

    OR可以和AND一起使用,但是在使用时要注意两者的优先级,由于AND的优先级高于OR,因此先对AND两边的操作数进行操作,再与OR中的操作数结合。
    逻辑异或运算符

    位运算符

    位运算符是在二进制数上进行计算的运算符。位运算符会先将操作数变成二进制数,然后进行位运算,最后将计算结果从二进制变回十进制数。

    MySQL支持的位运算符如下:


    1.按位与运算符
    按位与(&)运算符将给定值对应的二进制数逐位进行逻辑与运算。当给定值对应的二进制位的数值都为1时,则该位返回1,否则返回0。

    mysql> SELECT 1 & 10, 20 & 30;
    +--------+---------+
    | 1 & 10 | 20 & 30 |
    +--------+---------+
    |      0 |      20 |
    +--------+---------+
    1 row in set (0.00 sec)
     
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    1的二进制数为0001,10的二进制数为1010,所以1 & 10的结果为0000,对应的十进制数为0。20的二进制数为10100,30的二进制数为11110,所以20 & 30的结果为10100,对应的十进制数为20。
    2. 按位或运算符
    按位或(|)运算符将给定的值对应的二进制数逐位进行逻辑或运算。当给定值对应的二进制位的数值有一个或两个为1时,则该位返回1,否则返回0。

    mysql> SELECT 1 | 10, 20 | 30; 
    +--------+---------+
    | 1 | 10 | 20 | 30 |
    +--------+---------+
    |     11 |      30 |
    +--------+---------+
    1 row in set (0.00 sec)
     
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    1的二进制数为0001,10的二进制数为1010,所以1 | 10的结果为1011,对应的十进制数为11。20的二进制数为10100,30的二进制数为11110,所以20 | 30的结果为11110,对应的十进制数为30。

    3. 按位异或运算符
    按位异或(^)运算符将给定的值对应的二进制数逐位进行逻辑异或运算。当给定值对应的二进制位的数值不同时,则该位返回1,否则返回0。

    mysql> SELECT 1 ^ 10, 20 ^ 30; 
    +--------+---------+
    | 1 ^ 10 | 20 ^ 30 |
    +--------+---------+
    |     11 |      10 |
    +--------+---------+
    1 row in set (0.00 sec)
     
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    1的二进制数为0001,10的二进制数为1010,所以1 ^ 10的结果为1011,对应的十进制数为11。20的二进制数为10100,30的二进制数为11110,所以20 ^ 30的结果为01010,对应的十进制数为10。
    再举例:

    mysql> SELECT 12 & 5, 12 | 5,12 ^ 5 FROM DUAL;
    +--------+--------+--------+
    | 12 & 5 | 12 | 5 | 12 ^ 5 |
    +--------+--------+--------+
    |      4 |     13 |      9 |
    +--------+--------+--------+
    1 row in set (0.00 sec)
     
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    可能这样还是很懵,可以看看这张图理解一下,位运算会先把数字转换成二进制,然后逐位进行运算

    4. 按位取反运算符
    按位取反(~)运算符将给定的值的二进制数逐位进行取反操作,即将1变为0,将0变为1。

    mysql> SELECT 10 & ~1;
    +---------+
    | 10 & ~1 |
    +---------+
    |      10 |
    +---------+
    1 row in set (0.00 sec)
     
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    由于按位取反(~)运算符的优先级高于按位与(&)运算符的优先级,所以10 & ~1,首先,对数字1进行按位取反操作,结果除了最低位为0,其他位都为1,然后与10进行按位与操作,结果为10。

    5. 按位右移运算符
    按位右移(>>)运算符将给定的值的二进制数的所有位右移指定的位数。右移指定的位数后,右边低位的数值被移出并丢弃,左边高位空出的位置用0补齐。

    mysql> SELECT 1 >> 2, 4 >> 2;
    +--------+--------+
    | 1 >> 2 | 4 >> 2 |
    +--------+--------+
    |      0 |      1 |
    +--------+--------+
    1 row in set (0.00 sec)
     
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    6. 按位左移运算符
    按位左移(<<)运算符将给定的值的二进制数的所有位左移指定的位数。左移指定的位数后,左边高位的数值被移出并丢弃,右边低位空出的位置用0补齐。
    按位左移和上面的右移是一样道理,这里就不说了。

    mysql> SELECT 1 << 2, 4 << 2;  
    +--------+--------+
    | 1 << 2 | 4 << 2 |
    +--------+--------+
    |      4 |     16 |
    +--------+--------+
    1 row in set (0.00 sec)
     
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    https://www.dianjilingqu.com/