MySQL 中的运算符

1、算数运算符

  • MySQL 支持的算术运算符包括加、减、乘、除和模运算。

    运算符作用
    +加法,获得一个或多个值的和
    -减法,从一个值中减去另一个值
    *乘法,得到两个或多个值的乘积
    /,div商运算,用一个值除以另一个值得到商
    %,mod模运算,用一个值除以另外一个值得到余数
  • 1)在除法运算和模运算中,如果除数为 0,将是非法除数,返回结果为 NULL。

    > select 1/0, 100%0;
    
        +------+-------+
        | 1/0  | 100%0 |
        +------+-------+
        | NULL |  NULL |
        +------+-------+
        1 row in set, 2 warnings (0.00 sec)
  • 2)对于除法运算,还有另一种表达方式,使用 a div b 函数,从除法结果中舍弃小数点右侧的小数部分。

    > select 5/2, 5 div 2;
    
        +--------+---------+
        | 5/2    | 5 div 2 |
        +--------+---------+
        | 2.5000 |       2 |
        +--------+---------+
        1 row in set (0.00 sec)
  • 3)对于模运算,还有另一种表达方式,使用 mod(a,b) 函数与 a%b 效果一样。

    > select 5%2, mod(5, 2);
    
        +------+-----------+
        | 5%2  | mod(5, 2) |
        +------+-----------+
        |    1 |         1 |
        +------+-----------+
        1 row in set (0.00 sec)

