当前位置: 首页 > news >正文

MySQL 运算符

在 MySQL 数据库操作中,运算符是构建查询条件、处理数据关系的基础组件。无论是简单的数值比较,还是复杂的逻辑判断,都离不开运算符的支持。

一、MySQL 运算符是什么

MySQL 运算符是用于执行数据计算或比较的特殊符号或关键字,它可以连接表达式中的操作数,实现数值运算、条件判断、逻辑组合等功能。合理使用运算符能让 SQL 语句更精准地筛选数据、处理业务逻辑,是编写高效查询的必备知识。

运算符按功能可分为算术运算符、比较运算符、逻辑运算符、字符串运算符、赋值运算符等,每种类型都有其特定的应用场景。

二、常用运算符类型及示例

(一)算术运算符

算术运算符用于执行数值计算,包括加、减、乘、除等基本运算,适用于数值类型的列或常量。

1.+(加法):计算两个数值的和。

示例:查询学生的语文和数学成绩总和

SELECT name, chinese + math AS total_score FROM score;

若表中某学生语文 80 分、数学 90 分,结果中 total_score 为 170。

2.-(减法):计算两个数值的差。

示例:查询商品原价与折扣价的差额

SELECT product_name, original_price - discount_price AS price_diff FROM products;

3.*(乘法):计算两个数值的积。

示例:计算订单总金额(单价 × 数量)

SELECT order_id, price * quantity AS total_amount FROM order_details;

