MySQL-运算符的使用解析

news2024/10/5 20:23:32

运算符的使用解析

  • 1 运算符概述
  • 2 算数运算符
  • 3 比较运算符
    • 3.1 等于运算符(=)
    • 3.2 安全等于运算符(<==>)
    • 3.3 不等于运算符(<> 或者 !=)
    • 3.4 小于等于运算符(<=)
    • 3.5 小于运算符(<)
    • 3.6 大于等于运算符(>=)
    • 3.7 大于运算符(>)
    • 3.8 IS NULL 和 IS NOT NULL
    • 3.9 BETWEEN AND 运算符
    • 3.10 LEAST 运算符
    • 3.11 GREATST 运算符
    • 3.12 IN,NOT IN 运算符
    • 3.13 LIKE 运算符
    • 3.14 REGEXP 运算符
  • 4 逻辑运算符
    • 4.1 NOT 或者 !
    • 4.2 AND 和 &&
    • 4.3 OR 或者 ||
    • 4.4 XOR 运算符
  • 5 位运算符
    • 5.1 位或运算符(|)
    • 5.2 位与运算符(&)
    • 5.3 位异或运算符(^)
    • 5.4 位左移运算符(<<)
    • 5.5 位右移运算符
    • 5.6 位取反运算符 (~)
  • 6 运算符的优先级

MySQL支持各种类型的运算符,这些运算符可以用于处理数字、日期和字符串等不同类型的数据。

1 运算符概述

MySQL支持各种类型的运算符,这些运算符可以用于处理数字、日期和字符串等不同类型的数据。以下是一些MySQL支持的常用运算符:

算术运算符:加号(+)、减号(-)、乘号(*)、除号(/),求余(%)

比较运算符:等于(=)、不等于(<>)、小于(<)、大于(>)、小于等于(<=)、大于等于(>=)、LIKE(用于模式匹配)、IN(用于多个值比较)和BETWEEN(用于范围比较),IS NULL,GREATEST,LEAST,LIKE,REGEXP等。

逻辑运算符:TURE(1),FALSE(0),还有逻辑非(NOT 或者 !),逻辑与(AND 或者 &&),逻辑或(OR 或者 ||),逻辑异或(XOR)。

位运算符:包括位与(&),位或(|),位非(~),位异或(^),左移(<<),右移(>>)。

2 算数运算符

算数运算符是SQL中最基本的运算符。
在这里插入图片描述
创建测试表,进行加减法和乘除法的运算测试。

mysql> CREATE TABLE tab_08 ( num INT);
Query OK, 0 rows affected (0.02 sec)

mysql> INSERT INTO tab_08 value(64);
Query OK, 1 row affected (0.01 sec)

mysql> SELECT num, num+10, num-3+5, num+5-3, num+36.5 FROM tab_08;
+------+--------+---------+---------+----------+
| 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)

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

mysql> SELECT num, num / 0, num %0 FROM tab_08;
+------+---------+--------+
| num  | num / 0 | num %0 |
+------+---------+--------+
|   64 |    NULL |   NULL |
+------+---------+--------+
1 row in set, 2 warnings (0.00 sec)

结果可以看到,对NUM进行运算的时候,加减法的运算时候,加减的优先级别相同,先加后减,先减后加结果相同。在进行除法运算的时候,64 无法被 3 整除,MySQL对结果保留到了小数点后四位,除以 3 的余数为 1 ,所以 num%3 的结果为 1 ,除法中 0 的除法没有意义,返回结果会为NULL。

3 比较运算符

比较运算符的结果总是 1,0 或者是NULL,比较运算符会经常在SELECT查询子句中使用,来满足查询的条件。
在这里插入图片描述

3.1 等于运算符(=)

等于运算符可以用于比较不同数据类型的值,例如字符型、数字型、日期型等,只要这两个值的数据类型相同,就可以进行比较。
需要注意的是,在比较字符型的值时,SQL 通常是区分大小写的。如果想要忽略大小写,可以使用 LOWER() 或 UPPER() 函数进行转换。