2、比较运算符

  • 当使用 select 语句进行查询时, MySQL 允许用户对表达式的左边操作数和右边操作数进行比较,比较结果为真,则返回 1,为假则返回 0,比较结果不确定则返回 null。

  • 比较运算符可以用于比较数字、字符串和表达式。数字作为浮点数比较,而字符串以不区分大小写的方式进行比较。

    运算符作用
    =等于,用于比较运算符两侧的操作数是否相等,相等返回 1,否则为 0,null 不能用 "=" 比较
    <>、!=不等于,和 "=" 相反,不等返回 1,否则为 0,null 不能用 "<>" 比较
    <=>null 安全的等于 (null-safe),和 "=" 类似,相等返回 1,可以比较 null
    <小于
    <=小于等于
    >大于
    >=大于等于
    between存在于指定范围,a BETWEEN min AND max,当 a 大于等于 min 并且小于等于 max,则返回值为 1,否则返回0;操作数 a、min、max 类型相同时,此表达式等价于(a >= min and a <= max),当操作数类型不同时,比较时会遵循类型转换原则进行转换后,再进行比较运算
    in存在于指定集合,a IN (value1, value2, …),当 a 的值存在于列表中时,则整个比较表达式返回的值为 1,否则返回 0
    is null为 null,a IS NULL,当 a 的值为 null,则返回值为 1,否则返回 0
    is not null不为 null,a IS NOT NULL,和 "is null" 相反,当 a 的值不为 NULL,则返回值为 1,否则返回 0
    like通配符匹配,a LIKE %123%,当 a 中含有字符串 "123" 时,则返回值为 1,否则返回 0
    regexp、rlike正则表达式,str REGEXP str_pat,当 str 字符串中含有 str_pat 相匹配的字符串时,则返回值为 1,否则返回 0
  • 示例

    > select 1 = 0, 1 = 1, NULL = NULL;
    
        +-------+-------+-------------+
        | 1 = 0 | 1 = 1 | NULL = NULL |
        +-------+-------+-------------+
        |     0 |     1 |        NULL |
        +-------+-------+-------------+
        1 row in set (0.00 sec)
    
    > select 1 = 0, 1 = 1, NULL = NULL;
    
        +-------+-------+-------------+
        | 1 = 0 | 1 = 1 | NULL = NULL |
        +-------+-------+-------------+
        |     0 |     1 |        NULL |
        +-------+-------+-------------+
        1 row in set (0.00 sec)
    
    > select 1 <=> 1, 2 <=> 0, 0 <=> 0, NULL <=> NULL;
    
        +---------+---------+---------+---------------+
        | 1 <=> 1 | 2 <=> 0 | 0 <=> 0 | NULL <=> NULL |
        +---------+---------+---------+---------------+
        |       1 |       0 |       1 |             1 |
        +---------+---------+---------+---------------+
        1 row in set (0.00 sec)
    
    > select 'a '< 'b', 'a' < 'a', 'a' < 'c', 1 < 2;
    
        +-----------+-----------+-----------+-------+
        | 'a '< 'b' | 'a' < 'a' | 'a' < 'c' | 1 < 2 |
        +-----------+-----------+-----------+-------+
        |         1 |         0 |         1 |     1 |
        +-----------+-----------+-----------+-------+
        1 row in set (0.00 sec)
    
    > select 'bdf' <= 'b', 'b' <= 'b', 0 < 1;
    
        +--------------+------------+-------+
        | 'bdf' <= 'b' | 'b' <= 'b' | 0 < 1 |
        +--------------+------------+-------+
        |            0 |          1 |     1 |
        +--------------+------------+-------+
        1 row in set (0.00 sec)
    
    > select 'a' > 'b', 'abc' > 'a', 1 > 0;
    
        +-----------+-------------+-------+
        | 'a' > 'b' | 'abc' > 'a' | 1 > 0 |
        +-----------+-------------+-------+
        |         0 |           1 |     1 |
        +-----------+-------------+-------+
        1 row in set (0.00 sec)
    
    > select 'a' >= 'b', 'abc' >= 'a', 1 >= 0, 1 >= 1;
    
        +------------+--------------+--------+--------+
        | 'a' >= 'b' | 'abc' >= 'a' | 1 >= 0 | 1 >= 1 |
        +------------+--------------+--------+--------+
        |          0 |            1 |      1 |      1 |
        +------------+--------------+--------+--------+
        1 row in set (0.00 sec)
    
    > select 10 between 10 and 20, 9 between 10 and 20;
    
        +----------------------+---------------------+
        | 10 between 10 and 20 | 9 between 10 and 20 |
        +----------------------+---------------------+
        |                    1 |                   0 |
        +----------------------+---------------------+
        1 row in set (0.00 sec)
    
    > select 1 in (1, 2, 3), 't' in ('t', 'a', 'b', 'l', 'e'), 0 in (1, 2);
    
        +----------------+----------------------------------+-------------+
        | 1 in (1, 2, 3) | 't' in ('t', 'a', 'b', 'l', 'e') | 0 in (1, 2) |
        +----------------+----------------------------------+-------------+
        |              1 |                                1 |           0 |
        +----------------+----------------------------------+-------------+
        1 row in set (0.00 sec)
    
    > select 0 is null, null is null;
    
        +-----------+--------------+
        | 0 is null | null is null |
        +-----------+--------------+
        |         0 |            1 |
        +-----------+--------------+
        1 row in set (0.00 sec)
    
    > select 0 is not null, null is not null;
    
        +---------------+------------------+
        | 0 is not null | null is not null |
        +---------------+------------------+
        |             1 |                0 |
        +---------------+------------------+
        1 row in set (0.00 sec)
    
    > select 123456 like '123%', 123456 like '%123%', 123456 like '%321%';
    
        +--------------------+---------------------+---------------------+
        | 123456 like '123%' | 123456 like '%123%' | 123456 like '%321%' |
        +--------------------+---------------------+---------------------+
        |                  1 |                   1 |                   0 |
        +--------------------+---------------------+---------------------+
        1 row in set (0.00 sec)
    
    > select 'abcdef' regexp 'ab', 'abcdefg' regexp 'k';
    
        +----------------------+----------------------+
        | 'abcdef' regexp 'ab' | 'abcdefg' regexp 'k' |
        +----------------------+----------------------+
        |                    1 |                    0 |
        +----------------------+----------------------+
        1 row in set (0.01 sec)

