• MySQL运算符


    运算符概念

    算术运算符

    加减乘除求余

    比较运算符

    大于> 小于< 等于= 大于等于>= 小于等于<= 不等于!=

    IN、 BETWEEN AND、 IS NULL、 GREATEST、 LEAST、 LIKE、 REGEXP

    逻辑运算符

    TRUE(1) FALSE(0) NOT(!) AND(&&) OR(||) XOR

    位操作运算符

    操作数按二进制位进行运算,包括与(&)位、或(|)位、非(~)位、异或(^)、左移(<<)、右移(>>)

    算术运算符

    mysql> create table tmpl4(num int);
    Query OK, 0 rows affected (0.16 sec)
    
    mysql> insert into tmpl4 values(64);
    Query OK, 1 row affected (0.01 sec)
    

    1.加减运算

    mysql> select num,num+10,num-3+5,num+5-3,num+36.5 from tmpl4;
    +------+--------+---------+---------+----------+
    | num  | num+10 | num-3+5 | num+5-3 | num+36.5 |
    +------+--------+---------+---------+----------+
    |   64 |     74 |      66 |      66 |    100.5 |
    +------+--------+---------+---------+----------+
    1 row in set (0.00 sec)
    

    2.乘法、除法运算、取余

    mysql> select num,num*2,num/2,num/3,num%3 from tmpl4;
    +------+-------+---------+---------+-------+
    | num  | num*2 | num/2   | num/3   | num%3 |
    +------+-------+---------+---------+-------+
    |   64 |   128 | 32.0000 | 21.3333 |     1 |
    +------+-------+---------+---------+-------+
    1 row in set (0.00 sec)
    

    3.用0除num

    mysql> select num,num/0,num%0 from tmpl4;
    +------+-------+-------+
    | num  | num/0 | num%0 |
    +------+-------+-------+
    |   64 |  NULL |  NULL |
    +------+-------+-------+
    1 row in set (0.00 sec)
    

    比较运算符

    1.等于运算符

    mysql> select 1=0,'2'=2,2=2,'0.02'=0,'b'='b',(1+3)=(2+2),null=null from tmpl4;
    +-----+-------+-----+----------+---------+-------------+-----------+
    | 1=0 | '2'=2 | 2=2 | '0.02'=0 | 'b'='b' | (1+3)=(2+2) | null=null |
    +-----+-------+-----+----------+---------+-------------+-----------+
    |   0 |     1 |   1 |        0 |       1 |           1 |      NULL |
    +-----+-------+-----+----------+---------+-------------+-----------+
    1 row in set (0.00 sec)
    

    如下规则:
    若两个参数为NULL,则结果为NULL
    若两个参数为字符串,则按照字符串比较
    若两个参数为整数,则按照整数比较
    若两个参数一整数,一字符串,则会自动将字符串转为数字再进行比较

    2.安全等于运算符(<=>):
    与=号用法一至,唯一区别是可以判断NULL,两者都为NULL时,返回值为1。

    mysql> select 1<=>0,'2'<=>2,null<=>null from tmpl4;
    +-------+---------+-------------+
    | 1<=>0 | '2'<=>2 | null<=>null |
    +-------+---------+-------------+
    |     0 |       1 |           1 |
    +-------+---------+-------------+
    1 row in set (0.00 sec)
    

    3.不等于运算符(<>或者!=)

    mysql> select 'good'<>'god',1<>2,4!=4;
    +---------------+------+------+
    | 'good'<>'god' | 1<>2 | 4!=4 |
    +---------------+------+------+
    |             1 |    1 |    0 |
    +---------------+------+------+
    1 row in set (0.00 sec)
    

    4.小于或等于运算符(<=)

    mysql> select 'good'<='god',1<=2,null<=null;
    +---------------+------+------------+
    | 'good'<='god' | 1<=2 | null<=null |
    +---------------+------+------------+
    |             0 |    1 |       NULL |
    +---------------+------+------------+
    1 row in set (0.00 sec)
    

    5.is null(isnull)、is not null运算符

    mysql> select null is null,isnull(null),isnull(10),10 is not null;
    +--------------+--------------+------------+----------------+
    | null is null | isnull(null) | isnull(10) | 10 is not null |
    +--------------+--------------+------------+----------------+
    |            1 |            1 |          0 |              1 |
    +--------------+--------------+------------+----------------+
    1 row in set (0.00 sec)
    

    6.BETWEEN AND运算符

    mysql> select 4 BETWEEN 2 AND 5,4 BETWEEN 4 AND 6,12 BETWEEN 9 AND 10;
    +-------------------+-------------------+---------------------+
    | 4 BETWEEN 2 AND 5 | 4 BETWEEN 4 AND 6 | 12 BETWEEN 9 AND 10 |
    +-------------------+-------------------+---------------------+
    |                 1 |                 1 |                   0 |
    +-------------------+-------------------+---------------------+
    1 row in set (0.00 sec)
    

    7.LEAST运算符

    mysql> select least(2,0),least(20,3,100),least('a','b','c'),least(10,null);
    +------------+-----------------+--------------------+----------------+
    | least(2,0) | least(20,3,100) | least('a','b','c') | least(10,null) |
    +------------+-----------------+--------------------+----------------+
    |          0 |               3 | a                  |           NULL |
    +------------+-----------------+--------------------+----------------+
    1 row in set (0.00 sec)
    

    返回最小值,如果有一个自变量为NULL,无法判断大小则返回NULL。

    8.GRETEST运算符(最大值同最小值)

    mysql> select greatest(2,0),greatest(20,3,100.5),greatest('a','b','c'),greatest(10,null);
    +---------------+----------------------+-----------------------+-------------------+
    | greatest(2,0) | greatest(20,3,100.5) | greatest('a','b','c') | greatest(10,null) |
    +---------------+----------------------+-----------------------+-------------------+
    |             2 |                100.5 | c                     |              NULL |
    +---------------+----------------------+-----------------------+-------------------+
    1 row in set (0.00 sec)
    

    9.IN、NOT IN 运算符

    mysql> select 2 in (1,3,5,'thks'),'thks' not in ('thsk',2,3),'5' in (5,62);
    +---------------------+----------------------------+---------------+
    | 2 in (1,3,5,'thks') | 'thks' not in ('thsk',2,3) | '5' in (5,62) |
    +---------------------+----------------------------+---------------+
    |                   0 |                          1 |             1 |
    +---------------------+----------------------------+---------------+
    1 row in set, 2 warnings (0.00 sec)
    

    存在NULL时的IN查询,左侧为NULL,表中找不到匹配项并且表达式中有一个为NULL

    mysql> select null in (1,20,'dasd'),10 in ('dasdm',null,56);
    +-----------------------+-------------------------+
    | null in (1,20,'dasd') | 10 in ('dasdm',null,56) |
    +-----------------------+-------------------------+
    |                  NULL |                    NULL |
    +-----------------------+-------------------------+
    1 row in set, 1 warning (0.00 sec)
    

    10.LIKE

    匹配对象 like 要匹配的格式,满足返回1,否则0

    • '%',匹配任何数目的字符
    • '_',只能匹配一个字符
    mysql> select 'stud' like 'stud','stud' like 'stu_','stud' like '%d','stud' like 's__';
    +--------------------+--------------------+------------------+-------------------+
    | 'stud' like 'stud' | 'stud' like 'stu_' | 'stud' like '%d' | 'stud' like 's__' |
    +--------------------+--------------------+------------------+-------------------+
    |                  1 |                  1 |                1 |                 0 |
    +--------------------+--------------------+------------------+-------------------+
    1 row in set (0.00 sec)
    

    REGEXP正则表达式
    匹配对象 REGEXP 指定匹配的字符串

    • '^'匹配以该字符串后面的字符开头
    • '$'匹配以该字符串前的字符结尾
    • '.'匹配任何一个单字符
    • '[....]'匹配在方括号内的任何字符,为了命名字符的范围,使用了一个'-','[a-z]'匹配任何字符。'[0-9]'匹配任何数字。
    • ' * '匹配零个或多个在他前面的字符;'x'匹配任何数量的'x'字符,'[0-9]'匹配任何数量的数字
    mysql> 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 row in set (0.04 sec)
    

    逻辑运算符

    1.NOT 或者 !

    逻辑运算当为0时,所得值为1,当操作数为非零时,所得值为0,当操作数为NULL时,返回值为NULL。

    mysql> select not 10,not (1-1), not -5, not null, not 1+1;
    +--------+-----------+--------+----------+---------+
    | not 10 | not (1-1) | not -5 | not null | not 1+1 |
    +--------+-----------+--------+----------+---------+
    |      0 |         1 |      0 |     NULL |       0 |
    +--------+-----------+--------+----------+---------+
    1 row in set (0.00 sec)
    
    mysql> select !10,!-5,!(1-1),!(1+1);
    +-----+-----+--------+--------+
    | !10 | !-5 | !(1-1) | !(1+1) |
    +-----+-----+--------+--------+
    |   0 |   0 |      1 |      0 |
    +-----+-----+--------+--------+
    1 row in set (0.00 sec)
    

    2.AND 或者 &&

    逻辑运算为非0并且不为NULL,返回1,有一个为0则返回0,其余情况返回NULL

    mysql> select 1 AND -1,1 AND 0,0 AND NULL,1 AND NULL;
    +----------+---------+------------+------------+
    | 1 AND -1 | 1 AND 0 | 0 AND NULL | 1 AND NULL |
    +----------+---------+------------+------------+
    |        1 |       0 |          0 |       NULL |
    +----------+---------+------------+------------+
    1 row in set (0.00 sec)
    mysql> select 1 && -1,1 && 0,0 && NULL,1 && NULL;
    +---------+--------+-----------+-----------+
    | 1 && -1 | 1 && 0 | 0 && NULL | 1 && NULL |
    +---------+--------+-----------+-----------+
    |       1 |      0 |         0 |      NULL |
    +---------+--------+-----------+-----------+
    1 row in set (0.00 sec)
    

    3.OR 或者 ||

    两值均为非NULL,只要一个不是0,则为1;有一个为NULL,只要有一个不是0,则是1,否则则为NULL

    mysql> select 0 or -1, 0 or NULL, 1 or NULL, 0 or 0;
    +---------+-----------+-----------+--------+
    | 0 or -1 | 0 or NULL | 1 or NULL | 0 or 0 |
    +---------+-----------+-----------+--------+
    |       1 |      NULL |         1 |      0 |
    +---------+-----------+-----------+--------+
    1 row in set (0.00 sec)
    
    mysql> select 0 || -1,0 || NULL, 50 || NULL, 0 || 0;
    +---------+-----------+------------+--------+
    | 0 || -1 | 0 || NULL | 50 || NULL | 0 || 0 |
    +---------+-----------+------------+--------+
    |       1 |      NULL |          1 |      0 |
    +---------+-----------+------------+--------+
    1 row in set (0.00 sec)
    

    4.XOR

    逻辑异或运算,当任意一个为NULL,返回NULL,两个都非NULL,一个为0,一个为非0,返回1,否则返回0。

    mysql> select 0 xor 0, 1 xor 1, 1 xor NULL, 25 xor 0, 0 xor NULL;
    +---------+---------+------------+----------+------------+
    | 0 xor 0 | 1 xor 1 | 1 xor NULL | 25 xor 0 | 0 xor NULL |
    +---------+---------+------------+----------+------------+
    |       0 |       0 |       NULL |        1 |       NULL |
    +---------+---------+------------+----------+------------+
    

    位运算符

    1.位或运算符(|)
    位或运算的实质是将参与运算的几个数据,按对应的二进制数逐位进行逻辑或运算。对应的二进制位有一个或两个为1,则该位的运算结果为1,否则为0。

    mysql> select 10 | 15, 9 | 4 | 2;
    +---------+-----------+
    | 10 | 15 | 9 | 4 | 2 |
    +---------+-----------+
    |      15 |        15 |
    +---------+-----------+
    1 row in set (0.00 sec)
    

    2.位与运算符(&)
    位与运算的实质是将参与运算的几个操作数,按对应的二进制数逐位进行逻辑与运算,对应的二进制都为1,则该位的运算结果为1,否则为0

    mysql> select 10 & 15, 9 &4 &2;
    +---------+---------+
    | 10 & 15 | 9 &4 &2 |
    +---------+---------+
    |      10 |       0 |
    +---------+---------+
    1 row in set (0.00 sec)
    

    3.位异或运算符(^)
    位与运算的实质是将参与运算的几个操作数,按对应的二进制数逐位进行逻辑与运算,对应的二进制不一样时,则该位的运算结果为1,否则为0

    mysql> select 10 ^ 15,1^0,1^1;
    +---------+-----+-----+
    | 10 ^ 15 | 1^0 | 1^1 |
    +---------+-----+-----+
    |       5 |   1 |   0 |
    +---------+-----+-----+
    1 row in set (0.00 sec)
    

    4.位左移运算符(<<)
    使指定的二进制所有位都左移指定的位数,左移后左边高位的数值将丢弃,右边低位的位置用0补齐。

    mysql> select 1<<2,2<<4;
    +------+------+
    | 1<<2 | 2<<4 |
    +------+------+
    |    4 |   32 |
    +------+------+
    1 row in set (0.00 sec)
    

    1的二进制位0000 0001,左移两位之后变为0000 0100,即十进制整数4,再左移两位变为16。

    5.位取反运算符(~)
    位取反运算实质是将参与运算的数据,按对应的二进制数逐位反转,即1取反后变为0,0取反后变为1。

    mysql> select 5 & ~1;
    +--------+
    | 5 & ~1 |
    +--------+
    |      4 |
    +--------+
    1 row in set (0.00 sec)
    

    ~优先级高,1本来为0000 0001,取反后为1111 1110,5的二进制为0000 0101,与运算后为0000 0100,则为4

    mysql经过位运算后的数值是一个64位的无符号整数,可以使用BIN()函数产看1取反之后的结果

    +------------------------------------------------------------------+
    | bin(~1)                                                          |
    +------------------------------------------------------------------+
    | 1111111111111111111111111111111111111111111111111111111111111110 |
    +------------------------------------------------------------------+
    1 row in set (0.00 sec)
    
  • 相关阅读:
    string
    auto和decltype
    const限定符
    &(引用) 和 *(指针)
    extern关键字
    关于将函数写入头文件问题(分离式编译)
    poj2154(polya定理+欧拉函数)
    bzoj2115(线性基)
    51nod1832(二叉树/高精度模板+dfs)
    51nod1464(trie + dfs)
  • 原文地址:https://www.cnblogs.com/lishi-jie/p/9896585.html
Copyright © 2020-2023  润新知