mysql> SELECT 1=0, '2'=2, 2=2,'0.02'=0, 'b'='b', (1+3) = (2+2),NULL=NULL;
+-----+-------+-----+----------+---------+---------------+-----------+
| 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)

如果两个数值的数据类型相同,则直接进行比较。

如果两个数值的数据类型不同,则会将其中一个数值转换为另一个数值的数据类型,然后再进行比较。通常,将数字转换为字符型时,SQL 会将数字转换为一个字符串,然后逐位比较字符串的每一个字符;将字符转换为数字时,SQL 会尽可能将字符转换为数字,然后进行比较。

如果其中一个数值为 NULL,则比较的结果为 UNKNOWN。这是因为在 SQL 中,NULL 表示未知或不存在的值,所以无法判断 NULL 和其他值之间的大小关系或相等关系。

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

和等于运算符有相同的比较效果,但是安全等于运算符可用于判断NULL值。两个均为NULL返回为 1,不为NULL,一个为NULL,返回为 0,不为NULL。

mysql> SELECT 1<=>0, '2'<=>2, 2<=>2,'0.02'<=>0, 'b'<=>'b', (1+3) <=> (2+1),NULL<=>NULL;
+-------+---------+-------+------------+-----------+-----------------+-------------+
| 1<=>0 | '2'<=>2 | 2<=>2 | '0.02'<=>0 | 'b'<=>'b' | (1+3) <=> (2+1) | NULL<=>NULL |
+-------+---------+-------+------------+-----------+-----------------+-------------+
|     0 |       1 |     1 |          0 |         1 |               0 |           1 |
+-------+---------+-------+------------+-----------+-----------------+-------------+
1 row in set (0.00 sec)

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

不等于运算符是 SQL 中常用的另一种比较运算符,表示两个值不相等。在 SQL 中,通常有两种不等于运算符:<> 和 !=。这两种不等于运算符的使用方法完全相同,可以判断数字,字符串,表达式等。 不相等返回为 1 ,相等返回为 0 。

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

3.4 小于等于运算符(<=)

用于比较两个值大小的运算符之一,用于判断第一个值是否小于或等于第二个值。不能用于判断空值NULL。小于等于返回 1,否则返回 0

mysql> SELECT 'good'<='god', 1<=2, 4<=4, 5.5<=5, (1+3) <= (2+1),NULL<=NULL;
+---------------+------+------+--------+----------------+------------+
| 'good'<='god' | 1<=2 | 4<=4 | 5.5<=5 | (1+3) <= (2+1) | NULL<=NULL |
+---------------+------+------+--------+----------------+------------+
|             0 |    1 |    1 |      0 |              0 |       NULL |
+---------------+------+------+--------+----------------+------------+
1 row in set (0.01 sec)

3.5 小于运算符(<)

用于比较两个值大小的运算符之一,用于判断第一个值是否小于第二个值。不能用于判断空值NULL。小于返回 1,否则返回 0

mysql> SELECT 'good'<'god', 1<2, 4<4, 5.5<5, (1+3) < (2+1),NULL<NULL;
+--------------+-----+-----+-------+---------------+-----------+
| 'good'<'god' | 1<2 | 4<4 | 5.5<5 | (1+3) < (2+1) | NULL<NULL |
+--------------+-----+-----+-------+---------------+-----------+
|            0 |   1 |   0 |     0 |             0 |      NULL |
+--------------+-----+-----+-------+---------------+-----------+
1 row in set (0.00 sec)

3.6 大于等于运算符(>=)

SQL 中用于比较两个值大小的运算符之一,用于判断第一个值是否大于等于第二个值。不能用于判断空值NULL。大于等于返回 1,否则返回 0。

mysql> SELECT 'good'>='god', 1>=2, 4>=4, 5.5>=5, (1+3) >= (2+1),NULL>=NULL;
+---------------+------+------+--------+----------------+------------+
| 'good'>='god' | 1>=2 | 4>=4 | 5.5>=5 | (1+3) >= (2+1) | NULL>=NULL |
+---------------+------+------+--------+----------------+------------+
|             1 |    0 |    1 |      1 |              1 |       NULL |
+---------------+------+------+--------+----------------+------------+
1 row in set (0.00 sec)

