MySQL运算符(逻辑运算符,比较运算符,位运算符)

MySQL的运算符包括: 算术运算符 (类似数学中的 + - * /),在此基础上增加取余,也就是模运算,比较运算符,逻辑运算符,非符号运算符,位运算符。 本次重点讲解 逻辑运算符,和比较运算符,非符号运算符当中的关键点,位运算符也比较困难,我会适当提及其中比较难掌握的部分。

算术运算符: 

运算符

名称

作用

+

加法运算符

计算两个值的和

-

减法运算符

计算两个值的差

*

乘法法运算符

计算两个数值的乘积

/ 或者 DIV

除法运算符

计算两个数值的商

% 或 MOD

减法运算符

计算两个数的余数

查询计算 100+0,100 - 0, 100 + 50 * 3,100 /(注释:除法的意思),33.5-20

SELECT 100+0,100-0,100+50*3,100/2,33.5-20
FROM DUAL;  # DUAL 伪表,我的理解是当进行某些运算不涉及到具体的表,用伪表也是可以,看起来比较规范,当然你不 from 也是可以。

乘法和除法的优先级相同(谁在前就做谁),进行先乘后除操作与先除后乘操作,得出的结果相同。 在数学运算中,0不能用作除数,在MySQL中,一个数除以0,返回结果为NULL。 

1.2取模运算(MOD / %)


SELECT 12 % 2 ,12 % 5,-12 MOD 5,12 MOD -5,-12 MOD -5
FROM DUAL ; #sql 用模运算符求结果,其结果的符号,与其被模数符号相同 

模运算测试结果:

 

 二. 比较运算符:

运算符

名称作用

作用

示例

<> 或 !=

不等于运算符

判断两个值或者字符串是否相等

SELECT C

FROM TABLE

WHERE A <> B

<=>

安全等于运算符

判断两个值,字符串是否相等,如果一个值是NULL,它会返回0,而不是NULL

SELECT C

FROM TABLE

WHERE A <=> B

<

小于运算符

判断前面的值字符串是否小于后面的值,字符串

<=

小于等于运算符

判断前面的值,字符串是否小于等于后面的值,字符串

 >

大于运算符

判断前面的值字符串是否大于后面的值,字符串

>=

大于等于运算符

判断前面的值,字符串是否大于等于后面的值,字符串

=

等于运算符

判断前面的值,字符串,等于后面的数值字符串

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

* (重点)安全等于运算符(<=>):判断符号的两边,如果都为NULL ,则返回1,如果其中一边 为NULL ,则会返回 0, 1 是真,0 是假 .

安全等于运算符和等号运算的异同:同,都是用来判断两个值是否相等,区别是,两个值或者字符串进行比较,如果一侧是NULL ,安全运算符(<=>)会返回0,而等号运算符(=)会返回NULL.

如果是下面情况会怎么办?

SELECT  ' ' <=> NULL , ' ' = NULL ,NULL = NULL ,NULL <=>NULL ,'4' <=> NULL ,

'4' = NULL,' ' = 4,' ' <=> 4 
FROM DUAL;

#进一步也证明了 ' ' (空) 不等于 NULL  , NULL没有具体的值,但不代表没内容。

在比较运算符中除了安全运算符 ( < = >) 外,其他比较运算符号中,两边的任意一侧出现 NULL , 都会返回NULL.

SELECT  last_name , salary, department_id ,commission_pct
 FROM employees
 WHERE   commission_pct <=> NULL  -- commission_pct  # 这'NULL' 很有特殊性,恰好 这个符号是专门对 NULL量身打造, 为什么我敢这样写,就是因为安全运算符(<=>), 如果不存在空值,我会返回0,我不会什么都不输出。,

 不等号运算符(!= 或 <>):判断符号两边的值字符串是否相等,

非符号运算符:

运算符

名称作用

作用

示例

IS NOT NULL

不为空运算符

判断值,字符串是否为空

SELECT B

FROM TABLE

WHERE A IS NOT NULL  

LEAST

最小值运算符

在多个值中返回最小值

SELECT D

FROM  TABLE

WHEREC LEAST(A,B)

GREATEST

最大值运算符

在多个值中返回最大值

BETWEEN AND

求区间范围值的运算符

求两个值之间的范围

IS NULL

为NULL运算符

判断一个值,字符串是否为空

IN

属于运算符

判断一个值是否为列表中的任一个值

NOT IN

不属于运算符

判断一个值是否不是一个列表中的任意一个值

LIKE

模糊匹配运算符

在索取关键字段的特别标记

REGEXP

正则表达式运算符

判断一个值是否符合正则表达式的规则

RLIKE

正则表达式运算符

判断一个值是否符合正则表达式的规则

1.IS NULL (判断一个值是否为空) \ IS NOT NULL(不为空) \ ISNULL (是空值)

