4.运算符

1.算术运算符

1)加法与减法运算符:
①加法运算符:SELECT A+B
②减法运算符:SELECT A-B
③一个整数类型的值对整数进行加法和减法操作,结果还是一个整数;
④一个整数类型的值对浮点数进行加法和减法操作,结果是一个浮点数;
⑤加法和减法的优先级相同,进行先加后减操作与进行先减后加操作的结果是一样的;
⑥在Java中,+的左右两边如果有字符串,那么表示字符串的拼接。但是在MySQL中+只表示数值相加。如果遇到非数值类型,先尝试转成数值,如果转失败,就按0计算。(补充:MySQL中字符串拼接要使用字符串函数CONCAT()实现)

SELECT 100, 100 + 0, 100 - 0, 100 + 50, 100 + 50 -30, 100 + 35.5, 100 - 35.5 ;

在这里插入图片描述
2)乘法与除法运算符:
①乘法运算符:SELECT A*B
②除法运算符:SELECT A/B 或者 SELECT A DIV B
③一个数乘以整数1和除以整数1后仍得原数;
④一个数乘以浮点数1和除以浮点数1后变成浮点数,数值与原数相等;
⑤一个数除以整数后,不管是否能除尽,结果都为一个浮点数;
⑥一个数除以另一个数,除不尽时,结果为一个浮点数,并保留到小数点后4位;
⑦乘法和除法的优先级相同,进行先乘后除操作与先除后乘操作,得出的结果相同。
⑧在数学运算中,0不能用作除数,在MySQL中,一个数除以0为NULL。

SELECT 100, 100 * 1, 100 * 1.0, 100 / 1.0, 100 / 2,100 + 2 * 5 / 2,100 /3, 100 DIV 0 ;

在这里插入图片描述
3)求模(求余)运算符:
①求模运算符:SELECT A%B 或者 SELECT A MOD B

SELECT 12 % 3, 12 MOD 5 ;

在这里插入图片描述

2.比较运算符

1)等号运算符:
(1)等号运算符(=)判断等号两边的值、字符串或表达式是否相等,如果相等则返回1,不相等则返回0。
(2)在使用等号运算符时,遵循如下规则:
①如果等号两边的值、字符串或表达式都为字符串,则MySQL会按照字符串进行比较,其比较的是每个字符串中字符的ANSI编码是否相等。
②如果等号两边的值都是整数,则MySQL会按照整数来比较两个值的大小。
③如果等号两边的值一个是整数,另一个是字符串,则MySQL会将字符串转化为数字进行比较。
④如果等号两边的值、字符串或表达式中有一个为NULL,则比较结果为NULL。

#查询salary=10000,注意在Java中比较是==
SELECT employee_id,salary 
FROM employees 
WHERE salary = 10000;

2)安全等于运算符:
①安全等于运算符(<=>)与等于运算符(=)的作用是相似的,唯一的区别是‘<=>’可以用来对NULL进行判断。在两个操作数均为NULL时,其返回值为1,而不为NULL;当一个操作数为NULL时,其返回值为0,而不为NULL。

#查询commission_pct等于0.40
SELECT employee_id,commission_pct 
FROM employees 
WHERE commission_pct <=> 0.40;

3)不等于运算符:
①不等于运算符(<>和!=)用于判断两边的数字、字符串或者表达式的值是否不相等,如果不相等则返回1,相等则返回0。不等于运算符不能判断NULL值。如果两边的值有任意一个为NULL,或两边都为NULL,则结果为NULL。

SELECT 1 <> 1, 1 != 2, 'a' != 'b', (3+4) <> (2+6), 'a' != NULL, NULL <> NULL;

在这里插入图片描述

4)空运算符:

空运算符(IS NULL或者ISNULL)判断一个值是否为NULL,如果为NULL则返回1,否则返回0。

#查询manager_id为空的last_name
SELECT last_name, manager_id
FROM   employees
WHERE  manager_id IS NULL;

5)非空运算符:
①非空运算符(IS NOT NULL)判断一个值是否不为NULL,如果不为NULL则返回1,否则返回0。

#查询commission_pct不等于NULL
SELECT employee_id,commission_pct 
FROM employees 
WHERE commission_pct IS NOT NULL;

6)最小值运算符:
①语法格式为:LEAST(值1,值2,…,值n)。其中,“值n”表示参数列表中有n个值。在有两个或多个参数的情况下,返回最小值。

SELECT LEAST (1,0,2), LEAST('b','a','c'), LEAST(1,NULL,2);

在这里插入图片描述

