1. MySQL DQL基础查询全解析作为一名从业多年的数据库开发工程师我深知数据查询语言(DQL)在实际工作中的重要性。今天我将通过一个完整的电商商品管理案例带大家系统掌握MySQL中的SELECT查询技巧。我们会从最基础的查询语法开始逐步深入到条件筛选、聚合计算等高级功能每个知识点都配有可直接运行的SQL示例。1.1 环境准备与测试数据我们先搭建一个模拟电商数据库环境包含商品表和分类表-- 创建数据库 DROP DATABASE IF EXISTS dql_db; CREATE DATABASE IF NOT EXISTS dql_db; USE dql_db; -- 商品表结构设计 CREATE TABLE IF NOT EXISTS products ( id INT PRIMARY KEY AUTO_INCREMENT, -- 自增主键 name VARCHAR(24) NOT NULL, -- 商品名称 price DECIMAL(10, 2) NOT NULL, -- 价格(总位数10小数位2) score DECIMAL(5, 2), -- 评分(允许NULL) is_self VARCHAR(8), -- 是否自营 category_id INT -- 分类ID(外键) ); -- 商品分类表 CREATE TABLE IF NOT EXISTS category ( id INT PRIMARY KEY AUTO_INCREMENT, name VARCHAR(24) NOT NULL ); -- 插入分类数据 INSERT INTO category VALUES (1, 手机),(2, 电脑),(3, 美妆),(4, 家居); -- 插入商品数据 INSERT INTO products VALUES (1, 华为Mate50, 5499.00, 9.70, 自营, 1), (2, 荣耀80, 2399.00, 9.50, 自营, 1), /* 其他商品数据省略... */ (12, 迪奥996, 330.00, 9.70, 非自营, 3);提示在实际项目中建议使用专门的数据库迁移工具(如Flyway)来管理表结构变更而不是直接执行DDL语句。1.2 基础查询操作1.2.1 全字段查询与指定字段查询最基本的查询方式是检索整张表的所有字段-- 查询所有商品信息(开发中不推荐) SELECT * FROM products; -- 推荐写法明确指定需要查询的字段 SELECT id, name, price, score, is_self, category_id FROM products;为什么推荐显式指定字段主要有三个原因提高查询效率(减少不必要的数据传输)避免表结构变更导致的应用层解析错误代码可读性更好1.2.2 字段别名与表别名当需要自定义输出列名或简化表名引用时可以使用别名-- 字段别名(AS可省略) SELECT name AS 商品名称, price AS 价格 FROM products; SELECT name 商品名, price 售价 FROM products; -- 表别名(常用于多表查询) SELECT p.name, p.price FROM products p;注意一旦为表设置了别名就必须使用别名引用字段原表名将失效。1.2.3 去重查询统计商品涉及的所有分类ID(去除重复值)SELECT DISTINCT category_id FROM products;DISTINCT作用于所有选择的列如果要基于多列组合去重SELECT DISTINCT category_id, is_self FROM products;1.3 条件查询详解1.3.1 比较运算符常用的比较运算符包括, , , , , -- 查询自营商品 SELECT * FROM products WHERE is_self 自营; -- 查询评分大于9.5的商品 SELECT * FROM products WHERE score 9.5; -- 查询价格不等于999的商品(两种写法等效) SELECT * FROM products WHERE price 999; SELECT * FROM products WHERE price ! 999;1.3.2 逻辑运算符AND、OR、NOT用于组合多个条件-- 查询价格在2000-4000之间的商品(三种写法) SELECT * FROM products WHERE price 2000 AND price 4000; SELECT * FROM products WHERE price BETWEEN 2000 AND 4000; SELECT * FROM products WHERE price BETWEEN 2000 AND 4000;注意BETWEEN是闭区间包含边界值而使用和组合时需要注意是否包含边界。1.3.3 IN与NOT IN当需要匹配多个离散值时-- 查询价格为999,2199,4199的商品 SELECT * FROM products WHERE price IN(999, 2199, 4199); -- 反向查询 SELECT * FROM products WHERE price NOT IN(999, 2199, 4199);1.3.4 模糊查询LIKELIKE配合通配符实现模糊匹配%匹配任意多个字符_匹配单个字符-- 查询名称以华开头的商品 SELECT * FROM products WHERE name LIKE 华%; -- 查询名称包含兰的商品 SELECT * FROM products WHERE name LIKE %兰%; -- 查询名称第二个字是兰的商品 SELECT * FROM products WHERE name LIKE _兰%;1.3.5 NULL值处理NULL表示缺失或未知的值需要用IS NULL/IS NOT NULL判断-- 查询没有评分的商品 SELECT * FROM products WHERE score IS NULL; -- 查询有评分的商品 SELECT * FROM products WHERE score IS NOT NULL;重要区别score NULL是错误的写法NULL不能使用等号比较。1.4 排序查询ORDER BY子句控制结果集的排序方式-- 按价格降序(高到低) SELECT * FROM products ORDER BY price DESC; -- 按评分升序(低到高ASC可省略) SELECT * FROM products ORDER BY price ASC; SELECT * FROM products ORDER BY price; -- 多列排序先按是否自营再按价格 SELECT * FROM products ORDER BY is_self, price; -- 带条件的排序价格2000的商品按评分降序 SELECT * FROM products WHERE price 2000 ORDER BY score DESC;1.5 聚合函数与分组查询1.5.1 常用聚合函数COUNT()计数SUM()求和AVG()平均值MAX()/MIN()最大/最小值-- 商品评分统计 SELECT COUNT(*) AS 商品总数, MIN(score) AS 最低评分, MAX(score) AS 最高评分, AVG(score) AS 平均评分 FROM products;注意COUNT(字段名)会忽略NULL值而COUNT(*)会计所有行。1.5.2 分组统计GROUP BY将数据按指定字段分组后聚合-- 统计每个分类的商品数量 SELECT category_id, COUNT(*) FROM products GROUP BY category_id; -- 统计各分类自营/非自营商品数量 SELECT category_id, is_self, COUNT(*) FROM products GROUP BY category_id, is_self;1.5.3 HAVING筛选分组结果WHERE过滤行HAVING过滤分组-- 查询平均评分9.5的分类 SELECT category_id, AVG(score) FROM products GROUP BY category_id HAVING AVG(score) 9.5;经验HAVING条件应尽量使用聚合函数虽然它也可以包含普通字段条件但这通常意味着查询设计可能存在问题。1.6 分页查询LIMIT实现分页查询语法LIMIT offset, count-- 查询价格最高的3个商品 SELECT * FROM products ORDER BY price DESC LIMIT 3; -- 分页查询(每页4条) SELECT * FROM products LIMIT 0, 4; -- 第1页 SELECT * FROM products LIMIT 4, 4; -- 第2页 SELECT * FROM products LIMIT 8, 4; -- 第3页1.7 综合练习解析1.7.1 学生成绩查询-- 查询总分200的学生 SELECT name, (chineseenglishmath) AS total FROM student WHERE (chineseenglishmath) 200; -- 查询英语80或总分200的学生 SELECT name, english, (chineseenglishmath) total FROM student WHERE english80 OR (chineseenglishmath)200;1.7.2 员工信息查询-- 部门平均薪水2000的部门 SELECT deptno, AVG(sal) FROM emp GROUP BY deptno HAVING AVG(sal) 2000; -- 姓名第二个字母不是A且薪水800的员工 SELECT * FROM emp WHERE ename NOT LIKE _A% AND sal800 ORDER BY sal*12 DESC;1.8 关键知识点总结查询执行顺序FROM → WHERE → GROUP BY → HAVING → SELECT → ORDER BY → LIMITNULL处理要点使用IS NULL/IS NOT NULL判断聚合函数忽略NULL值NULL参与比较结果总是UNKNOWN性能优化建议避免SELECT *只查询需要的字段为WHERE和ORDER BY涉及的字段建立索引大数据量分页使用延迟关联技巧常见误区BETWEEN是闭区间[...]LIKE %xxx无法使用索引COUNT(*)与COUNT(字段)的区别在实际项目中合理运用这些DQL技巧可以显著提高查询效率。特别是在处理百万级以上数据时良好的查询设计能带来数量级的性能提升。建议初学者多练习复杂查询的编写并学会使用EXPLAIN分析查询执行计划。
企业数字化 ERP 产品动态
相关推荐
虚拟学术会议核心技术解析与青年学者红利 1. 虚拟学术会议为何异军突起? 2020年全球疫情爆发后,学术交流领域出现了一个显著变化:根据《自然》杂志2022年的调研数据,83%的受访学者表示更倾向于参加虚拟学术会议。这种转变并非仅是疫情下的权宜之计,而是技术发展… · 2026/11/4 15:22:13
灰狼优化算法改进:动态权重与概率扰动策略 1. 算法背景与核心价值 灰狼优化算法(Grey Wolf Optimizer, GWO)作为群智能算法家族的后起之秀,自2014年由Mirjalili提出以来,因其结构简单、参数少、易于实现等特点,在工程优化、机器学习等领域获得广泛应用。但标准GWO存在收敛速度与寻优精… · 2026/11/4 15:22:13
高性能计算在材料力学仿真中的实践与优化 1. 高性能计算在材料力学仿真中的应用价值 作为一名长期从事CAE仿真的工程师,我深刻体会到高性能计算(HPC)如何彻底改变了我们的工作方式。记得十年前做一个简单的汽车部件碰撞分析需要整晚时间,而现在通过HPC集群,同样… · 2026/11/4 15:22:13
带宽被谁吃光?终端用 bandwhich 快速定位指南 带宽被谁吃光?终端用 bandwhich 快速定位指南 【免费下载链接】bandwhich Terminal bandwidth utilization tool 项目地址: https://gitcode.com/gh_mirrors/ba/bandwhich
半夜,服务器出口带宽被顶满,你翻接口统计却查不到是谁干的。打… · 2026/11/4 15:57:52
Qwen3-VL-8B:如何用AI实现视觉推理与智能交互? Qwen3-VL-8B:如何用AI实现视觉推理与智能交互? 【免费下载链接】Qwen3-VL-8B-Thinking-unsloth-bnb-4bit 项目地址: https://ai.gitcode.com/hf_mirrors/unsloth/Qwen3-VL-8B-Thinking-unsloth-bnb-4bit
导语:Qwen3-VL-8B-Thinking模… · 2026/11/4 15:56:52
从零开始学AI22——集成学习 集成学习核心思想是“三个臭皮匠,顶个诸葛亮”,通过组合多个弱模型提升整体性能。三大流派:Bagging(如随机森林)并行训练、投票降方差,适合抗噪稳定场景;Boosting(如XGBoost… · 2026/11/4 15:55:51
Sill 音频管线深度剖析:AAC-ELD 128kbps 编码、10ms 分片与逐包漂移校正的精密同步机制 【免费下载链接】sill Any window from your Mac, live on your iPhone or iPad. Touch, Apple Pencil, trackpad and keys. Free, open source, no servers. 项目地址: https://gitcode.com/gh_mirrors/sill1/sill 点击查看 免费下载 Sill 是一款免费、开源的 Mac… · 2026/11/4 15:52:50
1.65 美元通关宝可梦:Awesome Decision Models 的 50 个决策模型游戏与 Demo 完整清单 【免费下载链接】awesome-decision-models A curated list of decision models (System One / typed decision models): hosted APIs, open-weight models, runtimes, SDKs, applications, benchmarks, and papers. 项目地址: https://gitcode.com/gh_mirrors/awes/… · 2026/11/4 15:51:50
Hermes Agent容器编排监控工具:Prometheus与Grafana配置 Hermes Agent容器编排监控工具:Prometheus与Grafana配置
Hermes Agent是一款功能强大的容器编排监控工具,能够帮助开发者和运维人员轻松实现对容器环境的全面监控。本文将详细介绍如何配置Prometheus与Grafana,以实现对Hermes Agent容器编排… · 2026/11/4 15:50:49
双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/4 3:16:49
STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/4 6:59:29
DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/4 7:02:38
AI辅助技术栈评估:提升研发决策效率60% 1. 项目背景与核心价值技术决策一直是研发团队面临的重大挑战。随着技术生态的快速演进,技术栈的选择、维护和迭代变得愈发复杂。我们团队在过去两年里,先后经历了三次重大技术栈迁移,每次都需要投入大量人力进行技术评估和风险分析。直到去年… · 2026/11/4 0:00:17
从生成Token到直接决策:Jev如何重塑AI Agent工程实践 1. 从"生成文字"到"拍板决策":Jev 到底在解决什么问题大多数人第一次接触大模型,脑子里建立的模型是"输入问题、输出文字"。你问它今天天气怎么样,它给你一段描述;你让它写个周报,它给你… · 2026/11/4 0:00:17
32G统一内存跑大模型:内存账、TPS实测与端云分流 想在一台 32G 统一内存的小主机上把大模型跑成"日常可用",这件事我前后折腾了小半年。标题里说的这台 Mac mini M6,是我们这次讨论的目标平台,具体到手规格以实物为准;但下面这套推算方法和实测思路,对任何统… · 2026/11/4 0:00:17
双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/4 3:16:49
STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/4 6:59:29
DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/4 7:02:38