4 MySQL-运算符

4 MySQL-运算符

算术运算符

运算符描述例子
+加法,执行加法运算。a + b 得到 30
-减法,执行减法运算。a - b 得到 -10
*乘法,执行乘法运算。a * b 得到 200
/用左操作数除以右操作数。b / a 得到 2
%用左操作数除以右操作数并返回余数。b % a 得到 0
运算符描述
+=加等于
-=减去等于
*=乘以等于
/=除以等于
%=模等于
&=按位与等于
^-=按位互斥等于
|*=按位或等于
-- 1. 算术运算符
SELECT 2 + 3, 2 - 3, 2 * 3, 3 / 5, 10 % 3
FROM dual;

# 在SQL中,+没有连接的作用,就表示加法运算。此时,会将字符串转换为数值进行计算
# 7
SELECT 2 + '5'
FROM dual;

# 'a' 无法转换,看作 0 处理
SELECT 100 + 'a'
FROM dual;

# Null参与运算,结果为null
SELECT 100 + NULL
FROM dual;

# DIV 表示除  MOD 表示取余
SELECT 100 DIV 2, 100 MOD 2
FROM dual;
# NULL 除数不能为0,但是不报错显示为NULL
SELECT 100 DIV 0
FROM dual;

比较运算符

运算符描述例子
=检查两个操作数的值是否相等,如果是,则条件为真(true)。(a = b) is false.
!=检查两个操作数的值是否相等,如果值不相等则条件为真(true)。(a != b) is true.
<>检查两个操作数的值是否相等,如果值不相等则条件为真(true)。(a <> b) is true.
>检查左操作数的值是否大于右操作数的值,如果是,则条件为真(true)。(a > b) is false.
<检查左操作数的值是否小于右操作数的值,如果是,则条件为真(true)。(a < b) is true.
>=检查左操作数的值是否大于或等于右操作数的值,如果是,则条件为真(true)。(a >= b) is false
<=检查左操作数的值是否小于或等于右操作数的值,如果是,则条件为真(true)。(a <= b) is true.
!<检查左操作数的值是否不小于右操作数的值,如果是,则条件变为真(true)。(a !< b) is false.
!>检查左操作数的值是否不大于右操作数的值,如果是,则条件变为真(true)。(a !> b) is true.
运算符描述
ALLALL运算符用于将值与另一个值集中的所有值进行比较。
ANDAND运算符允许在SQL语句的WHERE子句中指定多个条件。
ANYANY运算符用于根据条件将值与列表中的任何适用值进行比较。
BETWEENBETWEEN运算符用于搜索在给定最小值和最大值内的值。
EXISTSEXISTS运算符用于搜索指定表中是否存在满足特定条件的行。
ININ运算符用于将值与已指定的文字值列表进行比较。
LIKELIKE运算符用于使用通配符运算符将值与类似值进行比较。
NOTNOT运算符反转使用它的逻辑运算符的含义。 例如:NOT EXISTS, NOT BETWEEN, NOT IN等等,这是一个否定运算符。
OROR运算符用于组合SQL语句的WHERE子句中的多个条件。
IS NULLIS NULL运算符用于将值与NULL值进行比较。
UNIQUEUNIQUE运算符搜索指定表的每一行的唯一性(无重复项)。
-- 2. 比较运算符
-- 1 表示 true 0 表示 false
-- ---------------------- ---------------------- ----------------------
-- 2.1 基本比较运算法
-- ---------------------- ----------------------
# 隐式转换
SELECT 1 > 2, 1 < '2', 1 != 2, 1 = 2, 1 <> 2
FROM dual;
# 字符之间的比较,按照ASCII比较规则
SELECT 'ab' = 'ad', 'a' = 'a'
FROM dual;

SELECT last_name,salary
FROM employees
WHERE salary = 6000;

# <=> 安全等于
# 当有null时, 可以进行比较, 若不是安全等于则会显示null
SELECT NULL <=> NULL, NULL = NULL, 1 = NULL FROM dual;

SELECT last_name, commission_pct
FROM employees
WHERE commission_pct <=> NULL;

-- 2.1 特殊比较运算法
-- ---------------------- ----------------------
# IS NULL / IS NOT NULL / ISNULL()
SELECT last_name, commission_pct
FROM employees
WHERE commission_pct IS NULL;