7)最大值运算符:
②语法格式为:GREATEST(值1,值2,…,值n)。其中,n表示参数列表中有n个值。当有两个或多个参数时,返回值为最大值。假如任意一个自变量为NULL,则GREATEST()的返回值为NULL。

SELECT GREATEST(1,0,2), GREATEST('b','a','c'), GREATEST(1,NULL,2);

在这里插入图片描述

8)BETWEEN AND运算符:
①BETWEEN运算符使用的格式通常为SELECT D FROM TABLE WHERE C BETWEEN A AND B,此时,当C大于或等于A,并且C小于或等于B时,结果为1,否则结果为0。

#查询salary在2500到3500之间的last_name
SELECT last_name, salary
FROM   employees
WHERE  salary BETWEEN 2500 AND 3500;

9)IN运算符:
①IN运算符用于判断给定的值是否是IN列表中的一个值,如果是则返回1,否则返回0。如果给定的值为NULL,或者IN列表中存在NULL,则结果为NULL。

#查询manager_id是100,101,201的employee_id和last_name
SELECT employee_id, last_name, salary, manager_id
FROM   employees
WHERE  manager_id IN (100, 101, 201);

10)NOT IN运算符:
①NOT IN运算符用于判断给定的值是否不是IN列表中的一个值,如果不是IN列表中的一个值,则返回1,否则返回0。

SELECT 'a' NOT IN ('a','b','c'), 1 NOT IN (2,3);

在这里插入图片描述

11)LIKE运算符:
①LIKE运算符主要用来匹配字符串,通常用于模糊匹配,如果满足条件则返回1,否则返回0。如果给定的值或者匹配条件为NULL,则返回结果为NULL。

SELECT NULL LIKE 'abc', 'abc' LIKE NULL; 

在这里插入图片描述

②LIKE运算符通常使用如下通配符:

“%”:匹配0个或多个字符。
“_”:只能匹配一个字符。

SELECT job_id
FROM   jobs
WHERE  job_id LIKE ‘IT\_%‘;
SELECT job_id
FROM   jobs
WHERE  job_id LIKE ‘IT$_%‘ escape ‘$‘;

③遇到字符中有特殊字符。可以使用下面对特殊字符的保留:
ESCAPE:回避特殊符号的。
(1)将[%]转为[ %]、[]转为[ ],然后再加上[ESCAPE ‘$’]即可。

SELECT job_id
FROM   jobs
WHERE  job_id LIKE ‘IT$_%‘ escape ‘$‘; #要查的字符开头是IT$

(2)如果使用\表示转义,要省略ESCAPE。如果不是\,则要加上ESCAPE。

SELECT job_id
FROM   jobs
WHERE  job_id LIKE ‘IT\_%‘; #要查的字符开头是IT_

12)REGEXP运算符:
①REGEXP运算符用来匹配字符串,语法格式为:expr REGEXP 匹配条件。如果expr满足匹配条件,返回1;如果不满足,则返回0。若expr或匹配条件任意一个为NULL,则结果为NULL。
(1)‘^’匹配以该字符后面的字符开头的字符串。
(2)‘$’匹配以该字符前面的字符结尾的字符串。
(3)‘.’匹配任何一个单字符。
(4)“[…]”匹配在方括号内的任何字符。例如,“[abc]”匹配“a”或“b”或“c”。为了命名字符的范围,使用一个‘-’。“[a-z]”匹配任何字母,而“[0-9]”匹配任何数字。
(5)‘’匹配零个或多个在它前面的字符。例如,“x”匹配任何数量的‘x’字符,“[0-9]”匹配任何数量的数字,而“”匹配任何数量的任何字符。

SELECT 'shkstart' REGEXP '^s', 'shkstart' REGEXP 't$', 'shkstart' REGEXP 'hk';

在这里插入图片描述

3.逻辑运算符

1)逻辑非(NOT)
①逻辑非(NOT或!)运算符表示当给定的值为0时返回1;当给定的值为非0值时返回0;当给定的值为NULL时,返回NULL。

#查询job_id不是'IT_PROG', 'ST_CLERK', 'SA_REP'的姓名
SELECT last_name, job_id
FROM   employees
WHERE  job_id NOT IN ('IT_PROG', 'ST_CLERK', 'SA_REP');

2)逻辑与(AND)
①逻辑与(AND或&&)运算符是当给定的所有值均为非0值,并且都不为NULL时,返回1;当给定的一个值或者多个值为0时则返回0;否则返回NULL。

