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

MySQL — 数据查询

介绍

     MySQL数据查询是通过结构化查询语言(SQL)从数据库中提取数据的核心操作,其核心指令为SELECT语句。通过SELECT语句可提取指定字段或全部字段的数据,配合WHERE子句实现条件过滤,精准定位符合特定值的记录。多表关联查询依赖JOIN操作(如INNER JOIN、LEFT JOIN),基于共有字段整合数据。聚合函数(如SUM、COUNT、AVG)结合GROUP BY子句可对数据进行分类统计,HAVING子句则用于筛选分组后的结果集。排序功能通过ORDER BY实现,支持升序或降序排列,LIMIT和OFFSET子句控制分页显示。子查询允许嵌套查询逻辑,提升复杂需求的实现效率。为提高查询速度,合理设计索引是关键,避免全表扫描。MySQL还支持联合查询(UNION)、去重(DISTINCT)及正则表达式匹配等高级功能,兼顾灵活性与性能优化,满足从基础检索到复杂数据分析的多层次需求。


基础查询

MySQL基础查询使用SELECT语句,语法为SELECT 字段 FROM 表 WHERE 条件。支持算术、比较和逻辑运算符,可用AND/OR连接条件,ORDER BY排序,LIMIT限制结果数量,LIKE模糊匹配,是数据检索的核心操作。

  • SELECT语句:检索数据的基本结构。
  • 使用*查询所有列(谨慎使用,建议明确列名)。
  SELECT column1, column2 FROM table_name;

  •   WHERE子句:过滤符合条件的记录。

  • 支持运算符:=, <>, >, <, BETWEEN, LIKE, IN, IS NULL等。

SELECT * FROM users WHERE age > 18 AND country = 'China';
  • DISTINCT去重:

SELECT DISTINCT country FROM users;

排序与分页

MySQL排序使用ORDER BY,可指定字段升序(ASC)或降序(DESC);分页通过LIMIT限制数量,OFFSET设置偏移量,常用于数据分段展示,语法如SELECT ... ORDER BY 字段 LIMIT 数量 OFFSET 偏移。

  • ORDER BY:按列排序,支持多列和方向(ASC升序,DESC降序)。
  SELECT name, age FROM users ORDER BY age DESC, name ASC;
  • LIMIT与分页:
  SELECT * FROM products LIMIT 10;           -- 前10条SELECT * FROM products LIMIT 10 OFFSET 20; -- 跳过20条,取10条(第3页)

聚合与分组

MySQL聚合查询使用SUM、AVG、MAX、MIN、COUNT等函数统计数据,结合GROUP BY按字段分组,HAVING过滤分组结果,语法如SELECT 字段,COUNT(*) FROM 表 GROUP BY 字段 HAVING 条件,常用于分类汇总统计。

  • 聚合函数:COUNT(), SUM(), AVG(), MAX(), MIN()。
  SELECT AVG(salary) AS avg_salary FROM employees;
  • GROUP BY分组:
  SELECT department, COUNT(*) AS emp_count FROM employees GROUP BY department;
  • HAVING过滤分组:
  SELECT department, AVG(salary) FROM employees GROUP BY department HAVING AVG(salary) > 5000;

多表连接(JOIN)

MySQL多表连接(JOIN)通过关联字段整合数据,常用类型包括INNER JOIN(匹配行)、LEFT JOIN(左表全保留)、RIGHT JOIN和FULL JOIN,语法为表1 JOIN 表2 ON 条件,用于跨表数据关联与分析。

  • INNER JOIN:返回两表匹配的行。
  SELECT users.name, orders.amount FROM users INNER JOIN orders ON users.id = orders.user_id;
  • LEFT/RIGHT JOIN:保留左表/右表所有记录。
  SELECT users.name, orders.amount FROM users LEFT JOIN orders ON users.id = orders.user_id;

子查询与联合查询

MySQL子查询将查询嵌套在另一个查询中,用于条件判断(IN/EXISTS)或生成派生表;联合查询(UNION)合并多个SELECT结果,列数需一致且自动去重,适用于复杂数据筛选与结果拼接。

  • 子查询:
  SELECT name FROM users WHERE id IN (SELECT user_id FROM orders WHERE amount > 100);
  • UNION合并结果:
  SELECT name FROM employees UNION SELECT name FROM contractors;

常见注意事项

  1. NULL处理:使用IS NULL或IS NOT NULL判断。
  2. 模糊查询:LIKE 'J%'(高效) vs LIKE '%son'(低效)。
  3. 事务与锁:高并发场景注意隔离级别(如READ COMMITTED)。

总结

     MySQL数据查询是数据库操作的核心,主要依赖SELECT语句实现数据检索。基本语法包含SELECT指定列、FROM指定表,可配合WHERE子句设置过滤条件,使用比较运算符(=、>、<)、逻辑运算符(AND、OR、NOT)以及BETWEEN、IN、LIKE等特殊运算符进行精确或模糊匹配。DISTINCT关键字用于去重,AS可为列或表设置别名。聚合函数COUNT、SUM、AVG、MAX、MIN需配合GROUP BY分组使用,HAVING子句对分组结果二次过滤,与WHERE的执行顺序不同。多表查询通过JOIN实现,包括INNER JOIN(返回交集)、LEFT JOIN(左表全保留)、RIGHT JOIN(右表全保留)和FULL JOIN(全外连接)。

     子查询分为标量子查询(返回单值)、列子查询(返回单列)和表子查询(返回临时表),常与IN、EXISTS配合使用。排序使用ORDER BY指定列及ASC/DESC方向,分页通过LIMIT偏移量实现。UNION合并多个查询结果并自动去重,UNION ALL保留重复记录。查询执行顺序遵循FROM→WHERE→GROUP BY→HAVING→SELECT→ORDER BY→LIMIT的逻辑流程,理解执行顺序对优化复杂查询至关重要。索引合理使用能显著提升查询效率,避免全表扫描。

http://www.xdnf.cn/news/280531.html

相关文章:

  • 如何提高情商?(优化版)
  • 【RocketMQ Broker 相关源码】- broker 启动源码(1)
  • 身份认证、访问控制技术、SSO单点登录技术、特权访问管理、身份治理与管理——数据安全守护者
  • 支撑座的安装精度对滚珠丝杆性能有哪些影响?
  • 5.3【T】pc
  • 【Java idea配置】
  • load_dotenv()详解
  • 数据采集文氏管旋风高效湿式除尘器文丘里旋风除尘组合实验装置
  • Nginx核心功能 02
  • SAM-Decoding_ 后缀自动机助力大模型推理加速!
  • 《“昊龙一号”:开启中国航天货运新时代》
  • Linux网络编程 day3 五一结假
  • uniapp开发微信小程序时如何进行分包(新手图文)
  • 人工智能(AI)未来会产生意识吗?
  • 【Qt】常用的类与数据类型
  • 卷积神经网络实战(2)
  • llfc项目分布式服务笔记
  • LeetCode - 91.解码方法
  • linux系统线程实现原理浅析
  • 企业架构革新指南:中台的定义、实践与未来
  • 嵌入式复习第二章
  • 修复笔记:SkyReels-V2项目中的 from_config 警告
  • 历史观以及文化和文明的相关知识
  • 序列到序列学习
  • 软件测试报告机构如何保障软件质量并维护其安全性?
  • Vultr之Ubuntu重设密码
  • 湖北理元理律师事务所:债务优化的合规化探索
  • 2025年- H26-Lc134- 226. 翻转二叉树(树)---java版
  • Java学习手册:SQL 优化技巧
  • 正态分布习题集 · 答案与解析篇