您当前的位置: 首页 >  sql

liaowenxiong

暂无认证

  • 2浏览

    0关注

    1171博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

MySQL查询条件中的各种运算符/操作符说明

liaowenxiong 发布时间:2020-08-05 15:07:19 ,浏览量:2

文章目录
  • 一、比较运算符
    • (一)正则表达式
    • (二)模糊匹配 LIKE
    • (三)转义字符
  • 二、单行比较运算符
    • (一)安全等号
      • 1. 和 = 的相同点
      • 2. 和 = 的不同点
    • (二)区间运算符 between...and...
    • (三)为空 is null
    • (四)不为空 is not null
    • (五)空字符串
    • (六)二进制数比较 binary
  • 三、多行比较运算符
    • (一)> ALL
    • (二)> ANY
    • (三)在集合中 IN
    • (四)不在集合中 NOT IN
  • 四、算术运算符
    • (一)除 /
    • (二)求商 DIV
    • (三)幂运算 power
    • (四)取模
  • 五、逻辑运算符
    • (一)逻辑与
    • (二)逻辑或
    • (三)非
    • (四)异或
  • 六、位运算符
    • (一)按位右移
    • (二)按位异或
    • (三)按位取反
  • 七、运算符优先级

一、比较运算符

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

符号描述备注=等于binary二进制数比较例如,使用 = 比较时,前面加上 binary,则会比较两者的二进制数!=不等于在 SQL 的一些版本中,该操作符可被写成 != 在任何 SQL 中都起作用,但是 != 在 sql2000 中则是语法错误,不兼容,推荐使用 >大于=min && select 'beijing' regexp 'jing'; +-------------------------+ | 'beijing' regexp 'jing' | +-------------------------+ | 1 | +-------------------------+ 1 row in set (0.00 sec)

注:‘beijing’ 是被匹配的源字符串,‘jing’ 是正则表达式。

mysql> select 'beijing' regexp 'xi';
+-----------------------+
| 'beijing' regexp 'xi' |
+-----------------------+
|                     0 |
+-----------------------+
1 row in set (0.00 sec)
(二)模糊匹配 LIKE
  1. % 表示匹配任意数量(包含 0 个)的任意字符,跟 like 配合使用
  2. _ 下划线表示匹配任意 1 字符
select * from emp_xxx where lower(job) like '%sales%';
select * from emp_xxx where job like '_a%';
(三)转义字符

查询表名以 S_ 开头的表的总数:

select count(*) from user_tables where table_name like 'S\_%' escape '\';

说明: _ 是特殊符号,需要转义成普通字符。如果要查询的数据中有特殊字符(比如 _%),在做模糊查询时,需要加上反斜杠 \ 符号表示转义,并且用 escape 短语指明转义符号 \

二、单行比较运算符

单行比较运算符:>= 'a' NULL 'a' IS NOT NULL ==> NOT('a' NULL)

据此,你可以把下面的查询语句的条件改的更具移植性一点:

where t1.name is null
(二)区间运算符 between…and…
select * from emp_xxx where salary between 5000 and 10000;
select * from emp_xxx where salary not between 5000 and 8000;
(三)为空 is null
select * from emp_xxx where bonus is null;
(四)不为空 is not null
select * from emp_xxx where bonus is not null;
(五)空字符串

查询字段 bonus 为空串的所有记录信息:

select * from emp_xxx where bonus = '';
(六)二进制数比较 binary
mysql> select binary 'b'='B';
+----------------+
| binary 'b'='B' |
+----------------+
|              0 |
+----------------+
1 row in set (0.00 sec)

mysql> select 'b'='B';
+---------+
| 'b'='B' |
+---------+
|       1 |
+---------+
1 row in set (0.00 sec)

说明:使用 = 比较字符时,默认不区分大小写,所以小写 b 和大写 B,相等比较结果为真,返回 1;如果前面加上 binary,则是比较两者的二进制数,肯定是不同的,所以比较结果为假,返回 0。

三、多行比较运算符

多行比较运算符:> ALL> ANY< ALL< ANYIN,可以和多个值比较,后面可以跟着“多个值”

(一)> ALL
select ename from emp_xxx
where salary > ALL(500,1000,2500);
(二)> ANY
select ename from emp_xxx
where salary > ANY(500,1000,2500);
(三)在集合中 IN
select * from emp_xxx where job in ('Manager' , 'Analyst');
(四)不在集合中 NOT IN
select * from emp_xxx where depno not in (20 , 30);