3、逻辑运算符

  • 逻辑运算符又称为布尔运算符,用来确认表达式的真和假。

    运算符作用
    not、!逻辑非,返回和操作数相反的结果:0(假)返回值为 1,否则值为 0。NOT NULL 的返回值为 NULL
    and、&&逻辑与,当所有操作数均为非零值并且不为 NULL 时,计算所得结果为 1,当一个或多个操作数为 0 时,所得结果为 0,操作数中有任何一个为 NULL 则返回值为 NULL
    or、||逻辑或,当两个操作数均为非 NULL 值时,如有任意一个操作数为非零值,则结果为 1,否则结果为 0。当有一个操作数为 NULL 时,如另一个操作数为非零值,则结果为 1,否则结果为 NULL。假如两个操作数均为 NULL,则所得结果为 NULL
    xor逻辑异或,任意一个操作数为 NULL 时,返回值为 NULL。对于非 NULL 的操作数,如果两个的逻辑真假值相异,则返回结果 1,否则返回 0
  • 示例

    > select not 0, not 1, not null;
    
        +-------+-------+----------+
        | not 0 | not 1 | not null |
        +-------+-------+----------+
        |     1 |     0 |     NULL |
        +-------+-------+----------+
        1 row in set (0.00 sec)
    
    > select 1 and 1, 0 and 1, 3 and 1, 1 and null;
    
        +---------+---------+---------+------------+
        | 1 and 1 | 0 and 1 | 3 and 1 | 1 and null |
        +---------+---------+---------+------------+
        |       1 |       0 |       1 |       NULL |
        +---------+---------+---------+------------+
        1 row in set (0.00 sec)
    
    > select 1 or 0, 0 or 0, 1 or null, 1 or 1, null or null;
    
        +--------+--------+-----------+--------+--------------+
        | 1 or 0 | 0 or 0 | 1 or null | 1 or 1 | null or null |
        +--------+--------+-----------+--------+--------------+
        |      1 |      0 |         1 |      1 |         NULL |
        +--------+--------+-----------+--------+--------------+
        1 row in set (0.00 sec)
    
    > select 1 xor 1, 0 xor 0, 1 xor 0, 0 xor 1, null xor 1;
    
        +---------+---------+---------+---------+------------+
        | 1 xor 1 | 0 xor 0 | 1 xor 0 | 0 xor 1 | null xor 1 |
        +---------+---------+---------+---------+------------+
        |       0 |       0 |       1 |       1 |       NULL |
        +---------+---------+---------+---------+------------+
        1 row in set (0.00 sec)

4、位运算符

  • 位运算是将给定的操作数转化为二进制后,对各个操作数每一位都进行指定的逻辑运算,得到的二进制结果转换为十进制数后就是位运算的结果。

    运算符作用
    &位与(位 and),对多个操作数的二进制位做逻辑与操作
    |位或(位 or),对多个操作数的二进制位做逻辑或操作
    ^位异或(位 xor),对操作数的二进制位做异或操作
    ~位取反,对操作数的二进制位做 not 操作,这里的操作数只能是一位
    >>位右移,左操作数向右移动右操作数指定的位数,左边补 0
    <<位左移,右操作数向左移动左操作数指定的位数。右边补 0
  • 示例

    > select 2&3&4;
    
        +-------+
        | 2&3&4 |
        +-------+
        |     0 |
        +-------+
        1 row in set (0.00 sec)
    
    > select 2|3;
    
        +-----+
        | 2|3 |
        +-----+
        |   3 |
        +-----+
        1 row in set (0.00 sec)
    
    > select 2^3;
    
        +-----+
        | 2^3 |
        +-----+
        |   1 |
        +-----+
    
    > select ~1 , ~18446744073709551614;
    
        +----------------------+------------------------+
        |                   ~1 | ~ 18446744073709551614 |
        +----------------------+------------------------+
        | 18446744073709551614 |                      1 |
        +----------------------+------------------------+
        1 row in set (0.00 sec)
    
    > select 100 >> 3;
    
        +----------+
        | 100 >> 3 |
        +----------+
        |       12 |
        +----------+
        1 row in set (0.00 sec)
    
    > select 100 << 3;
    
        +----------+
        | 100 << 3 |
        +----------+
        |      800 |
        +----------+
        1 row in set (0.00 sec)

5、运算符的优先级

  • 优先级顺序

    优先级顺序运算符
    1:=
    2||, OR, XOR
    3&&, AND
    4NOT
    5BETWEEN, CASE, WHEN, THEN, ELSE
    6=, <=>, >=, >, <=, <, <>, !=, IS, LIKE, REGEXP, IN
    7|
    8&
    9<<, >>
    10-, +
    11*, /, DIV, %, MOD
    12^
    13- (unary minus), ~ (unary bit inversion)
    14!
  • 实际上,很少有人能将这些优先级熟练记忆,很多情况下我们都是用 "()" 来将需要优先的操作括起来,这样既起到了优先的作用,又使得其他用户看起来更易于理解。

转载于:https://www.cnblogs.com/QianChia/p/9202470.html