3.7 大于运算符(>)

SQL 中用于比较两个值大小的运算符之一,用于判断第一个值是否大于第二个值。不能用于判断空值NULL。大于返回 1,否则返回 0。

mysql> SELECT 'good'>'god', 1>2, 4>4, 5.5>5, (1+3) > (2+1),NULL>NULL;
+--------------+-----+-----+-------+---------------+-----------+
| 'good'>'god' | 1>2 | 4>4 | 5.5>5 | (1+3) > (2+1) | NULL>NULL |
+--------------+-----+-----+-------+---------------+-----------+
|            1 |   0 |   0 |     1 |             1 |      NULL |
+--------------+-----+-----+-------+---------------+-----------+
1 row in set (0.00 sec)

3.8 IS NULL 和 IS NOT NULL

IS NULL 和 IS NOT NULL 是 SQL 中用于判断一个值是否为空(NULL)的运算符。
IS NULL 如果为NULL返回 1,否则返回 0。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)

3.9 BETWEEN AND 运算符

用于判断一个值是否在两个指定值之间的运算符。语法格式为:

value BETWEEN low AND high

其中,value 表示要判断的值,low 和 high 分别表示区间的下限和上限。
如果在区间内,包含low 和 high 值,返回为1,否则返回 0。

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

mysql> SELECT  'x' BETWEEN 'f' AND 'g', 'b' BETWEEN 'a' AND 'c';
+-------------------------+-------------------------+
| 'x' BETWEEN 'f' AND 'g' | 'b' BETWEEN 'a' AND 'c' |
+-------------------------+-------------------------+
|                       0 |                       1 |
+-------------------------+-------------------------+
1 row in set (0.00 sec)

3.10 LEAST 运算符

用于在多个值中选择最小值的函数。

其语法格式为:

LEAST(value1, value2, ...)

其中,value1、value2、… 表示要比较的值,可以是任意数量的值。
需要注意的是,如果给 LEAST 函数传递的参数中有一个为空(NULL),那么结果也会为空。如果要避免这种情况,可以使用 COALESCE 函数将空值转换为一个默认值。例如:

– 选择两个数值中较小的一个,如果其中一个为空,则选择另一个

SELECT LEAST(5, COALESCE(NULL, 3));
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 |
+------------+-----------------------+--------------------+----------------+
1 row in set (0.00 sec)

3.11 GREATST 运算符

GREATEST 是 SQL 中用于在多个值中选择最大值的函数。

其语法格式为:

GREATEST(value1, value2, ...)

其中,value1value2、… 表示要比较的值,可以是任意数量的值。
需要注意的是,如果给 GREATEST 函数传递的参数中有一个为空(NULL),那么结果也会为空。如果要避免这种情况,可以使用 COALESCE 函数将空值转换为一个默认值。例如:

-- 选择两个数值中较大的一个,如果其中一个为空,则选择另一个
SELECT GREATEST(5, COALESCE(NULL, 3));
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 |
+---------------+--------------------------+-----------------------+-------------------+
1 row in set (0.00 sec)

3.12 IN,NOT IN 运算符

IN 运算符用来判断是否为IN 列表中的其中一个值,如果是返回为1,否则返回 0。NOT IN和IN则是相反的结果。
IN 的语法格式为:

value IN (value1, value2, ...)

其中,value 表示要进行测试的值,(value1, value2, …) 表示要进行比较的一组值。NOT IN 的语法格式与 IN 很相似,只需在 IN 前面加上 NOT 即可。

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 |
+---------------------+--------------------------+
1 row in set, 2 warnings (0.00 sec)

3.13 LIKE 运算符

用于在 SQL 查询中进行模式匹配。它与通配符符号一起使用,来匹配字符串中的部分内容。

LIKE 运算符的语法格式为:

value LIKE pattern

其中,value 表示要进行匹配的字符串,pattern 表示要匹配的模式。可以使用 % 和 _ 通配符来表示任意多个字符和任意单个字符。
需要注意的是,在使用 LIKE 运算符时,匹配字符串的时候区分大小写。如果要忽略大小写,可以使用 LOWER 或 UPPPER 函数将字符串转换为小写或大写再进行匹配。