注意: not in(列表)的列表中有 null 值 , 将没有结果返回,所以列表中不能含有 nullin(列表)则没有关系。

四、算术运算符 运算符作用+加法-减法*乘法/除法运算,商如果是小数,最多会保留小数点的后四位,且会四舍五入DIV除法运算,整除,商如果是小数,只保留整数部分,且不会四舍五入%求余MOD取模,余数和模数实际运算是有区别的,详见《求余和取模的计算公式》power幂运算、乘方运算

注意:

  1. 在除法运算和模运算中,如果除数为0,将是非法除数,返回结果为NULL。
  2. 加法运算时,若含有字符串,而字符串以数字开头,转换成数字,如下:
mysql> select 1+'5a';
+--------+
| 1+'5a' |
+--------+
|      6 |
+--------+
1 row in set, 1 warning (0.00 sec)
  1. 加法运算时,若含有字符串,而字符串以字母开头的,转换成 0,如下所示:
mysql> select 1+'a5';
+--------+
| 1+'a5' |
+--------+
|      1 |
+--------+
1 row in set, 1 warning (0.00 sec)
(一)除 /
mysql> select 8/3;
+--------+
| 8/3    |
+--------+
| 2.6667 |
+--------+
(二)求商 DIV
mysql> select 8 div 3;
+---------+
| 8 div 3 |
+---------+
|       2 |
+---------+
1 row in set (0.00 sec)
(三)幂运算 power
mysql> select power(2,3);
+------------+
| power(2,3) |
+------------+
|          8 |
+------------+
1 row in set (0.00 sec)
(四)取模
mysql> select 10 MOD 4;
+----------+
| 10 MOD 4 |
+----------+
|        2 |
+----------+
五、逻辑运算符

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

运算符号作用NOT!逻辑非AND&&逻辑与OR||逻辑或XOR^逻辑异或 (一)逻辑与

&& 或者 AND 是“与”运算的两种表达方式。如果所有数据不为0且不为空值(NULL),则结果返回1;如果存在任何一个数据为0,则结果返回0;如果存在一个数据为NULL且没有数据为0,则结果返回NULL。“与”运算符支持多个数据同时进行运算。

mysql> select 2 and 0;
+---------+
| 2 and 0 |
+---------+
|       0 |
+---------+
1 row in set (0.00 sec)

mysql> select 2 and 3;
+---------+
| 2 and 3 |
+---------+
|       1 |
+---------+
1 row in set (0.00 sec)
(二)逻辑或

两者只要有一个数是大于 0 的,表达式就是真,返回 1。如下所示:

mysql> select 2 or 0;
+--------+
| 2 or 0 |
+--------+
|      1 |
+--------+

mysql> select 0 or 0;
+--------+
| 0 or 0 |
+--------+
|      0 |
+--------+

mysql> select 1 || 0;
+--------+
| 1 || 0 |
+--------+
|      1 |
+--------+

mysql> select null or 1;
+-----------+
| null or 1 |
+-----------+
|         1 |
+-----------+
(三)非
mysql> select not 1;
+-------+
| not 1 |
+-------+
|     0 |
+-------+

mysql> select !0;
+----+
| !0 |
+----+
|  1 |
+----+
(四)异或

两者的值相同,则表示假,返回 0;两者的值不同,则表示真,返回 1。这里的值是指 1 或者 0。

mysql> select 1 xor 1;
+---------+
| 1 xor 1 |
+---------+
|       0 |
+---------+

mysql> select 0 xor 0;
+---------+
| 0 xor 0 |
+---------+
|       0 |
+---------+

mysql> select 1 xor 0;
+---------+
| 1 xor 0 |
+---------+
|       1 |
+---------+

mysql> select 1 ^ 0;
+-------+
| 1 ^ 0 |
+-------+
|     1 |
+-------+
六、位运算符

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

运算符号作用&按位与|按位或^按位异或~按位取反右移 (一)按位右移
mysql> select 3>>1;
+------+
| 3>>1 |
+------+
|    1 |
+------+
(二)按位异或
mysql> select 3^5;
+-----+
| 3^5 |
+-----+
|   6 |
+-----+
(三)按位取反
mysql> select ~18446744073709551612;
+-----------------------+
| ~18446744073709551612 |
+-----------------------+
|                     3 |
+-----------------------+
七、运算符优先级 优先级由低到高排列运算符1=(赋值运算)、:=2||ORXOR3&&AND4NOT5BETWEEN、CASE、WHEN、THEN、ELSE6=(比较运算)、>=>
关注
打赏
1661566967
查看更多评论
0.0462s