MySQL中的运算符

算术运算符

算术运算符,包括 +-*/ 或者 DIV% 或者 MOD(求余或求模)。

  • MySQL中,+ 只做数值相加,如果遇到非数值类型,MySQL会先尝试将其转换为数值,如果转换失败,则当作数值0处理。也就是说,这里存在 隐式转换。
  • MySQL中,字符串拼接使用函数CONCAT(str1,str2,...)实现。
  • 空值参与运算,运算结果仍为空值。
  • MySQL中,除数为0时,结果为空值,即NULL

+ 只做数值相加

# MySQL中,+只做数值相加,如果遇到非数值类型,MySQL会先尝试将其转换为数值,如果转换失败,则当作数值0处理。也就是说,这里存在 隐式转换。
SELECT 100 + '2'
FROM DUAL; -- 返回102

SELECT 100 + 'A'
FROM DUAL; -- 返回100

SELECT 'A' + 'B'
FROM DUAL; -- 返回0

字符串拼接用函数CONCAT()

# MySQL中,字符串拼接使用函数CONCAT()实现
SELECT CONCAT('HEL','LO')
FROM DUAL; -- 返回HELLO

SELECT CONCAT('a','b','c')
FROM DUAL; -- 返回abc

空值参与运算,结果仍为空值

SELECT 100 + NULL
FROM DUAL; -- 返回NULL

除数为0时,结果为空

SELECT 100/0
FROM DUAL; -- 返回NULL

比较运算符

比较运算符,包括 =<=><> 或者 !=<<=>>=
也包括 IS NULLIS NOT NULLISNULL()LEAST()GREATEST()BETWEEN ANDIN()NOT IN()LIKEREGEXPRLIKE

  • =,等号运算符。如果一侧为数值,另一侧为非数值,则存在隐式转换。即,先尝试将非数值转换为数值,如果转换失败,则当作数值0处理。
  • =,等号运算符。如果两侧都是字符串,则比较字符串中字符的ANSI编码。
  • =,等号运算符,如果任一侧出现NULL,比较结果为NULL
  • <=>,安全等于运算符。和=类似,区别在于,<=>可以对NULL进行判断。
  • 判断字段是NULL字段<=>NULL字段 IS NULLISNULL(字段)
  • 判断字段不是NULLNOT 字段<=>NULL字段 IS NOT NULLNOT ISNULL(字段)
  • BETWEEN 条件下界 AND 条件上界,包含边界。
  • 使用LIKE进行模糊查询,其中,
    • %,代表不确定个数的字符。可以代表0个字符,可以代表1个字符,也可以代表多个字符。
    • _,代表任意一个字符。
    • \,转义字符。ESCAPE 字符,指定某个字符为转义字符。
  • REGEXP,正则匹配。常用通配符如下,
    • ^,匹配开头。
    • $,匹配结尾。
    • .,匹配任意一个字符。
    • *,匹配0个或多个在它前面的字符。比如,x*,匹配任意数量的x字符;[0-9]*,匹配任意数量的数字;*,匹配任意数量的任意字符。
    • [],匹配方括号内的任意字符。比如,[abc],匹配abc[a-zA-Z],匹配任意大小写字母;[0-9],匹配任意数字。

= 和 <=>

# 如果一侧为数值,另一侧为非数值,则存在隐式转换。即,先尝试将非数值转换为数值,如果转换失败,则当作数值0处理。
SELECT 1='1',1='a',0='a','1'=1,'a'=1,'a'=0
FROM DUAL;
-- 返回 1	0	1	1	0	1
# 如果=两侧是字符串,则比较字符串中字符的ANSI编码
SELECT 'a'='a','ab'='ab','a'='b'
FROM DUAL; 
-- 返回 1	1	0
# =,等号运算符,任一侧出现NULL,结果就为NULL
SELECT 1=NULL,NULL='a',NULL=NULL
FROM DUAL;
-- 返回 NULL NULL NULL
# <=>,安全等于运算符,和=(等号运算符)类似
SELECT 1<=>'1',1<=>'a',0<=>'a','1'<=>1,'a'<=>1,'a'<=>0
FROM DUAL;
-- 返回 1	0	1	1	0	1

SELECT 'a'<=>'a','ab'<=>'ab','a'<=>'b'
FROM DUAL; 
-- 返回 1	1	0
# <=>,安全等于运算符,可以对NULL进行判断
SELECT 1<=>NULL,NULL<=>'a',NULL<=>NULL
FROM DUAL;
-- 返回 0	0	1

SELECT *
FROM employees
WHERE commission_pct <=> NULL;
-- 返回 72 行记录

IS NULL、IS NOT NULL和ISNULL()

# 查询表employees中,commission_pct为NULL的数据
SELECT *
FROM employees
WHERE commission_pct <=> NULL;

SELECT *
FROM employees
WHERE commission_pct IS NULL;

SELECT *
FROM employees
WHERE ISNULL(commission_pct);
# 查询表employees中,commission_pct不为NULL的数据
SELECT *
FROM employees
WHERE NOT commission_pct <=> NULL;

SELECT *
FROM employees
WHERE commission_pct IS NOT NULL;

SELECT *
FROM employees
WHERE NOT ISNULL(commission_pct);

BETWEEN … AND …

# 查询工资在[6000,8000]范围内的员工信息
SELECT *
FROM employees
WHERE salary BETWEEN 6000 AND 8000;

SELECT *
FROM employees
WHERE salary>=6000 AND salary<=8000;

SELECT *
FROM employees
WHERE salary>=6000 && salary<=8000;
# 查询工资不在[6000,8000]范围内的员工信息
SELECT *
FROM employees
WHERE salary NOT BETWEEN 6000 AND 8000;

SELECT *
FROM employees
WHERE salary<6000 OR salary>8000;

SELECT *
FROM employees
WHERE salary<6000 || salary>8000;

IN()和NOT IN()

# 查询department_id为10,20,30的员工信息
SELECT *
FROM employees
WHERE department_id IN (10,20,30);

SELECT *
FROM employees
WHERE department_id=10 OR department_id=20 OR department_id=30;
# 查询工资不是6000,7000,8000的员工信息
SELECT *
FROM employees
WHERE salary NOT IN(6000,7000,8000);

SELECT *
FROM employees
WHERE salary<>6000 && salary<>7000 && salary<>8000;

模糊查询:LIKE

# 查询last_name中包含字符'a'的员工信息
SELECT last_name
FROM employees
WHERE last_name LIKE '%a%';

# 查询last_name以字符'a'开头的员工信息
SELECT last_name
FROM employees
WHERE last_name LIKE 'a%';

# 查询last_name中既包含字符'a'又包含字符'e'的员工信息
SELECT last_name
FROM employees
WHERE last_name LIKE '%a%' AND last_name LIKE '%e%';

SELECT last_name
FROM employees
WHERE last_name LIKE '%a%e%' OR last_name LIKE '%e%a%';

# 查询last_name第二个字符为'a'的员工信息
SELECT last_name
FROM employees
WHERE last_name LIKE '_a%';

逻辑运算符

逻辑运算符,包括 NOT!AND&&OR||XOR (逻辑异或)。

ANDOR可以一起使用,且AND的优先级比OR的优先级高。

位运算符

位运算符,包括 ~(按位取反)、&(按位与)、|(按位或)、^(按位异或)、>>(按位右移)、<<(按位左移)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值