mysql08-常见运算符

1、运算符主要有四大类分别是:

  • 算术运算符
    • 算术运算符用于各类数值运算。
    • 算术运算符包括:加(+)、减(-)、乘(*)、除(/)、求余(或称模运算,%) 。
  • 比较运算符
    • 比较运算符用于比较运算。
    • 比较运算符包括:大于(>)、小于(<)、等于(=)、大于等于(>=)、小于等于(<=)、不等于(!=),以及IN、BETWEEN AND、IS NULL、GREATEST、LEAST、LIKE、REGEXP等。
  • 逻辑运算符
    • 逻辑运算符的求值所得结果均为1(TRUE)或0(FALSE).
    • 逻辑运算符包括:辑非(NOT或者!)、逻辑与(AND或者&&)、逻辑或(OR或者||)、逻辑异或(XOR) 。
  • 位操作运算符
    • 位操作运算符参与运算的操作数按二进制位进行运算。
    • 位操作运算符包括:位与(&)、位或(1)、位非(~)、位异或(^)、左移(<<)、右移(>>)。

2、MySQL中如何使用特殊字符?

  • 诸如单引号(')、双引号(")、反斜线(\)等符号,在MySQL中不能直接输入使用,否则会产生意料之外的结果。
  • 在MySQL中,这些特殊字符称为转义字符,在输入时需要以反斜线符号('\')开头,即在使用单引号和双引号时应分别输入(\')、(\"),输入反斜线时应该输入(\\)。其他特殊字符还有同车符(\r)、换行符(\n)、制表符(\tab)、退格符(\b)等。
  • 在向数据库中插入特殊字符时,一定要进行转义。

1、算术运算符

  • MySQL中的算术运算符

  • 在数学运算时,除数为0的除法是没有意义的,因此除法运算中的除数不能为0。如果被0除,则返回结果为NULL。

示例:

--创建表
create table tb_ss(
    a int
);

mysql> insert into tb_ss(a) values(100);           --插入数据

mysql> select a,a+3,a-3,a*3,a/3,a%3 from tb_ss;    --查看数据
+------+------+------+------+---------+------+
| a    | a+3  | a-3  | a*3  | a/3     | a%3  |
+------+------+------+------+---------+------+
|  100 |  103 |   97 |  300 | 33.3333 |    1 |
+------+------+------+------+---------+------+

2、比较运算符

  • 一个比较运算符的结果总是1、0或者是NULL。
  • 比较运算符经常在SELECT的查询条件子句中使用,用来查询满足指定条件的记录。
  • MySQL中的比较运算符

1、等于运算符(=)

  • 等号(=)用来判断数字、字符串和表达式是否相等。如果相等返回值为1,否则返回值为0。
  • 数值比较时有如下规则:
    • 若两个参数都是整数,则按照整数进行比较。
    • 若两个参数都是字符串,则按照字符串进行比较。
    • 若一个字符串和数字进行相等比较,则MySQL可以自动将字符串转换为数字。
    • 若有一个或两个参数为NULL,则比较运算的结果为NULL。

示例:

mysql> select 2=2,'2'=2,'abc'='abc',2=1,'abc'=2,1+3=2+2,null=null,null=1;
+-----+-------+-------------+-----+---------+---------+-----------+--------+
| 2=2 | '2'=2 | 'abc'='abc' | 2=1 | 'abc'=2 | 1+3=2+2 | null=null | null=1 |
+-----+-------+-------------+-----+---------+---------+-----------+--------+
|   1 |     1 |           1 |   0 |       0 |       1 |      NULL |   NULL |
+-----+-------+-------------+-----+---------+---------+-----------+--------+

2、安全等于运算符(<=>)

  • “<=>”操作符和“=”操作符执行相同的比较操作。
  • “<=>”可以用来判断NULL值。在两个操作数均为NULL时,其返回值是1,而不是NULL;而当一个操作数是NULL时,其返回值是0而不是NULL。

示例:

mysql> select 2<=>2,'2'<=>2,'abc'<=>'abc',2<=>1,'abc'<=>2,1+3<=>2+2,null<=>null,null<=>1;
+-------+---------+---------------+-------+-----------+-----------+-------------+----------+
| 2<=>2 | '2'<=>2 | 'abc'<=>'abc' | 2<=>1 | 'abc'<=>2 | 1+3<=>2+2 | null<=>null | null<=>1 |
+-------+---------+---------------+-------+-----------+-----------+-------------+----------+
|     1 |       1 |             1 |     0 |         0 |         1 |           1 |        0 |
+-------+---------+---------------+-------+-----------+-----------+-------------+----------+

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

  • “<>”或者“!=”用于判断数字、字符串、表达式不相等的判断。如果不相等,返回值为1;否则返回值为0。
  • “<>”和“!=”运算符不能用于判断空值NULL。

示例:

mysql> select 2!=2,'2'!=2,'abc'!='abc',2!=1,'abc'!=2,1+3!=2+2,null!=null,null!=1;
+------+--------+--------------+------+----------+----------+------------+---------+
| 2!=2 | '2'!=2 | 'abc'!='abc' | 2!=1 | 'abc'!=2 | 1+3!=2+2 | null!=null | null!=1 |
+------+--------+--------------+------+----------+----------+------------+---------+
|    0 |      0 |            0 |    1 |        1 |        0 |       NULL |    NULL |
+------+--------+--------------+------+----------+----------+------------+---------+

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

  • “<=”用来判断左边的操作数是否小于或者等于右边的操作数。如果小于或者等于,返回值为1,否则返回值为0。
  • “<=”不能用于判断空值NULL。

示例:

mysql> select 2<=2,'2'<=2,'abc'<='abc',2<=1,'abc'<=2,1+3<=2+2,null<=null,null<=1;
+------+--------+--------------+------+----------+----------+------------+---------+
| 2<=2 | '2'<=2 | 'abc'<='abc' | 2<=1 | 'abc'<=2 | 1+3<=2+2 | null<=null | null<=1 |
+------+--------+--------------+------+----------+----------+------------+---------+
|    1 |      1 |            1 |    0 |        1 |        1 |       NULL |    NULL |
+------+--------+--------------+------+----------+----------+------------+---------+

5、小于运算符(<)

  • “<”运算符用来判断左边的操作数是否小于右边的操作数。如果小于,返回值为1,否则返回值为0。
  • “<”不能用于判断空值NULL

示例:

mysql> select 2<2,'2'<2,'abc'<'abc',2<1,'abc'<2,1+3<2+2,null<null,null<1;
+-----+-------+-------------+-----+---------+---------+-----------+--------+
| 2<2 | '2'<2 | 'abc'<'abc' | 2<1 | 'abc'<2 | 1+3<2+2 | null<null | null<1 |
+-----+-------+-------------+-----+---------+---------+-----------+--------+
|   0 |     0 |           0 |   0 |       1 |       0 |      NULL |   NULL |
+-----+-------+-------------+-----+---------+---------+-----------+--------+

6、大于或等于运算符(>=)

  • “>=”运算符用来判断左边的操作数是否大于或者等于右边的操作数。如果大于或者等于,返回值为1,否则返回值为0。
  • “>=”不能用于判断空值NULL。

示例:

mysql> select 2>=2,'2'>=2,'abc'>='abc',2>=1,'abc'>=2,1+3>=2+2,null>=null,null>=1;
+------+--------+--------------+------+----------+----------+------------+---------+
| 2>=2 | '2'>=2 | 'abc'>='abc' | 2>=1 | 'abc'>=2 | 1+3>=2+2 | null>=null | null>=1 |
+------+--------+--------------+------+----------+----------+------------+---------+
|    1 |      1 |            1 |    1 |        0 |        1 |       NULL |    NULL |
+------+--------+--------------+------+----------+----------+------------+---------+

7、大于运算符(>)

  • “>”运算符用来判断左边的操作数是否大于右边的操作数。如果大于,返回值为1,否则返回值为0。
  • “>”不能用于判断空值NULL。

示例:

mysql> select 2>2,'2'>2,'abc'>'abc',2>1,'abc'>2,1+3>2+2,null>null,null>1;
+-----+-------+-------------+-----+---------+---------+-----------+--------+
| 2>2 | '2'>2 | 'abc'>'abc' | 2>1 | 'abc'>2 | 1+3>2+2 | null>null | null>1 |
+-----+-------+-------------+-----+---------+---------+-----------+--------+
|   0 |     0 |           0 |   1 |       0 |       0 |      NULL |   NULL |
+-----+-------+-------------+-----+---------+---------+-----------+--------+

8、IS NULL和IS NOT NULL

  • IS NULL和ISNULL检验一个值是否为NULL。如果为NULL,返回值为1,否则返回值为0。
  • IS NOT NULL检验一个值是否为非NULL。如果是非NULL,返回值为1,否则返回值为0。

示例:

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 |
+--------------+---------------+-------------+----------------+

mysql> SELECT NULL IS NOT NULL, 10 IS NOT NULL;
+------------------+----------------+
| NULL IS NOT NULL | 10 IS NOT NULL |
+------------------+----------------+
|                0 |              1 |
+------------------+----------------+

9、BETWEEN AND

  • 基本语法格式如下
    • 假如expr大于或等于min且小于或等于max,则BETWEEN的返回值为1,否则返回值为0。
expr BETWEEN min AND max

示例:

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 |
+-------------------+-------------------+---------------------+

mysql> SELECT 'x' BETWEEN 'f' AND 'g', 'b' BETWEEN 'a' AND 'c';
+-------------------------+-------------------------+
| 'x' BETWEEN 'f' AND 'g' | 'b' BETWEEN 'a' AND 'c' |
+-------------------------+-------------------------+
|                       0 |                       1 |
+-------------------------+-------------------------+

10、LEAST

  • 在有两个或多个参数的情况下,返回最小值。假如任意一个自变量为NULL,则LEAST()的返回值为NULL。
    • 当参数中是整数或者浮点数时,LEAST将返回其中最小的值。
    • 当参数为字符串时,返回字母表中顺序最靠前的字符。
    • 当比较值列表中有NULL时,不能判断大小,返回值为NULL。
  • 基本语法格式如下
LEAST(值1, 值2, ..., 值n)    --值n表示参数列表中有n个值

示例:

mysql> SELECT least(2, 0), least(20.0,3.0,100.5), least('a','c','b'), least(10, NULL);
+-------------+-----------------------+--------------------+-----------------+
| least(2, 0) | least(20.0,3.0,100.5) | least('a','c','b') | least(10, NULL) |
+-------------+-----------------------+--------------------+-----------------+
|           0 |                   3.0 | a                  |            NULL |
+-------------+-----------------------+--------------------+-----------------+

11、GREATEST

  • 当有两个或多个参数时,返回值为最大值。假如任意一个自变量为NULL,则GREATEST()的返回值为NULL。
    • 当参数中是整数或者浮点数时,GREATEST将返回其中最大的值。
    • 当参数为字符串时,返回字母表中顺序最靠后的字符。
    • 当比较值列表中有NULL时,不能判断大小,返回值为NULL。
  • 基本语法格式如下
GREATEST(值1, 值2, ..., 值n)    --值n表示参数列表中有n个值

示例:

mysql> SELECT greatest(2, 0), greatest(20.0,3.0,100.5), greatest('a','c','b'), greatest(10, NULL);
+----------------+--------------------------+-----------------------+--------------------+
| greatest(2, 0) | greatest(20.0,3.0,100.5) | greatest('a','c','b') | greatest(10, NULL) |
+----------------+--------------------------+-----------------------+--------------------+
|              2 |                    100.5 | c                     |               NULL |
+----------------+--------------------------+-----------------------+--------------------+

12、IN和NOT IN

  • IN运算符用来判断操作数是否为IN列表中的其中一个值。如果是,返回值为1,否则返回值为0。
  • NOT IN运算符用来判断表达式是否为IN列表中的其中一个值。如果不是,返回值为1,否则返回值为0。

示例:

mysql> SELECT 2 IN (1,3,5,'thks'), 'thks' IN (1,3,5,'thks');
+---------------------+--------------------------+
| 2 IN (1,3,5,'thks') | 'thks' IN (1,3,5,'thks') |
+---------------------+--------------------------+
|                   0 |                        1 |
+---------------------+--------------------------+

mysql> SELECT 2 NOT IN (1,3,5,'thks'), 'thks' NOT IN (1,3,5,'thks');
+-------------------------+------------------------------+
| 2 NOT IN (1,3,5,'thks') | 'thks' NOT IN (1,3,5,'thks') |
+-------------------------+------------------------------+
|                       1 |                            0 |
+-------------------------+------------------------------+

13、LIKE

  • LIKE运算符用来匹配字符串。
  • 基本语法格式如下
    • 如果expr满足匹配条件,则返回值为1(TRUE);如果不匹配,则返回值为0(FALSE)。
    • 若expr或匹配条件中任何一个为NULL,则结果为NULL。
expr LIKE 匹配条件
  • LIKE运算符在进行匹配时,可以使用两种通配符:
    • (1) '%',匹配任何数目的字符(包括0个字符)。
    • (2) '_',只能匹配一个字符。

示例:

mysql> SELECT 'stud' LIKE 'stud', 'stud' LIKE 'stu_', 'stud' LIKE '%d', 'stud' LIKE 'st__', 'stud' LIKE '_tu_', 'stud' LIKE '_t_d', 'stud' LIKE NULL;
+--------------------+--------------------+------------------+--------------------+--------------------+--------------------+------------------+
| 'stud' LIKE 'stud' | 'stud' LIKE 'stu_' | 'stud' LIKE '%d' | 'stud' LIKE 'st__' | 'stud' LIKE '_tu_' | 'stud' LIKE '_t_d' | 'stud' LIKE NULL |
+--------------------+--------------------+------------------+--------------------+--------------------+--------------------+------------------+
|                  1 |                  1 |                1 |                  1 |                  1 |                  1 |             NULL |
+--------------------+--------------------+------------------+--------------------+--------------------+--------------------+------------------+

14、REGEXP

  • REGEXP运算符用来匹配字符串。
  • 基本语法格式如下
    • 如果expr满足匹配条件,返回1;如果不满足,则返回0。
    • 若expr或匹配条件任意一个为NULL,则结果为NULI。
expr REGEXP 匹配条件    --‘匹配条件’只要是expr的子串,就返回1
  • REGEXP运算符在进行匹配时,常用的有下面几种通配符:
    • (1) '^'匹配以该字符后面的字符开头的字符串。
    • (2) '$'匹配以该字符前面的字符结尾的字符串。
    • (3) '.'匹配任意一个单字符。
    • (4) '[...]'匹配在方括号内的任意一个字符。
      • 为了命名字符的范围,"[a-2]"匹配任意字母,"[0-9]"匹配任意数字。
      • 例如, "[abc]"匹配"a"、"b"或"c"
    • (5) '*'匹配零个或多个在它前面的字符。
      • 例如, "x*"匹配任意数量的'x,字符,"[0-9]*”匹配任意数量的数字,而“.*”匹配任意数量的任意字符。

示例:

mysql> SELECT 'ssky' REGEXP '^s', 'ssky' REGEXP 'y$', 'ssky' REGEXP 's', 'ssky' REGEXP '[as]';
+--------------------+--------------------+-------------------+----------------------+
| 'ssky' REGEXP '^s' | 'ssky' REGEXP 'y$' | 'ssky' REGEXP 's' | 'ssky' REGEXP '[as]' |
+--------------------+--------------------+-------------------+----------------------+
|                  1 |                  1 |                 1 |                    1 |
+--------------------+--------------------+-------------------+----------------------+

3、逻辑运算符

  • 在SQL中,所有逻辑运算符的求值所得结果均为TRUE,FALSE或NULL。在MysQL中,它们体现为1(TRUE)、0(FALSE)和NULL。
  • MySQL中的逻辑运算符

1、NOT或者!

  • 逻辑非运算符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 |
+--------+-----------+--------+----------+-----------+

mysql> SELECT ! 10, ! (1-1), ! -5, ! NULL, ! 1 + 1;
+------+---------+------+--------+---------+
| ! 10 | ! (1-1) | ! -5 | ! NULL | ! 1 + 1 |
+------+---------+------+--------+---------+
|    0 |       1 |    0 |   NULL |       1 |
+------+---------+------+--------+---------+

2、AND或者&&

  • 逻辑与运算符AND或者&&表示:                   #(两个操作数,有0为0;无0有null为null;其他为1
    • 当所有操作数均为非零值、并且不为NULL时,结果为1;
    • 当一个或多个操作数为0时,所得结果为0;
    • 其余情况返回值为NULL。

示例:

mysql> SELECT 1 AND -1, 1 AND 0, 1 AND NULL, 0 AND NULL;
+----------+---------+------------+------------+
| 1 AND -1 | 1 AND 0 | 1 AND NULL | 0 AND NULL |
+----------+---------+------------+------------+
|        1 |       0 |       NULL |          0 |
+----------+---------+------------+------------+

mysql> SELECT 1 && -1, 1 && 0, 1 && NULL, 0 && NULL;
+---------+--------+-----------+-----------+
| 1 && -1 | 1 && 0 | 1 && NULL | 0 && NULL |
+---------+--------+-----------+-----------+
|       1 |      0 |      NULL |         0 |
+---------+--------+-----------+-----------+

3、OR或者||

  • 逻辑或运算符OR或者||表示:                        #(两个操作数,有1为1;双0为0;其他为null
    • 当两个操作数均为非NULL值,且任意一个操作数为非零值时,结果为1,否则结果为0。
    • 当有一个操作数为NULL,且另一个操作数为非零值时,则结果为1,否则结果为NULL。
    • 当两个操作数均为NULL时,则所得结果为NULL。

示例:

mysql> SELECT -1 OR 0, 1 OR NULL, 1 OR 2, 1 OR -1 OR 0, NULL OR NULL, 0 OR NULL, 0 OR 0;
+---------+-----------+--------+--------------+--------------+-----------+--------+
| -1 OR 0 | 1 OR NULL | 1 OR 2 | 1 OR -1 OR 0 | NULL OR NULL | 0 OR NULL | 0 OR 0 |
+---------+-----------+--------+--------------+--------------+-----------+--------+
|       1 |         1 |      1 |            1 |         NULL |      NULL |      0 |
+---------+-----------+--------+--------------+--------------+-----------+--------+

mysql> SELECT -1 || 0, 1 || NULL, 1 || 2, 1 || -1 || 0, NULL || NULL, 0 || NULL, 0 || 0;
+---------+-----------+--------+--------------+--------------+-----------+--------+
| -1 || 0 | 1 || NULL | 1 || 2 | 1 || -1 || 0 | NULL || NULL | 0 || NULL | 0 || 0 |
+---------+-----------+--------+--------------+--------------+-----------+--------+
|       1 |         1 |      1 |            1 |         NULL |      NULL |      0 |
+---------+-----------+--------+--------------+--------------+-----------+--------+

4、XOR

  • 逻辑异或运算符XOR表示:                           #(两个操作数,有null为null;不同为1;相同为0。)
    • 当任意一个操作数为NULL时,返回值为NULL。
    • 对于非NULL的操作数,如果两个操作数都是非0值或者都是0值,则返回结果为0。
    • 如果一个为0值,另一个为非0值,返回结果为1。

示例:

mysql> 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、位运算符

  • MySQL中的位运算符

5、运算符的优先级

  • 运算符优先级由低到高排列

posted @ 2021-08-16 11:35  麦恒  阅读(287)  评论(0编辑  收藏  举报