MySQL联表查询:多表关联与嵌套查询指南
引言
各位数据库爱好者们好!今天我们要挑战MySQL查询技能的高阶关卡——复杂查询 🚀。在真实业务场景中,数据往往分散在多个表中,就像拼图的各个碎片,只有掌握了多表查询的"拼图技巧",才能将它们组合成完整的信息图谱。本教程将带你深入理解多表连接、子查询、联合查询等高级技术,让你从"单表查询新手"成长为"多表操作高手"!💪
一、多表连接查询:数据关系的桥梁
1.1 INNER JOIN:内连接(交集查询)
内连接就像数学中的交集,只返回两表匹配的记录 🔍:
-- 基础语法
SELECT 列列表
FROM 表1
INNER JOIN 表2 ON 表1.列 = 表2.列;-- 查询订单及对应的客户信息
SELECT o.order_id,o.order_date,c.customer_name,c.phone
FROM orders o
INNER JOIN customers c ON o.customer_id = c.customer_id;
特点:
- 结果只包含两表都匹配的行
- 如果某行在一边没有匹配,则该行不会出现在结果中
- 性能通常较好(MySQL优化器会优先考虑)
1.2 LEFT JOIN:左外连接(左表全保留)
左连接就像"保底条款",左表数据全部保留,右表没有匹配则补NULL 🛡️:
-- 查询所有员工及其部门信息(包括未分配部门的员工)
SELECT e.employee_id,e.first_name,d.department_name
FROM employees e
LEFT JOIN departments d ON e.department_id = d.department_id;
典型应用场景:
- 统计时保留主表全部记录
- 查找没有关联记录的项(WHERE 右表.列 IS NULL)
- 确保主表数据完整性
1.3 RIGHT JOIN:右外连接(右表全保留)
右连接与左连接方向相反,但实际较少使用 🔄:
-- 查询所有部门及员工信息(包括没有员工的部门)
SELECT d.department_name,e.first_name
FROM employees e
RIGHT JOIN departments d ON e.department_id = d.department_id;
注意:RIGHT JOIN通常可以用LEFT JOIN重写,建议保持代码风格一致
1.4 多表连接实战技巧
自连接(同一表的不同实例):
-- 查询员工及其经理信息
SELECT e.employee_id,e.first_name AS employee_name,m.first_name AS manager_name
FROM employees e
LEFT JOIN employees m ON e.manager_id = m.employee_id;
多表JOIN:
-- 查询订单详情(客户+产品+订单项)
SELECT o.order_id,c.customer_name,p.product_name,oi.quantity,oi.unit_price
FROM orders o
JOIN customers c ON o.customer_id = c.customer_id
JOIN order_items oi ON o.order_id = oi.order_id
JOIN products p ON oi.product_id = p.product_id;
JOIN优化建议:
- 为连接条件列建立索引
- 大表JOIN小表效率更高
- 避免连接超过5个表,考虑拆解查询
- 使用EXPLAIN分析执行计划
二、子查询:查询中的查询
2.1 标量子查询(返回单个值)
标量子查询就像公式中的变量,返回单一值 🔢:
-- 查询高于平均薪资的员工
SELECT employee_id, first_name, salary
FROM employees
WHERE salary > (SELECT AVG(salary) FROM employees);-- 在SELECT中使用
SELECT product_id,product_name,price,(SELECT AVG(price) FROM products) AS avg_price,price - (SELECT AVG(price) FROM products) AS diff
FROM products;
特点:
- 必须且只能返回一行一列
- 可以出现在SELECT、WHERE、HAVING等子句中
- 通常性能较好
2.2 列子查询(返回一列多行)
列子查询生成一个值列表,常与IN、ANY/SOME、ALL配合使用 📜:
-- 查询没有订单的客户
SELECT customer_id, customer_name
FROM customers
WHERE customer_id NOT IN (SELECT DISTINCT customer_id FROM orders
);-- 使用EXISTS替代IN(大数据量时更高效)
SELECT c.customer_id, c.customer_name
FROM customers c
WHERE NOT EXISTS (SELECT 1 FROM orders o WHERE o.customer_id = c.customer_id
);
操作符对比:
操作符 | 描述 |
---|---|
IN / NOT IN | 等于/不等于列表中的任何值 |
ANY / SOME | 满足子查询结果的任一条件 |
ALL | 满足子查询结果的所有条件 |
2.3 行子查询(返回一行多列)
行子查询返回单行多列,可以一次比较多个字段 🧵:
-- 查询与特定员工薪资和职位都相同的其他员工
SELECT employee_id, first_name, salary, job_id
FROM employees
WHERE (salary, job_id) = (SELECT salary, job_idFROM employeesWHERE employee_id = 123
)
AND employee_id <> 123;
2.4 表子查询(返回多行多列)
表子查询生成临时表,通常用于FROM子句或JOIN 🏗️:
-- 查询各部门薪资最高的员工
SELECT e.department_id,e.employee_id,e.first_name,e.salary
FROM employees e
JOIN (SELECT department_id, MAX(salary) AS max_salaryFROM employeesGROUP BY department_id
) dept_max ON e.department_id = dept_max.department_id AND e.salary = dept_max.max_salary;
优化技巧:
- 给子查询结果起别名
- 考虑使用JOIN替代子查询
- 复杂子查询可以改为临时表
三、联合查询:结果集的合并
3.1 UNION:去重合并
UNION像数学中的并集,合并并去除重复行 ✨:
-- 合并两个查询结果(去重)
SELECT product_id FROM current_products
UNION
SELECT product_id FROM discontinued_products;
特点:
- 两个SELECT的列数必须相同
- 对应列的数据类型必须兼容
- 结果列名取自第一个SELECT
- 默认会去除重复行(性能开销)
3.2 UNION ALL:简单合并
UNION ALL直接拼接结果,保留所有行(包括重复)📦:
-- 合并两个查询结果(保留重复)
SELECT customer_id FROM domestic_customers
UNION ALL
SELECT customer_id FROM international_customers;
性能优势:
- 比UNION快(不需要去重)
- 适合确定没有重复或需要保留重复的场景
3.3 联合查询应用场景
分表数据合并:
-- 合并2022和2023年的订单数据
SELECT * FROM orders_2022
UNION ALL
SELECT * FROM orders_2023;
复杂条件组合:
-- 查询高价值客户或最近活跃客户
SELECT customer_id FROM customers WHERE total_spend > 10000
UNION
SELECT customer_id FROM orders
WHERE order_date > DATE_SUB(NOW(), INTERVAL 30 DAY);
注意事项:
- 只能有一个ORDER BY子句,放在最后
- 可以在各个SELECT中使用WHERE过滤
- 大数据量时考虑分页处理
四、临时表与派生表
4.1 临时表:会话级存储
临时表就像便签纸,会话结束自动销毁 🗒️:
-- 创建临时表
CREATE TEMPORARY TABLE temp_sales AS
SELECT product_id,SUM(quantity) AS total_quantity
FROM order_items
GROUP BY product_id;-- 使用临时表
SELECT p.product_name,t.total_quantity
FROM products p
JOIN temp_sales t ON p.product_id = t.product_id
ORDER BY t.total_quantity DESC;-- 会话结束自动删除
特点:
- 仅对当前会话可见
- 可以与普通表同名(优先使用临时表)
- 适合存储中间结果
4.2 派生表:查询中的临时表
派生表是"一次性"临时表,只在查询期间存在 ⏳:
-- FROM子句中的派生表
SELECT d.department_name,emp_stats.avg_salary
FROM departments d
JOIN (SELECT department_id,AVG(salary) AS avg_salary,COUNT(*) AS emp_countFROM employeesGROUP BY department_id
) emp_stats ON d.department_id = emp_stats.department_id
WHERE emp_stats.emp_count > 5;
优化建议:
- 给派生表起有意义的别名
- 复杂派生表考虑改为临时表
- MySQL 8.0+支持WITH子句(CTE)更清晰
4.3 WITH子句(CTE):更优雅的临时表
公共表表达式(CTE)让复杂查询更清晰 🌟:
-- 使用WITH定义CTE
WITH dept_stats AS (SELECT department_id,AVG(salary) AS avg_salary,COUNT(*) AS emp_countFROM employeesGROUP BY department_id
),
high_salary_depts AS (SELECT department_idFROM dept_statsWHERE avg_salary > 8000
)
SELECT d.department_name,e.first_name,e.salary
FROM departments d
JOIN employees e ON d.department_id = e.department_id
JOIN high_salary_depts h ON d.department_id = h.department_id
ORDER BY d.department_name, e.salary DESC;
CTE优势:
- 提高复杂查询的可读性
- 可以引用前面定义的CTE
- 支持递归查询(处理树形结构)
五、综合案例:电商数据分析实战
5.1 多表关联分析
-- 查询客户购买行为分析
SELECT c.customer_id,c.customer_name,COUNT(DISTINCT o.order_id) AS order_count,SUM(oi.quantity * oi.unit_price) AS total_spend,MAX(o.order_date) AS last_order_date
FROM customers c
LEFT JOIN orders o ON c.customer_id = o.customer_id
LEFT JOIN order_items oi ON o.order_id = oi.order_id
GROUP BY c.customer_id, c.customer_name
HAVING order_count > 0
ORDER BY total_spend DESC
LIMIT 10;
5.2 复杂子查询应用
-- 查询每个品类最畅销的3个产品
WITH product_sales AS (SELECT p.category_id,p.product_id,p.product_name,SUM(oi.quantity) AS total_quantity,RANK() OVER (PARTITION BY p.category_id ORDER BY SUM(oi.quantity) DESC) AS sales_rankFROM products pJOIN order_items oi ON p.product_id = oi.product_idGROUP BY p.category_id, p.product_id, p.product_name
)
SELECT c.category_name,ps.product_name,ps.total_quantity
FROM product_sales ps
JOIN categories c ON ps.category_id = c.category_id
WHERE ps.sales_rank <= 3
ORDER BY c.category_name, ps.sales_rank;
5.3 递归查询处理层级数据
-- 查询组织架构层级(MySQL 8.0+)
WITH RECURSIVE org_hierarchy AS (-- 基础查询:找出所有顶级管理者SELECT employee_id,first_name,manager_id,1 AS levelFROM employeesWHERE manager_id IS NULLUNION ALL-- 递归查询:找出下级员工SELECT e.employee_id,e.first_name,e.manager_id,oh.level + 1FROM employees eJOIN org_hierarchy oh ON e.manager_id = oh.employee_id
)
SELECT LPAD('', (level-1)*4, ' ') || first_name AS employee_name,level
FROM org_hierarchy
ORDER BY level, first_name;
总结 🎯
通过本教程,我们系统掌握了MySQL复杂查询的核心技能 🎓:
- 多表连接:学会了INNER JOIN、LEFT JOIN等连接方式及应用场景
- 子查询:掌握了标量、列、行、表子查询的使用方法
- 联合查询:理解了UNION和UNION ALL的区别与适用场景
- 临时表:认识了临时表、派生表和CTE的用法
关键收获:
- 多表连接是关系型数据库的核心特性
- 子查询可以解决复杂的数据筛选问题
- 联合查询适合合并多个结果集
- 临时表和CTE能提高复杂查询的可读性和性能
下一步学习建议:
- 在实际业务场景中练习复杂查询
- 学习使用EXPLAIN分析查询性能
- 探索窗口函数等高级分析功能
- 研究查询优化技巧和索引策略
PS:如果你在学习过程中遇到问题,别慌!欢迎在评论区留言,我会尽力帮你解决!😄
相关文章:
MySQL联表查询:多表关联与嵌套查询指南
引言 各位数据库爱好者们好!今天我们要挑战MySQL查询技能的高阶关卡——复杂查询 🚀。在真实业务场景中,数据往往分散在多个表中,就像拼图的各个碎片,只有掌握了多表查询的"拼图技巧",才能将它们…...
QBasic 一款古老的编程语言在现代学习中的价值(附程序)
QBasic(Quick Beginner’s All-purpose Symbolic Instruction Code)是微软公司于 1991 年推出的一款简单易学的编程语言,作为BASIC语言的变种,它曾广泛应用于教育领域和初学者编程入门。尽管在当今Python、Java等现代编程语言主导…...
基于Backtrader库的均线策略实现与回测
本文将通过Python语言和强大的Backtrader库,详细介绍如何实现一个基于均线的简单交易策略,并进行历史数据的回测。将一步步构建这个策略,从数据获取、策略定义到回测结果分析,帮助你深入理解并掌握这一过程。 一、环境配置与库安装 1.1 安装必要的Python库 确保你已经安…...
Elasticsearch 分词与字段类型(keyword vs. text)面试题
Elasticsearch 分词与字段类型(keyword vs. text)面试题 🔍 目录 基础概念底层存储查询影响多字段聚合与排序分词器实战排查总结基础概念 💡 问题1:Elasticsearch 中的 keyword 和 text 类型有什么区别? 👉 查看参考答案 对比项keywordtext分词(Analysis)❌ 不进…...
Java 后端给前端传Long值,精度丢失的问题与解决
为什么后端 Long 类型 ID 要转为 String? 在前后端分离的开发中,Java 后端通常使用 Long 类型作为主键 ID(如雪花算法生成的 ID)。但如果直接将 Long 返回给前端,可能会导致前端精度丢失的问题,特别是在 J…...
【C++】 —— 笔试刷题day_29
一、排序子序列 题目解析 一个数组的连续子序列,如果这个子序列是非递增或者非递减的;这个连续的子序列就是排序子序列。 现在给定一个数组,然后然我们判断这个子序列可以划分成多少个排序子序列。 例如:1 2 3 2 2 1 可以划分成 …...
高光谱遥感图像处理之数据分类的fcm算法
基于模糊C均值聚类(FCM)的高光谱遥感图像分类MATLAB实现示例 %% FCM高光谱图像分类示例 clc; clear; close all;%% 数据加载与预处理 % 加载示例数据(此处使用公开数据集Indian Pines的简化版) load(indian_pines.mat); % 包含变…...
衡量 5G 和未来网络的安全性
大家读完觉得有帮助记得关注和点赞!!! 抽象 在当今日益互联和快节奏的数字生态系统中,移动网络(如 5G)和未来几代(如 6G)发挥着关键作用,必须被视为关键基础设施。确保其…...
【Vite】前端开发服务器的配置
定义一些开发服务器的行为和代理规则 服务器的基本配置 server: {host: true, // 监听所有网络地址port: 8081, // 使用8081端口open: true, // 启动时自动打开浏览器cors: true // 启用CORS跨域支持 } 代理配置 proxy: {/api: {target: https://…...
文章记单词 | 第85篇(六级)
一,单词释义 verb /vɜːrb/- n. 动词wave /weɪv/- v. 挥手;波动;挥舞 /n. 波浪;波;挥手add /d/- v. 增加;添加;补充说liberal /ˈlɪbərəl/- adj. 自由的;开明的;慷…...
通过实例讲解螺旋模型
目录 一、螺旋模型的核心概念 二、螺旋模型在电子商城系统开发中的应用示例 第 1 次螺旋:项目启动与风险初探...
(面试)Android各版本新特性
Android 6.0 (Marshmallow, API 23) 运行时权限管理:用户可在应用运行时动态授予或拒绝权限,取代安装时统一授权4。Doze模式与应用待机:优化后台耗电,延长设备续航5。指纹识别支持:原生API支持指纹身份验证。 Android…...
如何有效的开展接口自动化测试?
🍅 点击文末小卡片,免费获取软件测试全套资料,资料在手,涨薪更快 一、简介 接口自动化测试是指使用自动化测试工具和脚本对软件系统中的接口进行测试的过程。其目的是在软件开发过程中,通过对接口的自动化测试来提高测…...
当 PyIceberg 和 DuckDB 遇见 AWS S3 Tables:打造 Serverless 数据湖“开源梦幻组合”
引言 在一些大数据分析场景比如电商大数据营销中,我们需要快速分析存储海量用户行为数据(如浏览、加购、下单),以进行用户行为分析,优化营销策略。传统方法依赖 Spark/Presto 集群或 Redshift 查询 S3 上的 Parquet/O…...
泰迪杯特等奖案例深度解析:基于MSER-CNN的商品图片字符检测与识别系统设计
(第四届泰迪杯数据挖掘挑战赛特等奖案例全流程拆解) 一、案例背景与核心挑战 1.1 行业痛点与场景需求 在电商平台中,商品图片常包含促销文字(如“3折起”“限时秒杀”),但部分商家采用隐蔽文字误导消费者(如“起”字极小或位于边角)。传统人工审核效率低(日均处理量…...
开发工具指南
后端运维场用工具 工具文档简介1panel安装指南运维管理面板网盘功能介绍网盘jenkins可以通过1panel 进行安装jpom辅助安装文档后端项目发布工具...
将 Element UI 表格元素导出为 Excel 文件(处理了多级表头和固定列导出的问题)
import { saveAs } from file-saver import XLSX from xlsx /*** 将 Element UI 表格元素导出为 Excel 文件* param {HTMLElement} el - 要导出的 Element UI 表格的 DOM 元素* param {string} filename - 导出的 Excel 文件的文件名(不包含扩展名)*/ ex…...
图像对比度调整(局域拉普拉斯滤波)
一、背景介绍 之前刷对比度相关调整算法,找到效果不错,使用局域拉普拉斯做图像对比度调整,尝试复现和整理了下相关代码。 二、实现流程 1、基本原理 对输入图像进行高斯金字塔拆分,对每层的每个像素都针对性处理,生产…...
【控制波形如何COPY并无痛使用】
控制波形如何COPY并无痛使用 波形分析思路概况记录波形 波形分析 通过逻辑分析仪可以解析到设备的控制波形,在一些对于电机控制类的设备上显得尤为重要。通过分析不同波形,将PWM的波形存储到程序中得以实现,并建立合理的数据结构。 思路概…...
CSDN-2024《AGP-Net: Adaptive Graph Prior Network for Image Denoising》
推荐深蓝学院的《深度神经网络加速:cuDNN 与 TensorRT》,课程面向就业,细致讲解CUDA运算的理论支撑与实践,学完可以系统化掌握CUDA基础编程知识以及TensorRT实战,并且能够利用GPU开发高性能、高并发的软件系统…...
使用IDEA开发Spark Maven应用程序【超详细教程】
一、创建项目 创建maven项目 二、修改pom.xml文件 创建好项目后,在pom.xml中改为: <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w…...
深入探索MCP通信:构建高效的MCP Client
在现代软件开发中,高效的通信机制是构建复杂系统的关键。MCP(Model-Controller-Proxy)架构作为一种新兴的开发模式,提供了强大的工具来实现客户端与服务器之间的高效通信。本文将通过实际代码示例,详细探讨如何使用MCP…...
【第76例】IPD流程实战:华为业务流程架构BPA进化的4个阶段
目录 简介 第一个阶段,业务流程架构BPA1.0 第二个阶段,业务流程架构BPA2.0 BPA3.0、4.0 作者简介 简介 不管业务是复杂还是简单,企业内外的所有事情、所有业务都最终会归于流程。 甚至是大家经常说的所谓的各种方法论,具体的落脚点还是在流程上。 比如把大象放进冰…...
25-05-16计算机网络学习笔记Day1
深入剖析计算机网络:今日学习笔记总结 本系列博客源自作者在大二期末复习计算机网络时所记录笔记,看的视频资料是B站湖科大教书匠的计算机网络微课堂,每篇博客结尾附书写笔记(字丑见谅哈哈) 视频链接地址 一、计算机网络基础概念 …...
车道线检测----CLRNet
继续更新本系列,本文CLRNet,文章主要目的是弄懂论文关键部分,希望对文章细节有一个深刻的理解,有帮助的话,请收藏支持。 CLRNet:用于车道检测的跨层精炼网络 摘要 车道在智能车辆的视觉导航系统中至关重要…...
maven和npm区别是什么
这是一个很容易搞糊涂新手的问题,反正我刚开始从课堂的知识转向项目网站开发时,被这些问题弄得晕头转向,摸不着头脑,学的糊里糊涂,所以,写了这么久代码,也总结一下,为后来者传授下经…...
【SpringBoot】从零开始全面解析SpringMVC (二)
本篇博客给大家带来的是SpringBoot的知识点, 本篇是SpringBoot入门, 介绍SpringMVC相关知识. 🐎文章专栏: JavaEE进阶 🚀若有问题 评论区见 👉gitee链接: 薯条不要番茄酱 ❤ 欢迎大家点赞 评论 收藏 分享 如果你不知道分享给谁,那就分享给薯条…...
Python连接redis
第一步安装redis Releases microsoftarchive/redis 安装时勾上所有能勾上的选项下一步即可 在CMD中pip install redis 安装redis pip install redis -i https://pypi.tuna.tsinghua.edu.cn/simple 配置redis 在redis安装目录下找到 修改 line 57 bind 0.0.0.0 line…...
Unity3D Overdraw性能优化详解
前端 在 Unity3D 开发中,Overdraw(过度绘制) 是一个常见的性能问题,尤其在移动端设备上可能导致严重的帧率下降。以下是关于 Overdraw 的详细解析和优化方法: 对惹,这里有一个游戏开发交流小组࿰…...
uni-app 中适配 App 平台
文章目录 前言✅ 1. App 使用的 Runtime 架构:**WebView 原生容器(plus runtime)**📌 技术栈核心: ✅ 2. WebView Native 的通信机制详解(JSBridge)📤 Web → Native 调用…...
[CSS3]属性增强1
字体图标 使用字体图标可以实现简洁的图标效果, 字体图标展示的是图标, 本质是字体, 适合简单, 颜色单一的图标 优势 灵活性: 灵活的修改样式, 比如尺寸, 颜色等轻量级: 体积小, 渲染快, 降低服务器请求次数兼容性: 几乎兼容所有主流浏览器使用方便: 下载字体包使用字体图标…...
【Python+flask+mysql】网易云数据可视化分析(全网首发)
网易云数据可视化分析 项目概述 网易云数据可视化分析系统是一个基于Flask框架开发的Web应用,旨在对网易云音乐平台的用户、歌曲、专辑、歌单等数据进行全面的可视化分析。该系统通过直观的图表、表格和词云等形式,展示网易云音乐的数据分布特征&#…...
项目版本管理和Git分支管理方案
文章目录 一、团队协作1.项目团队与职责2.项目时间线与里程碑3.风险评估与应对措施4.跨团队同步会议(定期)跨团队同步会议(双周) 5.版本升级决策树6.边界明确与路标制定a.功能边界划分b.项目路标制定b1、项目路标制定核心要素b2. 路标表格模板…...
Java 21 + Spring Boot 3.5:AI驱动的高性能框架实战
简介 在微服务架构日益普及的今天,如何构建一个既高性能又具备AI驱动能力的后端系统成为开发者关注的焦点。本篇文章将深入探讨Java 21与Spring Boot 3.5的结合,展示如何通过Vector API和JIT优化实现单线程性能提升30%,并利用飞算JavaAI生成智能重试机制和超时控制代码,解…...
【MySQL】索引太多会怎样?
在 MySQL 中,虽然索引可以显著提高查询效率,但过多的索引(如超过 5-6 个)会带来以下弊端: 1. 存储空间占用增加 每个索引都需要额外的磁盘空间存储索引树(BTree)。对于大表来说,多个…...
Flask 是否使用类似 Spring Boot 的核心注解机制
Flask 和 Spring Boot 架构风格不同:Spring Boot 是“注解驱动的全家桶框架”,而 Flask 是“微核心 + 显式扩展的 Python 微框架”。因此: ❌ Flask 没有类似 Spring Boot 的“核心注解机制”(如 @SpringBootApplication),而是使用函数装饰器(decorator)作为核心语法特…...
学习threejs,使用Physijs物理引擎,各种constraint约束限制
👨⚕️ 主页: gis分享者 👨⚕️ 感谢各位大佬 点赞👍 收藏⭐ 留言📝 加关注✅! 👨⚕️ 收录于专栏:threejs gis工程师 文章目录 一、🍀前言1.1 ☘️Physijs 物理引擎1.1.1 ☘️…...
城市排水管网流量监测系统解决方案
一、方案背景 随着工业的不断发展和城市人口的急剧增加,工业废水和城市污水的排放量也大量增加。目前,我国已成为世界上污水排放量大、增加速度快的国家之一。然而,总体而言污水处理能力较低,有相当部分未经处理的污水直接或间接排…...
redis数据结构-11(了解 Redis 持久性选项:RDB 和 AOF)
了解 Redis 持久性选项:RDB 和 AOF Redis 提供了多个持久性选项,以确保数据持久性并防止在服务器发生故障或重启时丢失数据。了解这些选项对于为您的特定使用案例选择正确的策略、平衡性能和数据安全至关重要。本章节将深入探讨 Redis 中的两种主要持久…...
掌握 Kotlin Android 单元测试:MockK 框架深度实践指南
掌握 Kotlin Android 单元测试:MockK 框架深度实践指南 在 Android 开发中,单元测试是保障代码质量的核心手段。但面对复杂的依赖关系和 Kotlin 语言特性,传统 Mock 框架常显得力不从心。本文将带你深入 MockK —— 一款专为 Kotlin 设计的 …...
2025/5/16
第一题 A. 例题4.1.2 潜水 题目描述 在马其顿王国的ohide湖里举行了一次潜水比赛。 其中一个项目是从高山上跳下水,再潜水达到终点。 这是一个团体项目,一支队伍由n人组成。在潜水时必须使用氧气瓶,但是每只队伍只有一个氧气瓶。 最多两…...
Detected for tasks ‘compileDebugJavaWithJavac‘ (17) and ‘kspDebugKotlin‘ (21).
1.报错 在导入Android源码的时候出现以下错误:Inconsistent JVM-target compatibility detected for tasks compileDebugJavaWithJavac (17) and kspDebugKotlin (21).。 Execution failed for task :feature-repository:kspDebugKotlin. > Inconsistent JVM-ta…...
嵌入式单片机中STM32F1演示寄存器控制方法
该文以STM32F103C8T6为示例,演示如何使用操作寄存器的方法点亮(关闭LED灯),并讲解了如何调试,以及使用宏定义。 第一:操作寄存器点亮LED灯。 (1)首先我们的目的是操作板子上的LED2灯,对其实现点亮和关闭操作。打开STM32F103C8T6的原理图,找到LED2的位置。 可以看到…...
【带文档】网上点餐系统 springboot + vue 全栈项目实战(源码+数据库+万字说明文档)
📌 一、项目概括 本系统共包含三个角色: 管理员:系统运营管理者 用户:点餐消费用户 美食店:上传菜品与处理订单的店铺账号 通过对这三类角色的权限与业务分工设计,系统实现了点餐流程的全链路数字化&a…...
Spring Cloud:Gateway(统一服务入口)
Api 网关 也是一种服务,就是通往后端的唯一入口,类似于整个微服务架构的门面,所有的外部客户端进行访问,都需要经过它来进行过滤和调度,类似于公司的前台 而Spring Cloud Gateway就是Api网关的一种具体实现 网关的核心…...
Perl测试起步:从零到精通的完整指南
阅读原文 5.2 为什么你的Perl代码总是出问题?因为你还没开始测试! "我的代码昨天还能运行,今天就莫名其妙报错了!"、"我只是改了一个小功能,结果整个系统都崩溃了"、"这段代码不是我写的&am…...
【前端优化】vue2 webpack4项目升级webpack5,大大提升运行速度
记录一下过程 手里有个老项目,vue2webpack4 项目很大,每次运行、运行都要将近10分钟 现在又要往里面写很多东西,再不优化,开发着会更难受,所以决定先将它升级至webpack5 最初失败的尝试 直接在项目里安装了webpack5 但…...
【蓝桥杯省赛真题50】python字母比较 第十五届蓝桥杯青少组Python编程省赛真题解析
python字母比较 第十五届蓝桥杯青少年组python比赛省赛真题详细解析 博主推荐 所有考级比赛学习相关资料合集【推荐收藏】1、Python比赛 信息素养大赛Python编程挑战赛 蓝桥杯python选拔赛真题详解...
学习以任务为中心的潜动作,随地采取行动
25年5月来自香港大学、OpenDriveLab 和智元机器人的论文“Learning to Act Anywhere with Task-centric Latent Actions”。 通用机器人应该在各种环境中高效运行。然而,大多数现有方法严重依赖于扩展动作标注数据来增强其能力。因此,它们通常局限于单一…...
《数据结构初阶》【二叉树 精选9道OJ练习】
【二叉树 精选9道OJ练习】目录 前言:二叉树的OJ练习[144. 二叉树的前序遍历](https://leetcode.cn/problems/binary-tree-preorder-traversal/)题目介绍方法一:[104. 二叉树的最大深度](https://leetcode.cn/problems/maximum-depth-of-binary-tree/)题目…...