MySQL 运算符(长文讲解)

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 查询中,尝试使用一两种新的运算符,感受它们带来的便利与高效。