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

MySQL多表查询实战指南:从SQL到XML映射的完整实现(2W+字深度解析)

MySQL多表查询实战指南:从SQL到XML映射的完整实现(2W+字深度解析)

第一章 多表查询基础与核心原理

1.1 关系型数据库设计范式

以电商系统为例的三范式实践:

-- 原始数据表(违反第三范式)
CREATE TABLE orders (
    order_id INT PRIMARY KEY,
    customer_name VARCHAR(50),
    product_name VARCHAR(50),
    product_category VARCHAR(20)
);

-- 规范化后的设计
CREATE TABLE customers (
    id INT PRIMARY KEY,
    name VARCHAR(50)
);

CREATE TABLE products (
    id INT PRIMARY KEY,
    name VARCHAR(50),
    category_id INT
);

CREATE TABLE orders (
    id INT PRIMARY KEY,
    customer_id INT,
    product_id INT
);

1.2 七种JOIN类型全解

-- 内连接(获取有订单的客户)
SELECT c.name, o.order_date 
FROM customers c
INNER JOIN orders o ON c.id = o.customer_id;

-- 左外连接(获取所有客户及其订单)
SELECT c.name, o.order_date
FROM customers c
LEFT JOIN orders o ON c.id = o.customer_id;

-- 全外连接模拟(MySQL不支持FULL OUTER JOIN)
SELECT c.name, o.order_date
FROM customers c
LEFT JOIN orders o ON c.id = o.customer_id
UNION
SELECT c.name, o.order_date
FROM customers c
RIGHT JOIN orders o ON c.id = o.customer_id;

1.3 子查询进阶应用

-- 相关子查询(查询每个客户的最近订单)
SELECT c.name, 
    (SELECT MAX(order_date) 
     FROM orders o 
     WHERE o.customer_id = c.id) AS last_order
FROM customers c;

-- 派生表查询(统计部门平均工资)
SELECT d.name, emp_stats.avg_salary
FROM departments d
JOIN (
    SELECT dept_id, AVG(salary) AS avg_salary
    FROM employees
    GROUP BY dept_id
) emp_stats ON d.id = emp_stats.dept_id;

第二章 MyBatis XML映射深度解析

2.1 基础映射标签详解

<!-- 订单基础映射 -->
<resultMap id="BaseOrderMap" type="com.example.Order">
    <id column="id" property="id"/>
    <result column="order_no" property="orderNumber"/>
    <result column="create_time" property="createTime"/>
</resultMap>

<!-- 包含客户信息的复杂映射 -->
<resultMap id="OrderWithCustomerMap" extends="BaseOrderMap" type="Order">
    <association property="customer" javaType="Customer">
        <id column="customer_id" property="id"/>
        <result column="customer_name" property="name"/>
        <result column="customer_email" property="email
http://www.dtcms.com/a/122023.html

相关文章:

  • [Windows] Gopeed-v1.7.0
  • HashMap、LinkedHashMap与TreeMap的核心特性与使用场景总结
  • Navicat 17 for Mac 数据库管理
  • C语言资源自动释放实现详解:基于GCC cleanup属性
  • Socket通信保护概论,Android系列
  • SAP-ABAP:SAP PO接口中System Landscape(SL Landscape Directory,SLD)作用详解
  • windows11下pytorch(cpu)安装
  • 记录一次SSH和SFTP服务分离后文件上传权限问题
  • AI比人脑更强,因为被植入思维模型【52】福格行为模型
  • 0303hooks-react-仿低代码平台项目
  • OSPF的数据报文格式【复习篇】
  • 算法基础—二分算法
  • STM32 vs ESP32:如何选择最适合你的单片机?
  • 网络协议学习
  • PDFtk
  • 2025年3月全国青少年软件编程等级考试(Python六级)试卷及答案
  • 带无源位置反馈气动V型调节开关球阀的特点解析-耀圣
  • find指令中使用正则表达式
  • C++中STL学习(一)——向量、栈、堆、集合
  • PyQt6实例_A股财报数据维护工具_解说并数据与完整代码分享
  • ISP的过程
  • 用户注册(阿里云手机验证码)
  • CNN(卷积神经网络)
  • 共工新闻社与韩国新华报社达成合作
  • Python | 第十四章 | 基于模块开发-出租系统
  • 如何设置 JVM 内存参数(-Xms、-Xmx、-Xss 等)?
  • 文件的操作
  • 自然语言处理入门6——RNN生成文本
  • 揭开 MCP 的神秘面纱:标准化 AI 上下文管理的未来(下)
  • 永磁同步电机 | 分类 / 转子结构 / FOC 控制 / 电路分析