1. 算法的基本概念 利用计算机算法为计算机解题的过程实际上是在实施某种算法。 (1)算法的基本特征 算法一般具有4个基本特征:可行性、确定性、有穷性、拥有足够的情报。 (2)算法的基本运算和操作 算法的基本运算和操作包括:算术运算、逻辑运算、关系运算、数据传输。 (3)算法的3种基本控制结构 算法的3种基本控制结构是:顺序结构、选择结构、循环结构。 (4)算法基本设计方法 算法基本设计方法:列举法、归纳法、递推、递归、减半递推技术、回溯法。 (5)指令系统 所谓指令系统指的是一个计算机系统能执行的所有指令的集合。 (2)数据结构研究的3个方面 ① 数据集合中各数据元素之间所固有的逻辑关系,即数据的逻辑结构; ② 在对数据进行处理时,各数据元素在计算机中的存储关系,即数据的存储结构; ③ 对各种数据结构进行的运算。 2. 逻辑结构 数据的逻辑结构是对数据元素之间的逻辑关系的描述,它可以用一个数据元素的集合和定义在此集合中的若干关系来表示。数据的逻辑结构有两个要素:一是数据元素的集合,通常记为D;二是D上的关系,它反映了数据元素之间的前后件关系,通常记为R。一个数据结构可以表示成:B=(D,R) 其中,B表示数据结构。为了反映D中各数据元素之间的前后件关系,一般用二元组来表示。 例如,如果把一年四季看作一个数据结构,则可表示成:B =(D,R) D ={春季,夏季,秋季,冬季} R ={(春季,夏季),(夏季,秋季),(秋季,冬季)} 3. 存储结构 数据的逻辑结构在计算机存储空间中的存放形式称为数据的存储结构(也称数据的物理结构)。 由于数据元素在计算机存储空间中的位置关系可能与逻辑关系不同,因此,为了表示存放在计算机存储空间中的各数据元素之间的逻辑关系(即前后件关系),在数据的存储结构中,不仅要存放各数据元素的信息,还需要存放各数据元素之间的前后件关系的信息。 一种数据的逻辑结构根据需要可以表示成多种存储结构,常用的存储结构有顺序、链接等存储结构。 顺序存储方式主要用于线性的数据结构,它把逻辑上相邻的数据元素存储在物理上相邻的存储单元里,结点之间的关系由存储单元的邻接关系来体现。 链式存储结构就是在每个结点中至少包含一个指针域,用指针来体现数据元素之间逻辑上的联系。 1.2.2 线性结构和非线性结构 根据数据结构中各数据元素之间前后件关系的复杂程度,一般将数据结构分为两大类型:线性结构与非线性结构。 (1)如果一个非空的数据结构满足下列两个条件: ① 有且只有一个根结点; ② 每一个结点最多有一个前件,也最多有一个后件。 则称该数据结构为线性结构。线性结构又称线性表。在一个线性结构中插入或删除任何一个结点后还应是线性结构。栈、队列、串等都为线性结构。 如果一个数据结构不是线性结构,则称之为非线性结构。数组、广义表、树和图等数据结构都是非线性结构。 (2)线性表的顺序存储结构具有以下两个基本特点: ① 线性表中所有元素所占的存储空间是连续的; ② 线性表中各数据元素在存储空间中是按逻辑顺序依次存放的。 元素ai的存储地址为:ADR(ai)=ADR(a1)+(i-1)k,ADR(a1)为第一个元素的地址,k代表每个元素占的字节数。 (3)顺序表的运算有查找、插入、删除3种。 1.3 栈 1. 栈的基本概念 栈(stack)是一种特殊的线性表,是限定只在一端进行插入与删除的线性表。 在栈中,一端是封闭的,既不允许进行插入元素,也不允许删除元素;另一端是开口的,允许插入和删除元素。通常称插入、删除的这一端为栈顶,另一端为栈底。当表中没有元素时称为空栈。栈顶元素总是最后被插入的元素,从而也是最先被删除的元素;栈底元素总是最先被插入的元素,从而也是最后才能被删除的元素。 栈是按照“先进后出”或“后进先出”的原则组织数据的。例如,枪械的子弹匣就可以用来形象的表示栈结构。子弹匣的一端是完全封闭的,最后被压入弹匣的子弹总是最先被弹出,而最先被压入的子弹最后才能被弹出。 二级公共基础知识速学教程 2. 栈的顺序存储及其运算 栈的基本运算有3种:入栈、退栈与读栈顶元素。 ① 入栈运算:在栈顶位置插入一个新元素; ② 退栈运算:取出栈顶元素并赋给一个指定的变量; ③ 读栈顶元素:将栈顶元素赋给一个指定的变量。 1.4 队列 1. 队列的基本概念 队列是只允许在一端进行删除,在另一端进行插入的顺序表,通常将允许删除的这一端称为队头,允许插入的这一端称为队尾。当表中没有元素时称为空队列。 队列的修改是依照先进先出的原则进行的,因此队列也称为先进先出的线性表,或者后进后出的线性表。例如:火车进遂道,最先进遂道的是火车头,最后是火车尾,而火车出遂道的时候也是火车头先出,最后出的是火车尾。若有队列: Q =(q1,q2,…,qn) 那么,q1为队头元素(排头
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值