当前位置: 首页 > 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.xdnf.cn/news/1103527.html

相关文章:

  • AWS控制台升级EKS版本
  • 小智AI模型接入MCP
  • 后台管理系统-权限管理
  • 深度体验飞算JavaAI:一场Java开发效率的革命
  • 【数据结构】8. 二叉树
  • React中Redux基础和路由介绍
  • React 的常用钩子函数在Vue中是如何设计体现出来的。
  • Qt 实现新手引导
  • QT控件 使用QtServer系统服务实现搭建Aria2下载后台服务,并使用Http请求访问Json-RPC接口调用下载退出
  • Grok-4 发布会图文总结
  • docker宿主机修改ip后起不来问题解决
  • 前端面试专栏-算法篇:22.树结构(二叉树、B树、红黑树)
  • 游戏开发日记
  • MyBatis02-mybatis-config.xml配置文件讲解
  • 【深度探究系列(5)】:前端开发打怪升级指南:从踩坑到封神的解决方案手册
  • 基于kafka的分布式日志收集与实时监控平台(原理,框架)
  • 黑马点评系列问题之P55优惠券秒杀 快捷键问题 Ctrl+D显示不出来老师给的界面
  • 液冷智算数据中心崛起,AI算力联动PC Farm与云智算开拓新蓝海(二)
  • 前端Vue.js面试题(2)
  • 【三维重建工具】NeRFStudio、3D GaussianSplatting、Colmap安装与使用指南
  • 飞书CEO谢欣:挑战巨头,打造AI新时代的Office
  • 20250710-2-Kubernetes 集群部署、配置和验证-网络组件存在的意义?_笔记
  • 用Netplan配置网桥bridge笔记250711
  • lodash不支持 Tree Shaking 而 lodash-es可以
  • STM32F407ZGT6天气时钟+实时温湿度显示(附源码)
  • Java结构型模式---组合模式
  • 瀚高数据库提交数据后,是否需要COMMIT(APP)
  • MyBatis 进阶:连接池、动态 SQL 与多表关联查询
  • SpringBoot 使用注解获取配置文件中的值
  • 机器学习-06(Optimization-自动调整学习率)