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 4 NOT 5 BETWEEN, CASE, WHEN, THEN, ELSE 6 =, <=>, >=, >, <=, <, <>, !=, IS, LIKE, REGEXP, IN 7 | 8 & 9 <<, >> 10 -, + 11 *, /, DIV, %, MOD 12 ^ 13 - (unary minus), ~ (unary bit inversion) 14 ! 实际上,很少有人能将这些优先级熟练记忆,很多情况下我们都是用 "()" 来将需要优先的操作括起来,这样既起到了优先的作用,又使得其他用户看起来更易于理解。
MySQL 中的运算符的更多相关文章
- 4.Mysql中的运算符
4.Mysql中的运算符运算符用来连接表达式.运算符包括:算术运算符.比较运算符.逻辑运算符.位运算符. 4.1 算术运算符算术运算符包括加(+).减(-).乘(*).除(/).取模(%,MOD) 5 ...
- MySQL中的运算符和时间运算
一.MySQL中运算符的分类 算术运算符,比较运算符,逻辑运算符,按位运算符 二.算数运算符 符号 作用 + 加法 - 减法 * 乘法 ...
- MySQL中的运算符
一.算法运算符: (A) 除法运算和模运算中,如果除数为0,非法,返回结果为NULL. 二.比较运算符: (A) 比较结果不确定是返回NULL. (B) 比较运算符可以用于比较数字.字符串和表达式.数 ...
- Mysql 中Left/Right join on后面and和where条件查询的差异-Mysql SQL运算符是有优先级
一.Mysql中Left/Right join on后面and和where条件查询的差异 1.建两张测试表,一张商户定义表.一张商户操作状态明细表 1)商户定义表 CREATE TABLE hope. ...
- MySQL中的while、repeat、loop循环
循环一般在存储过程和存储函数中使用频繁,这里只给出最简单的示例 while delimiter $$ create procedure test_while() begin declare sum i ...
- mysql常见的运算符及使用
mysql中有4类运算符,它们是: 算术运算符 比较运算符 逻辑运算符 位操作运算符 算术操作符 算术操作符是SQL中最基本的操作运算符,主要有一下几种运算符: +(加). -(减). *(乘). / ...
- mysql中的null字段值的处理及大小写问题
在MySQL中,NULL字段的处理,需要注意,当在处理查询条件中有NULL,很有可能你得到的值不是想要的,因为,在MySQL中,判断NULL值相等(=)或者不等(!=)都会返回false.主要出现在常 ...
- 如何理解 MySQL 中的 <=> 操作符?
问题 : 我在看以前的一个开发者的代码时看到 WHERE p.name <=> NULL 在这个查询语句中 <=>符号是什么意思啊?是不是和 =号是一样啊?还是一个语法错误啊? ...
- thinkphp中的内置操作数据库与mysql中的函数汇总
8.4.4 Model类getModelName() 获取当前Model的名称getTableName() 获取当前Model的数据表名称switchModel(type,vars=array()) ...
随机推荐
- TF:利用TF的train.Saver将训练好的variables(W、b)保存到指定的index、meda文件—Jason niu
import tensorflow as tf import numpy as np W = tf.Variable([[2,1,8],[1,2,5]], dtype=tf.float32, name ...
- CVE-2011-0762环境搭建与EXP利用
CVE-2011-0762 vsftpd拒绝服务漏洞 危害:通过发送特殊构造的数据包.利用漏洞使应用程序崩溃 条件:连接上vsftpd才能发包 发现时间:2011-03-01 需求:找到EXP运行发送 ...
- Python 合并两个列表的多种方式,合并两个字典的多种方式
一.合并列表 1.最简单的,使用+连接符: >>> a = [1,2,3] >>> b = [7,8,9] >>> a + b [1, 2, 3, ...
- CLR Via第一 章 知识点整理(4) FCL、CTS、CLI和CLS
FCL(Framework Class Library) Framework 类库: FCL是 .net Framework 包含的一组DLL程序集的统称,FCL包含了提供了很多功能,关于这一部分没有 ...
- js获取http请求响应头信息
var req = new XMLHttpRequest(); req.open('GET', document.location, false); req.send(null); var heade ...
- ES2018正则表达式更新
如果你是一个初学者,这篇文章可以拓展你对正则表达式用法的理解,不过建议你先阅读一些正则表达式入门文章,比如经典的<正则表达式30分钟入门教程>.如果你对正则表达式有一定的认识,那么这篇文章 ...
- BZOJ.1109.[POI2007]堆积木Klo(DP LIS)
BZOJ 二维\(DP\)显然.尝试换成一维,令\(f[i]\)表示,强制把\(i\)放到\(a_i\)位置去,现在能匹配的最多数目. 那么\(f[i]=\max\{f[j]\}+1\),其中\(j& ...
- 潭州课堂25班:Ph201805201 django框架 第九课 模型补充 博客小案例 (课堂笔记)
聚合查询: 分组查询: annotate() 方法 例:查询某学院学生人数,(一对多查询) 以字典的形式输出 annotate(统计 ‘关联学生字段 出现的次,).字典形式(键,值) 例:查询每项课程 ...
- mongoose+koa2 按照_id更新多条数据,删除数组中的字段,然后添加新的字段,$pull和$or结合使用
await model.photo.update({ _id: { $in: photoIdsParam } }, { $pull: { customerIds: { code: custCode, ...
- NOIP考纲总结+NOIP考前经验谈
首先来一张图,很直观(截止到2012年数据) 下面是收集的一些,我改了一下 红色加粗表示特别重要,必须掌握 绿色加粗表示最好掌握,可能性不是很大,但是某些可以提高程序效率 高精度 a.加法 b.减法 ...