mysql> SELECT 'stud' LIKE 'stud', 'stud' LIKE 'stu_','stud' LIKE '%d','stud' LIKE 't_ _ _', 's' LIKE NULL;
+--------------------+--------------------+------------------+----------------------+---------------+
| 'stud' LIKE 'stud' | 'stud' LIKE 'stu_' | 'stud' LIKE '%d' | 'stud' LIKE 't_ _ _' | 's' LIKE NULL |
+--------------------+--------------------+------------------+----------------------+---------------+
|                  1 |                  1 |                1 |                    0 |          NULL |
+--------------------+--------------------+------------------+----------------------+---------------+
1 row in set (0.00 sec)

3.14 REGEXP 运算符

REGEXP 运算符用于在 SQL 查询中进行正则表达式匹配。它与正则表达式的语法一起使用,来匹配字符串中的部分内容。

REGEXP 运算符的语法格式为:

value REGEXP pattern

其中,value 表示要进行匹配的字符串,pattern 表示要匹配的正则表达式。正则表达式中可以使用各种元字符和限定符来表达不同的匹配模式。
1)‘^’ 匹配以该字符后边字符开头的字符串。
2)‘$’ 匹配以该字符后边字符结尾的字符串。
3)‘.’ 匹配任意一个单字符
4)‘[…] ’ 匹配括号内的任何字符,如[abcd] 匹配a,b,c,d。也可使用范围,[a-z] 匹配任意字母,[0-9]匹配任意数字。
5)’* ’ 匹配零个或者多个在他前面的字符。比如 ‘a*’,是匹配任何数量的a字符,'* '则是匹配任何数据量的任何字符。

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.00 sec)

4 逻辑运算符

所有逻辑运算符所求的结果均为TRUE,FALSE或者NULL,mysql中体现为1,0,和NULL
在这里插入图片描述

4.1 NOT 或者 !

逻辑非运算符NOT或者 ! ,表示当前操作数为 0 ,所得值为1,当操作数为非 0 值时候,所得值为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, !(1-1), !-5, ! NULL, ! 1 + 1;
+-----+--------+-----+--------+---------+
| !10 | !(1-1) | !-5 | ! NULL | ! 1 + 1 |
+-----+--------+-----+--------+---------+
|   0 |      1 |   0 |   NULL |       1 |
+-----+--------+-----+--------+---------+
1 row in set, 5 warnings (0.00 sec)

4.2 AND 和 &&

逻辑与运算符 AND 或者 &&表示当所有操作数均为非零值并且不为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 |
+----------+---------+------------+------------+
1 row in set (0.00 sec)

mysql> 
mysql>  SELECT  1 && -1,1 && 0,1 && NULL, 0 && NULL;
+---------+--------+-----------+-----------+
| 1 && -1 | 1 && 0 | 1 && NULL | 0 && NULL |
+---------+--------+-----------+-----------+
|       1 |      0 |      NULL |         0 |
+---------+--------+-----------+-----------+
1 row in set, 4 warnings (0.00 sec)

4.3 OR 或者 ||

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

mysql> SELECT  0 OR 0 OR 0, 1 OR 2,1 OR NULL, 0 OR NULL, NULL OR NULL;
+-------------+--------+-----------+-----------+--------------+
| 0 OR 0 OR 0 | 1 OR 2 | 1 OR NULL | 0 OR NULL | NULL OR NULL |
+-------------+--------+-----------+-----------+--------------+
|           0 |      1 |         1 |      NULL |         NULL |
+-------------+--------+-----------+-----------+--------------+
1 row in set (0.00 sec)

mysql>  SELECT  1 || -1 || 0, 1 || 2,1 || NULL, 0 || NULL, NULL || NULL;
+--------------+--------+-----------+-----------+--------------+
| 1 || -1 || 0 | 1 || 2 | 1 || NULL | 0 || NULL | NULL || NULL |
+--------------+--------+-----------+-----------+--------------+
|            1 |      1 |         1 |      NULL |         NULL |
+--------------+--------+-----------+-----------+--------------+
1 row in set, 6 warnings (0.00 sec)

