SQL运算符(复盘)

发布于 2022-05-11  7.24k 次阅读


一,算术运算符

算术运算符顾名思义就是计算用的,再学习编程语言的基础都会涉及,SQL也不例外

运算符
名称
作用
示例
+
加法运算符
求和
SELECT A+B
-
减法运算符
求差
SELECT A-B
*
乘法运算符
求乘
SELECT A*B
/或DIV
除法运算符
求除
SELECT A/B 或者 
SELECT A DIV B
%或MOD
求模(取余)运算符
求余
SELECT A%B 或者
SELECT A MOD B
1,加减运算符

例1:

SELECT 100,100+0,100-0,100+50,100+50-30,100+35.9,100-81.23 FROM qrtz_locks;

注意:

  1. 一个整数类型的值对整数进行加法和减法操作,结果还是一个整数
  2. 一个整数类型的值对浮点数进行加法和减法操作,结果是一个浮点数
  3. 加法和减法的优先级相同,进行先加后减操作与进行先减后加操作结果一样
  4. 在java中,+的左右两边如果有字符串,那么作用就是拼接。但是在MySQL中+只表示数值相加,如果遇到非数值类型,先尝试转成数值,如果转失败就按0计算

例2:

/*1,假如是java就是10020,但MySQL会减'20'隐式转换为数值类型进行相加
  2,'a'不能转化为数值类型,就进行为0
  3,任何数值与null进行运算,结果都为null*/
SELECT 100+'20',100+'a',100+NULL FROM qrtz_locks;

2,乘除运算符

例:

SELECT 100,100*1,100*1.0,100/1.0,100/2,100+2 * 6 / 3,100 DIV 0 FROM qrtz_locks;

注意:

  1. 一个数乘以整数1和除以整数1仍然为原数
  2. 一个数乘以浮点数1和除以浮点数1会变成浮点数,但数值不变
  3. 一个数除以整数后,不管是否能除尽都为浮点数
  4. 一个数除以另一个数,除不尽时,结果为一个浮点数,并保留到小数点后4位
  5. 乘法和除法优先级相同,进行先乘后除和先除后乘操作,得到的结果都相同
  6. 在数学运算中0不能位除数,Mysql中一个数除以0结果为null

3,取模运算符

例:

SELECT 12 % 7,-45 MOD 6 FROM qrtz_locks;

 二,比较运算符

  比较运算符用来对左边的操作数和右边的操作数进行比较,比较的结果为真则返回1,比较的结果为假则返回0,其他情况则返回NULL

  比较运算符被用来作为SELECT查询语句的条件来使用,返回符号条件的结果记录

一,通用的比较运算符

运算符 名称 作用 示例
= 等于运算符 判断两个值,字符串或表达式是否相等 SELECT * FROM TABLE WHERE A=B
<=> 安全等于运算符 安全的判断两个值,字符串或表达式是否相等 SELECT * FROM TABLE WHERE A <=> B
<>(!=) 不等于运算符 判断两个值,字符串,表达式是否不相等 SELECT * FROM TABLE WHERE A <> B

SELECT * FROM TABLE WHERE A != B

< 小于运算符 判断前面的值,字符串,表达式是否小于后面的值,字符串 SELECT * FROM TABLE WHERE A <B
<= 小于等于运算符 判断前面的值,字符串,表达式是否小于或等于后面的值,字符串 SELECT * FROM TABLE WHERE A <= B
> 大于运算符 判断前面的值,字符串,表达式是否大于后面的值,字符串 SELECT * FROM TABLE WHERE A > B
>= 大于等于运算符 判断前面的值,字符串,表达式是否大于或等于后面的值,字符串 SELECT * FROM TABLE WHERE A >= B

1,等于运算符

等号运算符(=)判断等号两边的值,字符串或表达式是否相等,如果相等则返回1,不相等则返回0

使用等号运算符时,遵循的规则:

  • 如果等号两边的值,字符串或表达式都为字符串,则MySQL会按照字符串进行比较,其比较的是每个字符串中字符的ASCII编码是否相等
  • 如果等号两边的值都是整数,则MySQL会按照整数来比较两个值的大小
  • 如果等号两边的值是一个整数,另一个是字符串,则MySQL会将字符串转化为数字进行比较
  • 如果字符串隐式转化为数值类型不成功,如"a"不能转化为数值,MySQL则将它设置为零
  • 如果等号两边的值,字符串或表达式中有一个NULL,则比较结果为NULL

例:

SELECT 1=1,1='1',1=0,(1+2)=(7-4),1='a',0='a','abc'='abc','a'='c',1=NULL,NULL=NULL FROM qrtz_locks;

2,安全等于运算符

安全等于运算符(<=>)与等于运算符(=)作用是相似的,唯一的区别是"<=>"可以用来对NULL进行判断

  • 当两个操作数均为NULL时,其返回值为1,而不为NULL,当一个操作数为NULL时,其返回值为0

 例:

SELECT 1<=>2,1<=>'1',1<=>'a','a'<=>'b',1<=>NULL,NULL<=>NULL;

3,大于,小于,不等于……运算符

