• MySQL常用运算符


    一、算数运算符

    运算符 作用
    + 加法运算
    - 减法运算
    * 乘法运算
    /或DIV 除法运算
    %或MOD 取余运算

    注意:在除法运算和模运算中,如果除数为0,将是非法除法,返回结果为NULL!

    示例:

    create table t1(num int);
    insert into t1 values(64);
    mysql> select num,num+10,num-4,num*2,num/2,num%3 from t1;
    +------+--------+-------+-------+---------+-------+
    | num  | num+10 | num-4 | num*2 | num/2   | num%3 |
    +------+--------+-------+-------+---------+-------+
    |   64 |     74 |    60 |   128 | 32.0000 |     1 |
    +------+--------+-------+-------+---------+-------+
    

    二、比较运算符

    select 语句中的条件语句经常要使用比较运算符。通过这些比较运算符,可以判断表中的哪些记录是符合条件的,比较结果为真,则返回1,为假则返回0,比较结果不确定则返回NULL。

    符号 描述 备注
    = 等于
    <>,!= 不等于
    > 大于
    < 小于
    <= 小于等于
    >= 大于等于
    BETWEEN 在两值之间 大于等于最小值
    NOT BETWEEN 不在两值之间
    IN 在集合中
    NOT IN 不在集合中
    <=> 严格比较两个NULL值是否相等 两个操作码均为NULL时,其所得值为1;当一个操作码为NULL时,其所得值为0
    LIKE 模糊匹配
    PEGEXP或RLIKE 匹配正则
    IS NULL 为空
    IS NOT NULL 不为空

    2.1 等于运算符

    等于运算符用来判断数字、字符串和表达式是否相等,如果相等,则返回值为1,否则返回值为0,如果有一个值是NULL,则比较结果是NULL!如下:

    select 1=0,'2'=2,(1+3)=(2+2),NULL=NULL;
    +-----+-------+-------------+-----------+
    | 1=0 | '2'=2 | (1+3)=(2+2) | NULL=NULL |
    +-----+-------+-------------+-----------+
    |   0 |     1 |           1 |      NULL |
    +-----+-------+-------------+-----------+
    

    2.2 严格等于运算符

    这个运算符和等号运算符的作用一致,只不过多了一个功能,就是可以判断NULL值!如下:

    select 1<=>0,'2'<=>2,(1+3)<=>(2+2),NULL<=>NULL;
    +-------+---------+---------------+-------------+
    | 1<=>0 | '2'<=>2 | (1+3)<=>(2+2) | NULL<=>NULL |
    +-------+---------+---------------+-------------+
    |     0 |       1 |             1 |           1 |
    +-------+---------+---------------+-------------+
    

    2.3 不等于运算符

    不等于运算符用于判断数字、字符串、表达式是否不相等,如果不相等则返回 1,否则返回 0 ,但是不能判断 NULL 值!如下:

    select 'good'<>'god', 1<>2, 4!=4, 5.5!=5, NULL<>NULL;
    +---------------+------+------+--------+------------+
    | 'good'<>'god' | 1<>2 | 4!=4 | 5.5!=5 | NULL<>NULL |
    +---------------+------+------+--------+------------+
    |             1 |    1 |    0 |      1 |       NULL |
    +---------------+------+------+--------+------------+
    

    2.4 IS NULL 、IS NOT NULL

    • IS NULL是 检验一个值是否为 NULL ,如果为 NULL ,返回值为 1,否则返回值为 0;
    • IS NOT NULL 检验一个值是否不为 NULL ,如果不为 NULL ,返回值为 1,否则返回值为 0;
    select null is null,10 is null,10 is not null;
    +--------------+------------+----------------+
    | null is null | 10 is null | 10 is not null |
    +--------------+------------+----------------+
    |            1 |          0 |              1 |
    +--------------+------------+----------------+
    

    2.5 BETWEEN AND

    主要用于判断一个值是否在两个值之间!

    select 4 between 1 and 5,4 between 4 and 6,12 between 9 and 10;
    +-------------------+-------------------+---------------------+
    | 4 between 1 and 5 | 4 between 4 and 6 | 12 between 9 and 10 |
    +-------------------+-------------------+---------------------+
    |                 1 |                 1 |                   0 |
    +-------------------+-------------------+---------------------+
    

    2.6 LEAST 、GREATEST

    • LEAST :当有两个或多个参数时,返回最小值,如果有一个值是 NULL ,则返回结果为 NULL;
    • GREATEST :当有两个或多个参数时,返回最大值,如果有一个值是 NULL ,则返回结果为 NULL;
    select least(2,0),least('a','b','c'),least(10,NULL),greatest(2,0),greatest(10,NULL);
    +------------+--------------------+----------------+---------------+-------------------+
    | least(2,0) | least('a','b','c') | least(10,NULL) | greatest(2,0) | greatest(10,NULL) |
    +------------+--------------------+----------------+---------------+-------------------+
    |          0 | a                  |           NULL |             2 |              NULL |
    +------------+--------------------+----------------+---------------+-------------------+
    

    2.7 IN、NOT IN

    • IN :判断一个值是否是 IN 列表中的任意一个值;
    • NOT IN :判断一个值是否不是 IN 列表中的任意一个值;
    select 2 in(3,5,8,2),2 not in(1,3,5);
    +---------------+-----------------+
    | 2 in(3,5,8,2) | 2 not in(1,3,5) |
    +---------------+-----------------+
    |             1 |               1 |
    +---------------+-----------------+
    

    2.8 LIKE

    • LIKE 运算符用来匹配字符串,如果匹配则返回 1,如果不匹配则返回 0;
    • LIKE 使用两种通配符:'%' 用于匹配任何数目的字符,包括零字符 ; '_' 只能匹配一个字符;
    select 'stud' like 'stu_','stud' like 's___','stud' like '%d';                           +--------------------+--------------------+------------------+
    | 'stud' like 'stu_' | 'stud' like 's___' | 'stud' like '%d' |
    +--------------------+--------------------+------------------+
    |                  1 |                  1 |                1 |
    +--------------------+--------------------+------------------+
    

    2.9 REGEXP

    1)REGEXP运算符用来匹配字符串,如果匹配则返回1,如果不匹配则返回0;
    2)REGEXP 使用以下几种通配符:

    • '^':用于匹配以什么开头的字符串;
    • '$':用以匹配以什么结尾的字符串;
    • '.':用于匹配任何一个单字符串;
    • "[...]':用于匹配在方括号内的任何字符;
    • '*'用于匹配零个或多个在它前面的字符;
    select 'ssky' regexp '^s', 'ssky' regexp 'y$', 'ssky' regexp '.sky', 'ssky' regexp '[ab]' ;
    +--------------------+--------------------+----------------------+----------------------+
    | 'ssky' regexp '^s' | 'ssky' regexp 'y$' | 'ssky' regexp '.sky' | 'ssky' regexp '[ab]' |
    +--------------------+--------------------+----------------------+----------------------+
    |                  1 |                  1 |                    1 |                    0 |
    +--------------------+--------------------+----------------------+----------------------+
    

    三、逻辑运算符

    逻辑运算符用来判断表达式的真假。如果表达式是真,结果返回 1。如果表达式是假,结果返回 0!

    运算符号 作用
    NOT或! 逻辑非
    AND 逻辑与
    OR 逻辑或
    XOR 逻辑异或

    3.1 逻辑非

    • 当操作数为0时,所得值为1;
    • 当操作数为非0时,所得值为0;
    • 当操作数为NULL时,所得值为NULL;
    select not 10,!10,not(1-1),not 1+1,not null;
    +--------+-----+----------+---------+----------+
    | not 10 | !10 | not(1-1) | not 1+1 | not null |
    +--------+-----+----------+---------+----------+
    |      0 |   0 |        1 |       0 |     NULL |
    +--------+-----+----------+---------+----------+
    

    3.2 逻辑与

    • 当所有操作数为非零值,并且不为NULL时,所得值为1;
    • 当一个或多个操作数为0时,所得值为0;
    • 其余情况所得值为NULL;
    select 1 and -1,1 && 0,0 and null,1 && null;
    +----------+--------+------------+----------+
    | 1 and -1 | 1 && 0 | 0 and null | 1&& null |
    +----------+--------+------------+----------+
    |        1 |      0 |          0 |     NULL |
    +----------+--------+------------+----------+
    

    3.3 逻辑或

    • 当两个操作数均为非 NULL 值,且任意一个操作数为非零值时,结果为 1 ,否则为 0;
    • 当有一个操作数为 NULL ,且另一个操作数为非零值时,则结果为 1 ,否则结果为 NULL;
    • 当两个操作数均为 NULL 时,则所得结果为 NULL;
    select 1 or -1 or 0,1 || 2,0 or null,null|| null;
    +--------------+--------+-----------+-------------+
    | 1 or -1 or 0 | 1 || 2 | 0 or null | null|| null |
    +--------------+--------+-----------+-------------+
    |            1 |      1 |      NULL |        NULL |
    +--------------+--------+-----------+-------------+
    

    3.4 逻辑异或

    • a XOR b 的计算等同于 ( a AND (NOT b) ) 或 ( (NOT a) AND b );
    • 当任意一个操作数为 NULL 时,返回值为 NULL;
    • 对于非 NULL 的操作数,如果两个操作数都是非 0 值或者都是 0 值,则返回结果为 0;
    • 如果一个为 0 值,另一个为非 0 值,返回结果为 1;
    select 1 xor 1,0 xor 0,1 xor 0,1 xor null,1 xor 1 xor 1;
    +---------+---------+---------+------------+---------------+
    | 1 xor 1 | 0 xor 0 | 1 xor 0 | 1 xor null | 1 xor 1 xor 1 |
    +---------+---------+---------+------------+---------------+
    |       0 |       0 |       1 |       NULL |             1 |
    +---------+---------+---------+------------+---------------+
    

    四、位运算符

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

    运算符号 作用
    & 按位与
    ^ 按位异或
    取反
    << 左移
    >> 右移动

    4.1 位或运算符

    对应的二进制位有一个或两个为 1 ,则该位的运算结果为 1 ,否则为 0!

    select 10|15,9|4|2;
    +-------+-------+  
    | 10|15 | 9|4|2 |    #10的二进制为1010,15的二进制为1111,按位或运算之后结果为1111,即15
    +-------+-------+   #9的二进制为1001,4为0100,2的二进制为0010,按位或运算之后1111,即15
    |    15 |    15 |
    +-------+-------+
    

    4.2 位与运算符

    对应的二进制位都为 1 ,则该位的运算结果为 1 ,否则为 0!

     select 10 & 15,9 & 4 & 2;
    +---------+-----------+
    | 10 & 15 | 9 & 4 & 2 |
    +---------+-----------+
    |      10 |         0 |
    +---------+-----------+
    

    4.3 位异或运算符

    对应的二进制位不相同时,结果为 1 ,否则为 0!

    select 10 ^ 15,1 ^ 0,1^1;
    +---------+-------+-----+
    | 10 ^ 15 | 1 ^ 0 | 1^1 |
    +---------+-------+-----+
    |       5 |     1 |   0 |
    +---------+-------+-----+
    

    4.4 左移运算符

    使指定的二进制位都左移指定的位数,左移指定位之后,左边高位的数值将被移出并丢弃,右边低位空出的位置用 0 补齐!

    select 1<<2,4<<2;
    +------+------+
    | 1<<2 | 4<<2 |
    +------+------+
    |    4 |   16 |
    +------+------+
    

    在上述位左移运算中,1的二进制值为00000001,左移两位之后变成00000100,即十进制数4;4的二进制值为00000100,左移两位之后变成00010000,即十进制数16!

    4.5 右移运算符

    使指定的二进制位都右移指定的位数,右移指定位之后,右边低位的数值将被移出并丢弃,左边高位空出的位用 0 补齐!

    select 1 >> 1,16 >> 2;
    +--------+---------+
    | 1 >> 1 | 16 >> 2 |
    +--------+---------+
    |      0 |       4 |
    +--------+---------+
    

    4.6 取反运算符(~)

    将对应的二进制数逐位反转,即 1 取反后变 0 ,0 取反后变 1!

    select 5 &~1;
    +-------+
    | 5 &~1 |
    +-------+
    |     4 |
    +-------+
    

    关于上述的返回值解释:SQL语句是将5和进行位取反的数字1进行位与运算(&),位于运算的原则是对应的二进制位都位1,则该位为1,否则为0,5的二进制数为0101,1的二进制数为0001,1进行位取反后的值就是1110,那么0101和1110进行位与运算的结果就是0100,也就是4!

    五、运算符优先级

    20200409122405

    注意:最低优先级为:":=";最高优先级为: !、BINARY、 COLLATE。

    *************** 当你发现自己的才华撑不起野心时,就请安静下来学习吧!***************
  • 相关阅读:
    索引结构
    云时代基础设置自动化管理利器: Chef
    软件Scrum
    选择置换+败者树搞定外部排序
    selenium webdriver (python)2
    [置顶] javascript-基于对象or面向对象?
    4.7 阻止对某几列插入
    mysql数据损坏修复方法
    阿里云挂载数据盘
    Delphi 使用双缓冲解决图片切换时的闪烁问题 good
  • 原文地址:https://www.cnblogs.com/lvzhenjiang/p/14197104.html
Copyright © 2020-2023  润新知