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

文章目录

  • 一、比较运算符
    • (一)正则表达式
    • (二)模糊匹配 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 中则是语法错误,不兼容,推荐使用 <>
>大于
<小于
<=小于等于
>=大于等于
BETWEEN...AND...在两值之间>=min && <=max
NOT BETWEEN...AND...不在两值之间
IN在集合中
NOT IN不在集合中
<=>安全等于= 的区别在于当两个操作码均为 NULL 时,其所得值为 1 而不为 NULL,而当一个操作码为 NULL 时,其所得值为 0 而不为 NULL。
LIKE匹配某种模式,通常结合通配符使用。筛查出匹配某种模式的
NOT LIKE筛查出不匹配某种模式的,即过滤掉匹配某种模式的
REGEXPRLIKE正则式匹配
IS NULL为空
IS NOT NULL不为空
LEAST最小的当有两个或多个参数时,返回最小值
GREATEST最大的当有两个或多个参数时,返回最大值

(一)正则表达式

能够匹配到文本,则返回 1,如下所示:

mysql> 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 短语指明转义符号 \

二、单行比较运算符

单行比较运算符:><>=<==<><=>,单行比较运算符只能和一个值比较,即后面只能跟着“一个值”。

注意:SQL 语句中的等号 = 不是赋值表达式,而是相等比较表达式(比较表达式/相等关系式/相等表达式/相等关系表达式)

(一)安全等号 <=>

1. 和 = 的相同点

像常规等于号 = 一样,两个值进行比较,如果比较结果是真,即比较关系成立,两边的值相等,则返回结果值 1,比较结果是假,即比较关系不成立,两边的值不相等,则返回结果值 0。

'A' <=> 'B' 这个比较表达式,比较结果为假,返回 0
'a' <=> 'a' 这个比较表达式,比较结果为真,返回 1

2. 和 = 的不同点

<=>= 不同的是,空值 NULL 是没有任何意义的,所以等号 = 运算符不能把 NULL 作为有效的结果,任何数值与空值通过等号 = 比较的结果都是 NULL,但是很多时候我们并不希望得到这样的结果,所以可以使用安全等号 <=>

例如,'a' <=> NULL0NULL<=> NULL 得出 1。而等号 = 运算符规则是 'a' = NULL 结果是 NULL;甚至 NULL = NULL 结果也是 NULL

除了 <=>,还有两个其他的操作符用来处理某个值和 NULL 做比较,也就是 IS NULLIS NOT NULL。他们是 ANSI 标准中的一部分,因此也可以用在其他数据库中。而 <=> 只能在 Mysql 中使用。

你可以把 <=> 当作 Mysql 中的方言。

'a' IS NULL       ==> '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||ORXOR
3&&AND
4NOT
5BETWEEN、CASE、WHEN、THEN、ELSE
6=(比较运算)、<=>>=><=<<>!=ISLIKEREGEXPIN
7|
8&
9<<>>
10-(减号)、+
11*/DIV%MOD
12^
13-(一元减号)、(一元比特反转)
14!BINARYCOLLATE

可以看出,不同运算符的优先级是不同的。一般情况下,级别高的运算符优先进行计算,如果级别相同,MySQL 按表达式的顺序从左到右依次计算。

另外,在无法确定优先级的情况下,可以使用圆括号 () 来改变优先级,并且这样会使计算过程更加清晰。

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

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

相关文章

etf基金代码大全_银行ETF最新规模首超28亿元再创历史新高,近4个月资金净流入超12亿元...

2019年即将收官&#xff0c;A股大盘在12月份总体有了明显的回暖&#xff0c;拥有低估值优势的银行板块随之明显反弹。受此利好行情催化&#xff0c;资金持续涌入银行ETF&#xff0c;其基金份额、基金规模双双连创历史新高。据上交所12月26日公布的最新数据&#xff0c;银行ETF&…

java sendmessage函数_vc中SendMessage自定义消息函数用法实例

本文实例讲述了vc中SendMessage自定义消息函数用法&#xff0c;分享给大家供大家参考。具体如下&#xff1a;SendMessage的基本结构如下&#xff1a;SendMessage(HWND hWnd, //消息传递的目标窗口或线程的句柄。UINT Msg, //消息类别(这里可以是一些系统消息&#xff0c;也可以…

你为什么要关心equals和hashcode

等于和哈希码是每个Java对象的基本元素。 它们的正确性和性能对于您的应用程序至关重要。 但是&#xff0c;我们经常看到甚至有经验的程序员都忽略了类开发的这一部分。 在本文中&#xff0c;我将介绍一些与这两种非常基本的方法有关的常见错误和问题。 合同 提到的方法至关重…

java判断时间是否在时间段内_具有C语言基础,利用半年时间学习Java是否够用

首先&#xff0c;对于具有一定C语言基础的同学来说&#xff0c;利用半年的时间来学习Java会有一个比较系统的学习过程&#xff0c;通常也能够达到实习程序员&#xff0c;或者是助理程序员的水平&#xff0c;然后在技术团队中实践一段时间之后&#xff0c;从事专业开发岗位应该是…

Liao Wenxiong‘s thoughts

点击看看在想什么鬼

python3字符串截取_从python3中的字符串中获取特定文本

只是使用str.split()和赋值给变量,还有一个默认的第二个参数可以帮助您处理唯一的total/free avail场景def get_free_memory(ssh_obj, rawTrue):stdin, stdout, stderr ssh_obj.exec_command(free -h)mem_stats stdout.readlines()[1]if raw:mem_stats_formatted " &qu…