#查询基本薪资大于等于10000且job_id为MAN的员工号
SELECT employee_id, last_name, job_id, salary
FROM   employees
WHERE  salary >=10000
AND    job_id LIKE '%MAN%';

3)逻辑或(OR)
①逻辑或(OR或||)运算符是当给定的值都不为NULL,并且任何一个值为非0值时,则返回1,否则返回0;当一个值为NULL,并且另一个值为非0值时,返回1,否则返回NULL;当两个值都为NULL时,返回NULL。

#查询基本薪资不在9000-12000之间的员工编号和基本薪资
SELECT employee_id,salary FROM employees 
WHERE salary <9000 OR salary > 12000;

4.运算符的优先级

①数字编号越大,优先级越高,优先级高的运算符先进行计算。可以看到,赋值运算符的优先级最低,使用“()”括起来的表达式的优先级最高。
在这里插入图片描述
在这里插入图片描述

5.使用正则表达式查询

在这里插入图片描述
1. 查询以特定字符或字符串开头的记录
字符‘^’匹配以特定字符或者字符串开头的文本。

查询s_name字段以字母‘b’开头的记录:

SELECT * 
FROM Student
WHERE s_name REGEXP '^b';

2. 查询以特定字符或字符串结尾的记录
字符‘$’匹配以特定字符或者字符串结尾的文本。

查询s_name字段以字母‘y’结尾的记录:

SELECT * 
FROM Student
WHERE s_name REGEXP 'y$';

3. 用符号"."来替代字符串中的任意一个字符
字符‘.’匹配任意一个字符。
查询s_name字段值包含字母‘a’与‘g’且两个字母之间只有一个字母的记录:

SELECT * 
FROM Student
WHERE s_name REGEXP 'a.g';

4. 使用"*“和”+"来匹配多个字符
星号‘*’匹配前面的字符任意多次,包括0次。加号‘+’匹配前面的字符至少一次。

查询s_name字段值以字母‘b’开头且‘b’后面出现字母‘a’的记录:

SELECT *
FROM Student
WHERE s_name REGEXP '^ba*';

查询s_name字段值以字母‘b’开头且‘b’后面出现字母‘a’至少一次的记录:

SELECT * 
FROM Student
WHERE s_name REGEXP '^ba+';

5. 匹配指定字符串
正则表达式可以匹配指定字符串,只要这个字符串在查询文本中即可,如要匹配多个字符串,多个字符串之间使用分隔符‘|’隔开。

查询s_name字段值包含字符串“on”的记录:

SELECT * 
FROM Student
WHERE s_name REGEXP 'on';

查询s_name字段值包含字符串“on”或者“ap”的记录:

SELECT * 
FROM Student 
WHERE s_name REGEXP 'on|ap';

LIKE运算符也可以匹配指定的字符串,但与REGEXP不同,LIKE匹配的字符串如果在文本中间出现,则找不到它,相应的行也不会返回。REGEXP在文本内进行匹配,如果被匹配的字符串在文本中出现,REGEXP将会找到它,相应的行也会被返回。对比结果如下所示。

使用LIKE运算符查询s_name字段值为“on”的记录:

SELECT * 
FROM Student
WHERE s_name like 'on';

6. 匹配指定字符中的任意一个
方括号“[]”指定一个字符集合,只匹配其中任何一个字符,即为所查找的文本。

查找s_name字段中包含字母‘o’或者‘t’的记录:

SELECT * 
FROM Student
WHERE s_name REGEXP '[ot]';

查询s_id字段中包含4、5或者6的记录:

SELECT * 
FROM Student
WHERE s_id REGEXP '[456]';

7. 匹配指定字符以外的字符
“[^字符集合]”匹配不在指定集合中的任何字符。

查询s_id字段中包含字母ae和数字12以外字符的记录:

SELECT * 
FROM Student
WHERE s_id REGEXP '[^a-e1-2]';

8. 使用{n,}或者{n,m}来指定字符串连续出现的次数
“字符串{n,}”表示至少匹配n次前面的字符;“字符串{n,m}”表示匹配前面的字符串不少于n次,不多于m次。例如,a{2,}表示字母a连续出现至少2次,也可以大于2次;a{2,4}表示字母a连续出现最少2次,最多不能超过4次。

查询s_name字段值出现字母‘x’至少2次的记录:

SELECT * 
FROM Student
WHERE s_name REGEXP 'x{2,}';

查询s_name字段值出现字符串“ba”最少1次、最多3次的记录:

SELECT * 
FROM Student
WHERE s_name REGEXP 'ba{1,3}';
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值