MySQL 运算符:让数据处理更高效
在日常开发中,我们常常需要对数据库中的数据进行各种计算和判断。无论是做订单金额的加减、用户状态的判断,还是筛选符合条件的记录,都离不开一个基础但至关重要的工具——MySQL 运算符。它们就像是 SQL 语言中的“数学公式”和“逻辑开关”,让数据库能够理解我们的意图,精准地完成数据操作。
对于初学者来说,可能觉得“运算符”只是加减乘除那么简单。但其实,MySQL 提供了丰富多样的运算符类型,涵盖算术、比较、逻辑、位运算等多个方面,掌握它们,不仅能让你写出更简洁高效的 SQL 语句,还能在复杂查询中游刃有余。
今天我们就来系统梳理一下 MySQL 运算符的核心用法,结合实际场景和代码示例,带你一步步掌握这个关键技能。
算术运算符:数据处理的“基本功”
算术运算符是 MySQL 运算符中最直观的一类,主要用于数值之间的加减乘除操作。它们在处理财务数据、统计报表、价格计算等场景中非常常见。
常见的算术运算符包括:
+:加法-:减法*:乘法/:除法(返回浮点数)%或MOD:取模(求余数)
实际应用示例
假设我们有一个 products 表,结构如下:
CREATE TABLE products (
id INT PRIMARY KEY,
name VARCHAR(50),
price DECIMAL(10,2),
quantity INT
);
插入一些测试数据:
INSERT INTO products VALUES
(1, '笔记本电脑', 5999.00, 10),
(2, '机械键盘', 399.00, 25),
(3, '无线耳机', 299.00, 50);
现在我们要计算每种商品的总价(单价 × 数量),并显示总金额:
SELECT
name AS 商品名称,
price AS 单价,
quantity AS 数量,
price * quantity AS 总价
FROM products;
注释说明:
price * quantity使用乘法运算符计算总价。- 结果会自动保留小数点后两位,因为
DECIMAL(10,2)类型支持精确计算。 - 该查询将返回每种商品的总价,便于后续做库存价值统计。
再比如,我们想给所有商品打 9 折优惠:
SELECT
name AS 商品名称,
price AS 原价,
price * 0.9 AS 折后价
FROM products;
注释说明:
price * 0.9表示原价乘以 0.9,即打 9 折。- 这里使用了浮点数 0.9,MySQL 会自动处理浮点运算。
小贴士:如果需要更精确的财务计算,建议使用
DECIMAL类型,避免浮点数精度丢失。
比较运算符:筛选数据的“眼睛”
比较运算符用于判断两个值之间的关系,是 WHERE 子句中最常用的工具。它们决定了哪些数据应该被保留,哪些应该被过滤。
常见的比较运算符有:
| 运算符 | 含义 |
|---|---|
= |
等于 |
!= 或 <> |
不等于 |
< |
小于 |
> |
大于 |
<= |
小于等于 |
>= |
大于等于 |
BETWEEN ... AND ... |
在某个范围内 |
IN |
在指定集合中 |
LIKE |
模糊匹配 |
IS NULL |
判断是否为空 |
举例说明
继续使用上面的 products 表,我们来筛选出价格高于 500 元的商品:
SELECT name, price
FROM products
WHERE price > 500;
注释说明:
price > 500使用大于运算符,返回价格大于 500 的商品。- 输出结果包括“笔记本电脑”和“机械键盘”。
再比如,查找价格在 300 到 600 之间的商品:
SELECT name, price
FROM products
WHERE price BETWEEN 300 AND 600;
注释说明:
BETWEEN ... AND ...是一个范围比较运算符,包含边界值。- 相当于
price >= 300 AND price <= 600。
如果我们要查找名字包含“键”字的商品,可以使用 LIKE:
SELECT name, price
FROM products
WHERE name LIKE '%键%';
注释说明:
%是通配符,表示任意字符(包括空字符)。LIKE '%键%'表示名字中包含“键”字的记录。- 这在搜索功能中非常实用。
逻辑运算符:组合条件的“拼接器”
当需要同时满足多个条件时,逻辑运算符就派上用场了。它们能将多个条件组合成一个更复杂的判断表达式。
主要逻辑运算符有:
AND:逻辑与(两个条件都为真才返回真)OR:逻辑或(任一条件为真就返回真)NOT:逻辑非(取反)
实际案例
假设我们要找出价格低于 500 元 并且 数量大于 20 的商品:
SELECT name, price, quantity
FROM products
WHERE price < 500 AND quantity > 20;
注释说明:
AND要求两个条件同时成立。- 只有“无线耳机”满足条件(价格 299,数量 50)。
如果我们要找出价格低于 500 元 或者 数量大于 20 的商品:
SELECT name, price, quantity
FROM products
WHERE price < 500 OR quantity > 20;
注释说明:
OR只要满足一个条件即可。- 这次“笔记本电脑”(数量 10,但价格 5999)不满足,但“机械键盘”和“无线耳机”都满足。
使用 NOT 可以排除某些数据:
SELECT name, price
FROM products
WHERE NOT price = 5999.00;
注释说明:
NOT price = 5999.00表示价格不等于 5999 的记录。- 结果排除了“笔记本电脑”。
提示:逻辑运算符的优先级是
NOT > AND > OR,建议使用括号明确优先级,避免歧义。
位运算符:底层数据操作的“利器”
位运算符主要用于对二进制位进行操作,虽然在日常开发中不常用,但在处理权限系统、状态标志、性能敏感场景中非常高效。
MySQL 支持的位运算符有:
&:按位与|:按位或^:按位异或~:按位取反<<:左移>>:右移
应用场景:权限系统设计
假设我们用一个整数来表示用户权限,每一位代表一种权限:
- 第 1 位:读权限(1)
- 第 2 位:写权限(2)
- 第 3 位:删除权限(4)
- 第 4 位:管理员权限(8)
比如用户权限为 7(二进制:0111),表示拥有读、写、删除权限。
我们可以用位运算来判断用户是否拥有某项权限:
SELECT
user_id,
permissions,
(permissions & 1) AS has_read,
(permissions & 2) AS has_write,
(permissions & 4) AS has_delete
FROM users
WHERE (permissions & 1) = 1;
注释说明:
permissions & 1用于判断是否拥有“读”权限。- 1 的二进制是
0001,与任何数做按位与,只保留最低位。 - 如果结果为 1,说明该用户有读权限。
这种设计在高并发系统中性能极佳,因为判断只需一次位运算。
赋值运算符与特殊运算符:提升 SQL 可读性
除了上述几类,MySQL 还提供了一些特殊但实用的运算符。
赋值运算符 :=
在 SELECT 语句中,可以使用 := 为变量赋值,常见于存储过程或复杂查询中。
SELECT
id,
price,
(price * 0.9) AS discount_price,
(price * 0.9) := @final_price -- 将计算结果赋值给变量 @final_price
FROM products
WHERE id = 1;
注释说明:
:=是 MySQL 中的赋值操作符。@final_price是用户定义的会话变量。- 可用于后续计算或输出。
NULL 安全比较运算符 <=>
在处理 NULL 值时,标准比较运算符会返回 UNKNOWN,但 <=> 可以正确判断两个值是否相等,包括 NULL。
SELECT
NULL = NULL AS equal_result, -- 返回 NULL(不确定)
NULL <=> NULL AS null_safe_result; -- 返回 1(相等)
注释说明:
=无法判断NULL是否相等,因为NULL代表“未知”。<=>是“安全等于”,能正确处理NULL值,推荐在涉及NULL的比较中使用。
总结:从基础到进阶,掌握 MySQL 运算符的关键
MySQL 运算符是构建复杂查询的基石。从最简单的加减乘除,到复杂的逻辑判断和位运算,它们让 SQL 语言具备了强大的表达能力。掌握这些运算符,不仅能写出更高效的查询语句,还能提升代码的可读性和维护性。
在实际开发中,建议根据业务需求合理选择运算符组合。例如:
- 用算术运算符做数据计算;
- 用比较和逻辑运算符构建筛选条件;
- 用位运算优化权限系统;
- 用
NULL安全比较避免空值陷阱。
只要多练习、多实践,这些看似枯燥的符号,终将成为你处理数据的得力助手。不妨从今天开始,在你的下一个 SQL 查询中,尝试使用一两种新的运算符,感受它们带来的便利与高效。