4./(除法):计算两个数值的商(结果为浮点数)。

    示例:计算平均分(总分 ÷ 科目数)

    SELECT name, (chinese + math + english) / 3 AS avg_score FROM score;

    5.%(取余):返回两个数值相除的余数。

      示例:查询学号为奇数的学生

      SELECT * FROM student WHERE student_id % 2 = 1;

      (二)比较运算符

      比较运算符用于判断两个操作数的关系,返回布尔值(1 表示真,0 表示假,NULL 表示未知),常用于 WHERE 子句筛选数据。

      1. =(等于):判断两个值是否相等(注意与赋值运算符区分)。

      示例:查询数学成绩为 100 分的学生

      SELECT name, math FROM score WHERE math = 100;

      2.<> 或 !=(不等于):判断两个值是否不相等。

      示例:查询不是三班的学生

      SELECT name, class FROM student WHERE class <> 3;

      3.>(大于)、<(小于)、>=(大于等于)、<=(小于等于):比较数值大小。

      示例:查询语文成绩大于 90 分的学生

      SELECT name, chinese FROM score WHERE chinese > 90;

      4.BETWEEN ... AND ...:判断值是否在指定范围内(包含边界)。

      示例:查询数学成绩在 80 到 90 分之间的学生

      SELECT name, math FROM score WHERE math BETWEEN 80 AND 90;

      5.IN:判断值是否在指定的列表中。

        示例:查询班级为 1 班、3 班或 5 班的学生

        SELECT name, class FROM student WHERE class IN (1, 3, 5);

        6.LIKE:用于模糊匹配字符串(%匹配任意长度字符,_匹配单个字符)。

        示例:查询姓 “张” 的学生

        SELECT name FROM student WHERE name LIKE '张%';

        示例:查询第二个字是 “明” 的学生(如 “李明”“王明”)

        SELECT name FROM student WHERE name LIKE '_明%';

        7.IS NULL / IS NOT NULL:判断值是否为 NULL(NULL 不能用=判断)。

          示例:查询未填写邮箱的用户

          SELECT username FROM user WHERE email IS NULL;

          (三)逻辑运算符

          逻辑运算符用于组合多个条件,实现复杂的逻辑判断,常用的有 AND、OR、NOT。

          1.AND(与):所有条件同时满足时返回真。

          示例:查询数学 > 90 且语文 > 90 的学生

          SELECT name FROM score WHERE math > 90 AND chinese > 90;

          2.OR(或):任意一个条件满足时返回真。

          示例:查询数学 > 90 或语文 > 90 的学生

          SELECT name FROM score WHERE math > 90 OR chinese > 90;

          3.NOT(非):否定条件的结果。

            示例:查询不在 1 班且年龄不是 18 岁的学生

            SELECT name, class, age FROM student WHERE NOT (class = 1 OR age = 18);

            (四)字符串运算符

            字符串运算符主要用于字符串的拼接操作,MySQL 中常用CONCAT()函数实现,也可使用||(需开启PIPES_AS_CONCAT模式)。

            1. CONCAT(str1, str2, ...):连接多个字符串(与字符串函数中的 CONCAT 功能一致)。

            示例:拼接姓名和班级为 “姓名(班级)” 格式

            SELECT CONCAT(name, '(', class, '班)') AS student_info FROM student;

            结果类似 “张三 (2 班)”。

            (五)赋值运算符

            赋值运算符用于为变量或列赋值,最常用的是=。

            1. =:在 SET 或 UPDATE 语句中为变量或列赋值。

            示例:更新学生的年龄

            UPDATE student SET age = 19 WHERE name = '张三';

            示例:定义用户变量并赋值

            SET @total = 0;SELECT @total := 10 + 20; -- 变量total赋值为30

            (六)位运算符

            位运算符用于对二进制数进行位级操作,适用于整数类型,实际开发中较少使用,主要包括&(与)、|(或)、^(异或)、~(非)、<<(左移)、>>(右移)。

            示例:计算 3(二进制 11)和 5(二进制 101)的位与结果

            SELECT 3 & 5 AS result; -- 结果为1(二进制001)

            三、运算符的优先级

            当一个表达式中包含多个运算符时,MySQL 会按优先级依次执行,优先级高的先运算。若优先级相同,按从左到右的顺序执行。常见运算符的优先级从高到低为:

            1. 算术运算符(*、/、%高于+、-)
            2. 比较运算符(=、>、<等)
            3. 逻辑运算符(NOT高于AND,AND高于OR)
            4. 赋值运算符

            可通过括号()改变运算顺序,将需要优先执行的部分括起来。

            示例:先计算加法再比较(不加括号会先算乘法)

            SELECT * FROM score WHERE (chinese + math) > 180;

            四、使用注意事项

            1. NULL 值的处理:任何运算符与 NULL 运算的结果都为 NULL,需用IS NULL或IS NOT NULL判断。
            2. 字符串与数值的比较:MySQL 会自动将字符串转换为数值后比较,若转换失败则视为 0。例如'123' = 123返回 1,'abc' = 0返回 1。
            3. LIKE 的性能:对大表使用%开头的模糊查询(如LIKE '%abc')会导致全表扫描,效率较低,建议结合索引或使用全文检索。
            4. IN 与子查询:当 IN 的列表值较多时,可考虑用子查询替代,如WHERE class IN (SELECT class FROM top_class)。
            5. 避免连续比较错误:例如1 < x < 3在 MySQL 中会解析为(1 < x) < 3,结果可能不符合预期,应写成x > 1 AND x < 3。

            http://www.dtcms.com/a/326214.html

            相关文章:

          1. [CSP-J 2021] 小熊的果篮
          2. Oracle数据库Library cache lock阻塞问题排查
          3. 银河麒麟V10配置KVM的Ubuntu虚机GPU直通实战
          4. AI测试平台实战:深入解析自动化评分和多模型对比评测
          5. 人工智能-python-机器学习-逻辑回归与K-Means算法:理论与应用
          6. 机器学习之DBSCAN
          7. Redis中的AOF原理详解
          8. 【unity实战】在Unity中实现不规则模型的网格建造系统(附项目源码)
          9. CI/CD的持续集成和持续交付
          10. 变频器实习DAY26 CDN 测试中心使用方法
          11. 标准IO详解(fgets、gets、fread、fwrite、fseek 等应用)
          12. ubuntu24.04设置登陆背景图片
          13. 【openEuler构建测试环境或部署嵌入式系统】openEuler生态扩容新路径:内网穿透工具cpolar助力多场景落地
          14. 服务器使用ADB调试手机
          15. Redis 数据结构及特点
          16. 计算机网络(一)——TCP
          17. JavaScript Const的基础使用
          18. QML的中英文翻译
          19. 快速搭建前端playwright工程
          20. SpringAI实现Reread(Advisor)
          21. DNS核心概念与BIND配置详解
          22. C++11的历史和统一的初始化列表
          23. Qt串口通信设计指南:通信层架构与实践
          24. K8S学习----应用部署架构:传统、虚拟化与容器的演进与对比
          25. 虚拟财产刑事辩护:跨地域性与匿名性带来的挑战
          26. 记录一些sonic自动化运行中的问题
          27. 常见通信协议详解:TCP、UDP、HTTP/HTTPS、WebSocket 与 GRPC
          28. 基于 Axios 的 HTTP 请求封装文件解析
          29. Rust:专业级错误处理工具 thiserror 详解
          30. Nginx 从入门到实战:安装、配置、升级与高级应用全解析