SELECT last_name, commission_pct
FROM employees
WHERE ISNULL(commission_pct);

SELECT last_name, commission_pct
FROM employees
WHERE commission_pct IS NOT NULL;

#  Least() 最小函数 \ Greatest() 最大函数
SELECT LEAST('g', 't', 'a', 'm'), GREATEST('g', 't', 'a', 'm')
FROM dual;

SELECT LEAST(LENGTH(first_name), LENGTH(last_name))
FROM employees;

# between 条件1 and 条件2   查询条件1和条件2之间的数据,包含边界
SELECT employee_id, salary
FROM employees
WHERE NOT salary BETWEEN 6000 AND 10000;

SELECT employee_id, salary
FROM employees
WHERE salary >= 6000 && salary <= 10000;

# in (set) \ not in (set)  set-集合
SELECT 10 IN (1,2,3,4,5,6)
FROM dual;

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

SELECT last_name,salary,department_id
FROM employees
WHERE department_id NOT IN (10,20,30,50,60,70);

# Like 模糊查询
#  % 表示不确定的0个或多个字符
#  _ 表示不确定的1个字符
SELECT employee_id, first_name, last_name
FROM employees
WHERE last_name LIKE '%a%' AND first_name LIKE '%b%';

# 若需要使用%和_作为字符串,需要使用转义字\
SELECT employee_id, first_name, last_name
FROM employees
WHERE last_name LIKE '__a%' OR first_name LIKE '_\_a%';

# 正则表达式的表示 RLike RegEXP
SELECT employee_id, first_name, last_name
FROM employees
WHERE last_name REGEXP '^a'

逻辑运算符

运算符作用
NOT 或者 !逻辑非
AND 或者 &&逻辑与
OR 和 ||逻辑或
XOR逻辑异或
-- 3. 逻辑运算符
-- and or not xor     && || !
-- ---------------------- ---------------------- ----------------------
SELECT employee_id, first_name, last_name, salary
FROM employees
WHERE salary >= 6000
  AND salary <= 9000;

SELECT employee_id, first_name, last_name, salary
FROM employees
WHERE salary <= 6000
   OR salary >= 9000;

SELECT employee_id, first_name, last_name, salary
FROM employees
WHERE NOT salary BETWEEN 6000 AND 8000;

SELECT 0 XOR 1, 'a' XOR 'b', 0 XOR 0, 'a' XOR 0, 'a' XOR 1, 'a' XOR '0'
FROM dual;

位运算符

运算符描述
&按位与
|按位或
^按位异或
~取反
>>右移
<<左移
-- 4. 位运算符
-- ---------------------- ---------------------- ----------------------
SELECT 10 >> 2, '10' >> 2, 10 << 2, 2 & 0, 2 | 0, ~2, 1 ^ 0
FROM dual;

运算符的优先级MySQL

优先级由低到高排列运算符
1=(赋值运算)、:=
2II、OR
3XOR
4&&、AND
5NOT
6BETWEEN、CASE、WHEN、THEN、ELSE
7=(比较运算)、<=>、>=、>、<=、<、<>、!=、 IS、LIKE、REGEXP、IN
8|
9&
10<<、>>
11-(减号)、+
12*、/、%
13^
14-(负号)、〜(位反转)
15!

正则表达式

参考自学JAVA中的正则表达式的介绍

Exercise

-- 5. Exercise
-- ---------------------- ---------------------- ----------------------
SELECT first_name, last_name, salary
FROM employees
WHERE NOT salary BETWEEN 5000 AND 12000;

SELECT first_name, last_name, department_id
FROM employees
WHERE department_id IN (20, 50);

SELECT last_name, job_id
FROM employees
WHERE manager_id IS NULL;

SELECT last_name, salary, commission_pct
FROM employees
WHERE commission_pct IS NOT NULL;

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

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

SELECT *
FROM employees
WHERE first_name LIKE '%e';

SELECT last_name, job_id, department_id
FROM employees
WHERE employees.department_id >= 80 && employees.department_id <= 100;

SELECT last_name, salary, manager_id
FROM employees
WHERE manager_id IN (100, 101, 110);
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

SoaringW

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值