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 = 20AND或&&
查询部门编号为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 语句用的最多,不同的运算符虽然写法不趋同,但是可以实现同样的效果,主要在后期的涉及到遇见大量数据在提高查询速度,减少冗余,要会选择合适的运算符。
(我也是学生,哪里需要帮忙记得米西米西我。)这个是我的学习成果,自己给自己讲,只要帮到大家就是我最开心的事。