规则:和等于时差不多

  • 当运算符左右两边的值都为字符串类型,MySQL会按字符串进行比较,其比较字符的ASICC码
  • 如果运算符左右两边的值都是整数,则MySQL会按照整数来比较两个值的大小
  • 如果运算符两边的值是一个整数,另一个是字符串,则MySQL会将字符串转化为数字进行比较
  • 如果字符串隐式转化为数值类型不成功,如"a"不能转化为数值,MySQL则将它设置为零
  • 如果字符串两边的值,字符串或表达式中有一个NULL,则比较结果为NULL

例:

SELECT 'AS'>'a','a'<8,'4'>3,'a'<>'b',1<NULL,NULL>=NULL;

二,内置比较关键字

MySQL除了提供通用的符号类型的比较符外,还内置很多了非符号类型的比较关键字

关键字 名称 作用 示例
IS NULL 为空关键字 判断值,字符串或表达式是否为空 SELECT B FROM TABLE WHERE A IS NULL
IS NOT NULL 不为空关键字 判断值,字符串或表达式是否不为空 SELECT B FROM TABLE WHERE A IS NOT NULL
LEAST 最小关键字 在多个值中返回最小值 SELECT D FROM TABLE WHERE C LEAST(A,B)
GREATEST 最大值关键字 在多个值中返回最大值 SELECT D FROM TABLE WHERE C GREATEST(A,B)
BETWEEN …  AND… 两值之间的关键字 判断一个值是否在两个值之间 SELECT D FROM TABLE WHERE C BETWEEN A AND B
NOT BETWEEN…  AND… 非两值之间的关键字 判断一个值是否不在两个值之间 SELECT D FROM TABLE WHERE C NOT BETWEEN A AND B
IN(…) 属于关键字 判断一个值是否为列表中的任意一个值 SELECT D FROM TABLE WHERE C IN(A,B)
NOT IN(…) 不属于关键字 判断一个只是否不属于列表中的任意值 SELECT D FROM TABLE WHERE C NOT IN(A,B)
LIKE 模糊匹配关键字 判断一个值是否符号模糊匹配规则 SELECT D FROM TABLE WHERE A LIKE B
REGEXP 正则表达式关键字 判断一个字符是否符号正则表达式规则 SELECT D FROM TABLE WHERE A REGEXP B
RLIKE 正则表达式关键字 判断一个值是否符号正则表达式 SELECT D FROM TABLE WHERE A RLIKE B

1,NULL值的判断

SELECT 'a' IS NULL,NULL IS NOT NULL,'a' IS NOT NULL;

2,between取区间值

  • between 100 and 200和100<=a<=200是一样
SELECT * FROM users_resulttable WHERE userId  BETWEEN 1 AND 5;

3,IN包含

SELECT * FROM users_resulttable WHERE userId IN(1,2,3);

4,like模糊匹配

  • %:代表任意多个字符
  • _:代表一个不确定的字符
  • \:转义符

例:

#imdbId字段以14开头
SELECT * FROM users_resulttable WHERE imdbId LIKE "14%";

5,正则匹配

格式:

  • expr REGEXP 匹配条件 
  • expr RLIKE 匹配条件

通配符:

  • ^:匹配以该字符后面的字符开头的字符串
  • $:匹配以该字符前面的字符结尾的字符串
  • .:匹配任意单个字符
  • […]:匹配在括号内的任意字符,例如:[abc]匹配a,b,c,[a-z]匹配a到z的所有字符
  • *:匹配零个或者多个在它前面的字符
  • ……

例:

SELECT "SpringCloudAlibaba" REGEXP "^S","Netty" REGEXP 'y$';

三,逻辑运算符

逻辑运算符主要用于判断表达式的真假,在MySQL中,逻辑运算符的返回结果为1(真),0(假),NULL

MySQL支持一下四种逻辑运算符:

运算符 作用 示例
NOT 或 ! 逻辑非 SELECT NOT A
AND 或 && 逻辑与 SELECT A AND B

SELECT A && B

OR 或 || 逻辑或 SELECT A OR B

SELECT A && B

XOR 逻辑异或 SELECT A XOR B

优先级:

数字越大优先级越高

1,逻辑非

SELECT * FROM users_resulttable WHERE userId  NOT BETWEEN 1 AND 7;

2,逻辑与

SELECT * FROM users_resulttable WHERE userId IN(1,2,3) AND rating NOT IN(5.0,2.0,4.0,3.0);
SELECT * FROM users_resulttable WHERE userId IN(1,2,3) && rating NOT IN(5.0,2.0,4.0,3.0);

3,逻辑或

SELECT * FROM users_resulttable WHERE userId IN(4,6) OR rating IN(2.5)
SELECT * FROM users_resulttable WHERE userId IN(4,6) || rating IN(2.5)

四,位运算符

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

MySQL运算符如下:

运算符 作用 示例
& 按位与 SELECT A & B
| 按位或 SELECT A | B
^ 按位异或 SELECT A ^ B
~ 按位取反 SELECT ~A
>> 按位右移 SELECT A >> 2
<< 按位左移 SELECT B << 2

注:A >> 2就相当于A除以2的2次方,B << 4 就相当于B乘以2的4次方

例1:

SELECT 12 & 5,12 | 5,12 ^ 5;

例2:

#2<<2 = 2*2^3; 4>>2 = 4/2^2 
SELECT 2<<3,4>>2;

 


路漫漫其修远兮,吾将上下而求索