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

多表查询-2-多表查询概述

多表关系-2-多表查询概述

  • 多表查询概述
    • 为什么需要多表查询?🤔
    • 概述
    • 笛卡尔积
    • 多表查询分类

多表查询概述

在数据库的世界里, 多表查询是非常常见的一种操作. 当我们有多个表, 并且想要从这些表中提取信息时, 多表查询就成了我们的得力助手.

为什么需要多表查询?🤔

想象一下, 你正在管理一个电商平台的数据库, 里面有一个订单表(orders)、一个用户表(users)和一个商品表(`products). 每个表中都包含了大量的数据, 单独查询这些表时, 能拿到的只是某一部分的信息. 但是, 假如你需要查询一个特定用户的订单, 并且希望能看到订单里购买了哪些商品, 那怎么做呢?

答案就是:多表查询!通过这种方式,我们可以从多个表中获取相关数据,并将它们结合起来,形成一个完整的视图。

概述

顾名思义, 多表查询指的是从多张表中查询数据

笛卡尔积

笛卡尔乘积是指在数学中, 两个集合 A集合B集合 的所有组合情况. (再多表查询时, 需要消除无效的笛卡尔积)

select *
from 表A, 表B;

这样子查询出来的结果就是两张表所有数据相互组合的结果, 如下所示

笛卡尔积示意图

但是我们需要的数据并不是这样子的, 所以我们需要使用 WHERE 筛选出对我们有用的数据

select *
from 表A, 表B
where 条件;

多表查询示意图

  • 注意事项

    使用上面例子来说, 我们选择的是 学生信息表选课记录表 进行的一个多表查询, 但是我设计的表不太适合讲这里, 我们先假设学生的学号 student_no 与选课记录表中的学生id student_id 有关联

    select *
    from students,grades
    where students.student_no = grades.student_id;
    

    但是, 我们现在有一个新入学的学生, 还没有分配学号, 那么, 他的student_no会为null, 此时的多表查询会缺失掉该同学的数据,因为我们使用 WHERE 匹配不到该同学的两张表的关联数据, 所以哪怕有选课也查询不到

    这是一个需要注意的地方, 当然实际情况一般都不会是这样, 一般是入职员工未分配部门然后查询出来没有该员工

多表查询分类

  1. 连接查询

    内连接: 相当于查询 AB 交集部分数据
    外连接:
    左外连接: 查询左表所有数据, 以及两张表交集部分数据
    右外连接: 查询右表所有数据, 以及两张表交集部分数据
    自连接: 当前表与自身的连接查询, 自连接必须使用表别名

  2. 子查询

    子查询就是 SELECT 查询是另一个查询的附属. 在 MySQL 中可以嵌套多个查询, 在外面一层的查询中使用里面一层查询产生的结果集. 这样就不是执行两个(或者多个)独立的查询, 而是执行包含一个(或者多个)子查询的单独查询

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

相关文章:

  • 黑马点评系列问题之P55优惠券秒杀 快捷键问题 Ctrl+D显示不出来老师给的界面
  • 第八章 STM32之IAP编程
  • mysql数据库导入导出命令
  • ARM架构CPU的市场和生态
  • 欢乐熊大话蓝牙知识26:想让设备秒连?Connection Interval 配得对吗?
  • 零碳园区:安科瑞EMS如何破解新能源消纳难与高耗能产业转型困局
  • 锁的艺术:从Mutex到ReentrantLock,掌握并发编程的脉搏
  • 大模型使用
  • Qt 实现新手引导
  • Windows解决 ping 127.0.0.1 一般故障问题
  • unity 有打击感的图片,怎么做动画,可以表现出良好的打击效果
  • STM32串口通信(寄存器与hal库实现)
  • 2025年7月11日学习笔记一周归纳——模式识别与机器学习
  • 高校智慧教室物联网系统设计与实现
  • 《磁力下载工具实测:资源搜索+高速下载一站式解决方案》
  • 串行数据检测器,检测到011,Y输出1,否则为0.
  • JavaScript加强篇——第五章 DOM节点(加强)与BOM
  • 网安系列【18】之SpringBoot漏洞
  • React Three Fiber 实现 3D 模型点击高亮交互的核心技巧
  • 小架构step系列11:单元测试引入
  • Rocky Linux上使用NVM安装Node.js 18
  • 老系统改造增加初始化,自动化数据源配置(tomcat+jsp+springmvc)
  • 大数据时代UI前端的用户体验设计新思维:以数据为驱动的情感化设计
  • golang -gorm 增删改查操作,事务操作
  • 分布式推客系统全栈开发指南:SpringCloud+Neo4j+Redis实战解析
  • Neo4j启动
  • 从一到无穷大 #47:浅谈对象存储加速
  • 基于vscode的go环境安装简介
  • 企业级LLM知识库:构建智能知识管理平台,赋能业务增长
  • 降本增效!上云真香!