4.4 XOR 运算符

逻辑异或运算符XOR,表示当任意一个操作数为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 |
+---------+---------+---------+------------+---------------+
1 row in set (0.00 sec)

最后一个 1 XOR 1 为 0 ,之后再和 1 进行运算,结果为1.

5 位运算符

位运算符是在二进制数上进行计算的运算符,位运算符会先将操作数变为二进制数,然后进行位运算,最后将结果从二进制变回十进制。
在这里插入图片描述

5.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)

10 的二进制数值为 1010,15 的二进制数值为 1111,按位或运算之后,结果为 1111,即整数15
9的二进制数值为 1001,4 的二进制数值为 0100,2的二进制数值为 0010,按位或运算之后,结果为 1111,即整数 15。其结果为一个64 位无符号整数。

5.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)

10的二进制数值为 1010,15 的二进制数值为 1111,按位与运算之后,结果为 1010,即整数10
9的二进制数值为 1001,4 的二进制数值为 0100,2的二进制数值为 0010,按位与运算之后,结果为 0000,即整数0。其结果为一个64位无符号整数。

5.3 位异或运算符(^)

位异或运算的实质是将参与运算的两个数据按照对应的二进制数逐位进行逻辑异或运算。对应位的二进制数不同时,对应位的结果才为 1。如果两个对应位数都为0或者都为 1,则对应位的结果为 0。

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

10 的二进制数值为 1010,15 的二进制数值为 1111,按位异或运算之后,结果为 0101,即整数5
1的二进制数值为 0001,0的二进制数值为 0000,按位异或运算之后,结果为 0001
1和1本身二进制位完全相同,因此结果为 0。

5.4 位左移运算符(<<)

位左移运算符<<使指定的二进制值的所有位都左移指定的位数。左移指定位数之后,左边高位的数值将被移出并丢弃,右边低位空出的位置用 0补齐。
语法格式为:

expr<<n

其中,n 指定值expr要移位的位数。

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

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

5.5 位右移运算符

位右移运算符>>使指定的二进制值的所有位都右移指定的位数。右移指定位数之后,右边低位的数值将被移出并丢弃,左边高位空出的位置用 0 补齐。
语法格式为:

expr>>n

其中,n 指定值expr 要移位的位数。

mysql> SELECT 1>>1, 16>>2;
+------+-------+
| 1>>1 | 16>>2 |
+------+-------+
|    0 |     4 |
+------+-------+
1 row in set (0.00 sec)

1的二进制值为 0000 0001,右移 1位之后变成000 0000,即十进制整数 0
16 的二进制值为0001 0000 右移两位之后变成 0000 0100,即变成十进制的 4。

5.6 位取反运算符 (~)

位取反运算的实质是将参与运算的数据按照对应的二进制数逐位反转,即 1 取反后变为 0、0取反后变为 1。

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

在逻辑运算 5& ~1 中,由于位取反运算符 ~ 的级别高于位与运算符 & ,因此先对 1进行取反操作,取反之后,除了最低位为 0外其他位都为 1,即1110,然后与十进制数值 5 进行与运算,结果为 0100,即整数 4。

6 运算符的优先级

运算符的优先级别决定了不同的运算符在表达式中的计算的先后顺序。
在这里插入图片描述
可以看到,不同运算符的优先级是不同的。一般情况下,级别高的运算符先进行计算,如果级别相同,MySOL 按表达式的顺序从左到右依次计算。当然,在无法确定优先级的情况下,可以使用圆括号()来改变优先级,并且这样会使计算过程更加清晰。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/456142.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Jmeter基础教程合集

环境搭建 1.安装java 8.0以上版本 2.下载jmeter并安装。安装参考网址&#xff1a;https://blog.csdn.net/wust_lh/article/details/86095924 3.打开JMeter中bin目录下面的jmeter.bat文件即可打开JMeter了&#xff0c;打开的时候会有两个窗口&#xff0c;Jmeter的命令窗口和Jme…

【数据结构】哈希表——闭散列 | 开散列(哈希桶)