判断 列表 EMPLOYEES  字段COMMISSION_PC 中是否存在空(NULL)
SELECT LAST_NAME,SALARY,COMMISSION_PCT
FROM EMPLOYEES
WHERE COMMISSION_PCT  IS NULL; 

2.最大值运算符(GREATEST) 语法格式为:GREATEST(值1,值2,...,值n)。

其中,n表示参数列表中有n个值。当有 两个或多个参数时,返回值为最大值。假如任意一个自变量为NULL,则GREATEST()的返回值为NULL。 

 

3. BETWEEN AND运算符 

BETWEEN运算符使用的格式通常为:

SELECT salary  FROM TABLE WHERE  BETWEEN 6000 AND 8000,

此时,当salary大于或等于6000,并且salary小于或等于8000时,结果为1,否则结果为0。 

 

WHERE salary   BETWEEN 8000 AND 6000
WHERE SALARY >=6000 &&(且) salary <= 8000; # 这样查询也是可以的 #  && = and

4. IN运算符 

IN运算符用于判断给定的值是否在列表中存在一个值,如果是则返回1 (如果给了1 你就看到符合要求的结果),否则返回0(NULL)。

SELECT last_name,salary,department_id
FROM employees
WHERE  department_id IN (10,20,30) 

执行结果:

5.LIKE 模糊匹配运算符(%)

适用场景: 查询姓名中有姓马的同学,姓名中第二字或者第三个数为 刚 ,不是一个准确的值,说查询谁,返回结果就是谁

查询last_name 中存在J这个字母。(释义,这个字母在哪个位置都可以只要存在于字段last_name 字段)

SELECT last_name
FROM employees
WHERE  last_name LIKE  '%J%'

 案例执行结果:

  模糊查询升级:(a%  姓名的第一个字母是a,%a,姓名的最后一个字母为 a)

 下列几种模糊查询工作中常用比较重要:

模糊查询首字母为 j ,(j%)

模糊查询末尾最后一个字母为j,(%j)

SELECT last_name
FROM employees
WHERE  last_name LIKE '%j';

模糊查询第二字母是 j的(_c%) 

 从要求出发,工作要求,姓名第一个字母为c(c%),姓名第二个为c(_c),姓名第三个为c(__c)在开头加上两个'_'下划线。

逻辑运算符:

1.逻辑非运算符 逻辑非(NOT或!)

 查询员工,工资不在6000 到8000的范围内,意思就是工资低于6000,高于8000

SELECT  last_name , salary, department_id ,commission_pct
 FROM employees
 #where  salary between  6000 and  8000
 WHERE  salary  BETWEEN  6000 AND  8000

员工工资在6000 到8000的范围内:

SELECT  last_name , salary, department_id ,commission_pct
 FROM employees
 #where  salary between  6000 and  8000
 WHERE  salary  NOT BETWEEN  6000 AND  8000

2.逻辑与运算符 逻辑与(AND或&&)

运算符是当给定的所有值均为非0值,并且都不为NULL时,返回 1;当给定的一个值或者多个值为0时则返回0;否则返回NULL。 

意思就是符号的两边条件 ,要满足,两个条件都必须满足,它与 逻辑或 (OR ,||)(只要满足一边就好)相对立。

查询部门编号为10,或者等于20

# or  and 
 SELECT last_name,salary,department_id
 FROM employees
 #where department_id = 10 or  department_id = 20

AND或&&

查询部门编号为30,而且工资还要高于8000
 SELECT last_name,salary
 FROM employees
 WHERE department_id = 30 AND salary > 8000

3.逻辑异或运算符 逻辑异或(XOR)

运算符是当给定的值中任意一个值为NULL时,则返回NULL;如果 两个非NULL的值都是0或者都不等于0时,则返回0;如果一个值为0,另一个值不为0时,则返回1

逻辑异或(XOR),最重要的用途在于 ,最后一句,如果一个值为0,另一个值不为0时,则返回1

什么意思呢? 以 WHERE department_id = 30 XOR salary > 8000为例, 要不,满足department_id = 30(部门编号 是30),alary > 8000(工资高于8000) 不满足,要不,不满足department_id = 30(部门编号 是30),alary > 8000(工资高于8000) 满足。

# XOP : "异或" 一边是真,一边是假
  SELECT last_name,salary,department_id
  FROM employees
 WHERE department_id = 30 XOR salary > 8000  只要满足一边就好,要不是 id = 30 ,不满足 salary > 8000 ,要不满足salary > 8000

 案例执行结果:

 位运算符:

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

详细解释我将在下次排序与分页中给大家讲到,今天讲的内容比较多。

总结:

大家要注意的是 运算符中,SELECT 语句用的最多,不同的运算符虽然写法不趋同,但是可以实现同样的效果,主要在后期的涉及到遇见大量数据在提高查询速度,减少冗余,要会选择合适的运算符。

(我也是学生,哪里需要帮忙记得米西米西我。)这个是我的学习成果,自己给自己讲,只要帮到大家就是我最开心的事。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值