kafka connect_Kafka Connect在MapR上

kafka connect在本周的白板演练中&#xff0c;MapR的高级产品营销经理Ankur Desai描述了Apache Kafka Connect和REST API如何简化和提高在处理来自包括旧数据库或数据仓库在内的各种数据源的流数据时的敏捷性。 他还解释了当您使用MapR Streams与Kafka进行数据传输时&#xff0…

二维动画作品_「咻动画」二维动画制作中角色造型的设计要点

关于二维动画可能就算不是动画行业的小伙伴们都多多少少都有所了解&#xff0c;近年来其在宣传片制作上面越来越受用。不少企业抛开传统保守的宣传片表现形式转而尝试动画制作宣传片&#xff0c;我们都知道在动画制作从脚本策划到输出成片这个过程中是一个很复杂的制作流程&…

MySQL函数/数据库函数

文章目录一、单行函数&#xff08;一&#xff09;数学函数1. round(x)&#xff0c;返回离 x 最近的整数&#xff0c;即对 x 进行四舍五入2. round(x,y)&#xff0c;返回数值 x 保留到小数点后 y 位的值3. truncate(x,y)&#xff0c;返回数值 x 保留到小数点后 y 位的值4. abs(x…

java请求并行方案_让 Yar Java Client 支持执行并行请求,ExecutorService 的使用

官方 php 客户端文档如下Yar_Concurrent_Client {/* 属性 */static $_callstack ;static $_callback ;static $_error_callback ;/* 方法 */public static int call ( string $uri , string $method , array $parameters [, callable $callback ] )public static boolean loop …

javaone_JavaOne 2016后续活动

javaone我很高兴今年参加了JavaOne&#xff0c;我可以用一个词概括一下这一经验&#xff1a;辉煌。 对我来说&#xff0c;今年与往年相比有很大不同&#xff0c;因为我在周日有一个演讲要共同主持&#xff0c;而我剩下的一周时间都可以参加会议。 因此&#xff0c;我了解到在Ja…

c# redis 如何设置过期时间_Redis 过期时间与内存管理

http://www.redis.cn/commands/expire.htmlhttp://www.redis.cn/topics/lru-cache.html内存管理 当 Redis 作为缓存使用时&#xff08;此时缓存仅作为热点数据提高服务的访问性能&#xff09;&#xff0c;需要考虑内存的限制&#xff0c;以及如何随着业务的增长&#xff0c;仅保…

Oracle 数据库的子查询(关联子查询)

文章目录一、子查询结果返回一个值&#xff08;单列单行&#xff09;二、子查询结果返回多行&#xff08;单列多行&#xff09;三、子查询结果返回多列多行四、关联子查询&#xff08;一&#xff09;子查询执行顺序&#xff08;二&#xff09;exists 关键字五、子查询总结六、关…

大端字节序码流中取出2字节_产生字节码

大端字节序码流中取出2字节在这篇文章中&#xff0c;我们将看到如何为我们的语言生成字节码。 到目前为止&#xff0c;我们已经看到了如何构建一种语言来表达我们想要的东西&#xff0c;如何验证该语言&#xff0c;如何为该语言构建编辑器&#xff0c;但实际上我们还不能运行代…

python编写程序时必须遵守的规则被称为_Python程序设计方案习题与答案

《 Python 程序设计》习题与参考答案 第 1 章 基础知识 简单说明如何选择正确的 Python 版本。 答&#xff1a; 在选择 Python 的时候&#xff0c;一定要先考虑清楚自己学习 Python 的目的是什么&#xff0c;打算做哪 方面的开发&#xff0c;有哪些扩展库可用&#xff0c;这些扩…

python写520_用Python做一个520表白神器,值得收藏

本文最后给出了打包好的软件&#xff0c;无需安装Python环境和各种依赖&#xff0c;直接下载软件&#xff0c;解压后&#xff0c;双击exe文件即可使用。先来看一下具体的效果。运行程序。用Python做一个520表白神器&#xff0c;值得收藏点击「选择图片」 选择JPG/JPGE/PNG三种中…

Oracle/MySQL数据库查询结果集的集合操作(合集/交集/差集)

文章目录集合操作的前提条件集合操作合集 union合集 union 和 union all 的比较交集 intersect差集 minus集合操作的前提条件 1.两个结果集必须结构相同。 当列的个数、列的顺序、列的数据类型一致时 , 我们称这两个结果集结构相同 2.只有结构相同的结果集才能做集合操作 集…

python有道自动翻译_利用python写一个有道翻译的脚本

废话不多说&#xff0c;直接上代码import urllib.request import urllib.parse import json content input("请输入要翻译的内容&#xff1a;") url http://fanyi.youdao.com/translate?smartresultdict&smartresultrule&smartresultugc&sessionFromn…

为什么java抗并发_用最通熟易懂的话说明,为什么要使用java并发编程

老早之前的计算机只有一个处理器&#xff0c;而 一个处理器在同一时刻只能处理一条指令 &#xff0c;换句话说&#xff0c;我们的代码需要一行一行的按顺序被计算机执行&#xff0c;计算机只能把一个程序完整的执行完&#xff0c;然后再执行第二个程序。所以计算机专业的同学们…

java ee的小程序_Java EE调度程序

java ee的小程序Java EE应用程序服务器具有本机调度支持&#xff0c;并且在大多数应用程序中&#xff0c;不需要包括外部依赖项&#xff0c;例如著名的Quartz调度程序库。 Java EE 6和7完整配置文件上提供的Java EE 6计时器服务为我们提供了许多选项来定义调度间隔&#xff0c…