&#x1f431;作者&#xff1a;一只大喵咪1201 &#x1f431;专栏&#xff1a;《数据结构与算法》 &#x1f525;格言&#xff1a;你只管努力&#xff0c;剩下的交给时间&#xff01; 哈希表 &#x1f3af;哈希&#x1f94a;直接定址法&#x1f94a;除留余数法&#x1f94a;哈…

CHAPTER 3: 《A FRAMEWORK FOR SYSTEM DESIGN INTERVIEWS》第3章 《面试系统设计框架》

CHAPTER 3: A FRAMEWORK FOR SYSTEM DESIGN INTERVIEWS 你刚刚获得了梦寐以求的理想公司的现场面试机会。招聘协调员给你发送了当天的日程安排。浏览列表&#xff0c;你会感觉很好直到你的目光落在这个面试环节——系统设计面试。 系统设计面试通常很吓人。它可以像“设计一个…

【Redis】缓存同步

【Redis】缓存同步 文章目录 【Redis】缓存同步1. 数据同步策略2. 异步通知策略3. Canal3.1 Canal客户端3.2 监听器 1. 数据同步策略 缓存数据同步的常见方式有三种&#xff1a; 设置有效期&#xff1a;给缓存设置有效期&#xff0c;到期后自动删除&#xff0c;再次查询时更新…

网络系统集成实验(四)| 系统集成路由器基本配置

目录 一、前言 二、实验目的 三、实验需求 四、实验步骤与现象 &#xff08;一&#xff09;静态路由 Step1&#xff1a;构建实验拓扑如下 Step2&#xff1a;IP地址配置如下 Step3&#xff1a;配置静态路由 Step4&#xff1a;验证 &#xff08;二&#xff09;NAT配置—…

OpenPCDet复现过程记录

0、前言 OpenPCDet项目之前我就复现过&#xff0c;一个很优秀的项目&#xff0c;这几天又需要用到这个项目&#xff0c;再次复现遇到了不少问题&#xff0c;特此记录复现的流程 1、环境准备 1.1、前置条件 以下是我安装的版本 CUDA 11.3CUDNN 8.2.1 CUDA和CUDNN安装可以参考…

Yolo v1 笔记

个人不太懂的点 1.损失函数的4与5项 【论文解读】Yolo三部曲解读——Yolov1 - 知乎 https://www.youtube.com/watch?vNkFENlEb4kM&t672s 训练阶段&#xff1a; C_i 预测值&#xff1a;由网络输出出来7*7*30中第一个bbox和第二个bbox的置信度confidence C_i^hat 标签值…

(六)大数据实战——hadoop集群实现免密登录和文件互传

前言 本节内容我们主要介绍一下hadoop集群服务器之间实现免密登录和文件互传的功能&#xff0c;这样更加方便我们使用hadoop服务器实现服务器之间的相互登录和文件的相互传输。集群之间的访问不在需要授权就可以实现相互访问。 正文 SSH免密登录 ①分别在hadoop101、hadoop1…

后台管理系统之登录方案记录

需求&#xff1a;根据当前环境的不同&#xff0c;请求不同的 BaseUrl 解决&#xff1a;在根目录中新建.env.development与.env.production连个文件&#xff0c;进行配置&#xff1a; # .env.production ENV production# base api VUE_APP_BASE_API /prod-api# .env.develop…

目标检测——YOLOv8(十四)

简介&#xff1a; YOLOv8 是 ultralytics 公司在 2023 年 1月 10 号开源的 YOLOv5 的下一个重大更新版本&#xff0c;目前支持图像分类、物体检测和实例分割任务。不过 ultralytics 并没有直接将开源库命名为 YOLOv8&#xff0c;而是直接使用 ultralytics 这个词&#xff0c;原…

nodejs+vue 学分置换管理系统

在大学四年参加了各类竞赛后&#xff0c;我发现参加各类比赛存在报名过程过于繁琐&#xff0c;评比过程不透明和易出错等问题&#xff0c;所以在定题时与老师商讨后确定设计和实现基于nodejs的高校竞赛信息发布系统&#xff0c;帮助老师发布竞赛内容&#xff0c;便于同学们线上…

24考研数学每日一题(带解析)2023年12月1日-2023年12月31日

title: 24考研数学每日一题Latex版&#xff08;带解析&#xff09; date: 2023-01-28 11:49:26 plugins: mathjax tags:学习考研 categories:考研数学 题目来源于武老师的每日一题&#xff0c;答案是自己做的&#xff0c;不太严谨&#xff0c;仅供参考 2022年12月1日 知识点…

区块浏览器Tokenview受邀参加2023香港Web3嘉年华,用科技与善良打造全球区块浏览器Web3生态

区块浏览器Tokenview受邀参加2023香港Web3嘉年华,用科技与善良打造全球区块浏览器Web3生态 4月12-15日&#xff0c;由万向区块链实验室、HashKey Group 联合举办、W3ME 承办的「2023 香港 Web3 嘉年华」在香港会议展览中心举行。该活动被称为香港有史以来规模最大的加密领域活…

无人机飞行控制实验平台

无人机在研制过程中需要不断地进行飞行测试&#xff0c;而测试的过程不是万无一失的&#xff0c;飞行过程中发生任何错误都有可能会导致无人机的损毁或破坏&#xff0c;更严重地甚至会造成外界伤害。 基于此我们推出了无人机的三旋转自由度 (3-DOF) 飞行平台测试系统&#xff…

学成在线笔记+踩坑(4)——【媒资管理模块】上传图片,Nacos+Gateway+MinIO

导航&#xff1a; 【黑马Java笔记踩坑汇总】JavaSEJavaWebSSMSpringBoot瑞吉外卖SpringCloud黑马旅游谷粒商城学成在线牛客面试题 目录 1. 媒资管理模块简介 1.1 模块介绍 1.2 业务流程 1.2.1 上传课程图片 1.2.2 上传视频 1.2.3 处理视频 1.2.4 审核媒资 1.2.5 绑定媒…

龙讯旷腾材料计算大赛启动,打怪升级赢大奖

龙讯旷腾2023计算大赛第一期电催化计算大赛启动 选拔赛截止日期5月21日 决赛截止日期5月28日 大赛亮点 免费培训、灵活安排时间参与 多次机会冲关决赛奖励金 已购/未购用户均可参加 使用Mcloud参赛送500元机时 计算大赛——看视频学习还能赢奖金&#xff1f; 材料计算…

Java学习-MySQL-事务

Java学习-MySQL-事务 ACID原则&#xff1a;原子性、一致性、隔离性、持久性 原子性&#xff08;Atomicity&#xff09; 两个步骤要么一起成功&#xff0c;要么一起失败&#xff0c;不可能只成功一个。 举例&#xff1a; A账户400元&#xff0c;B账户600元&#xff0c;A向B转…

Cloudera的新变化:混合数据平台、端到端AI、实时数据处理

作者 | 宋慧 出品 | CSDN云计算 数据的价值和技术应用&#xff0c;获得了全行业的关注、认可和重视。 不过&#xff0c;数据赛道百家争鸣&#xff0c;数据系统的技术与行业方案众多&#xff0c;对于开发团队和用户来说&#xff0c;其实仍然需要耗费大量调研和分析的时间。 近日…

notepad++自动缩进功能

支持java等格式化 代码编辑器Notepad是程序员必备的文本编辑器&#xff0c;该软件软件功能非常强大&#xff0c;界面简洁明晰、操作方便快捷&#xff0c;设计得很人性化。Notepad官方下载支持27种编程语言&#xff0c;通吃C,C ,Java ,C#, XML, HTML, PHP,JS 等。NotePad是一个…

虹科分享 | NetFlow数据能够为网络故障排除提供什么? | 网络流量监控

NetFlow是网络设备中标准化的功能&#xff0c;用于收集流量测量值并将其导出到另一个系统进行分析。对该流数据的分析通知网络管理器网络是如何执行的以及其他使用细节。例如&#xff0c;流量分析可以通过跟踪IP和突出显示异常&#xff08;如过度使用流量&#xff09;来帮助解决…