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

相关文章:

  • 蔚来测开一面:HashMap从1.7开始到1.8的过程,既然都解决不了并发安全问题,为什么还要进一步解决环形链表的问题?
  • 前端面试专栏-算法篇:23. 图结构与遍历算法
  • USB一线连多屏?Display Link技术深度解析
  • React中Redux基础和路由介绍
  • 适配多场景,工业显示器让操作更高效
  • 前端八股-promise
  • Spring的事务控制——学习历程
  • C++设计秘籍:为什么所有参数都需类型转换时,非成员函数才是王道?
  • Python-正则表达式-信息提取-滑动窗口-数据分发-文件加载及分析器-浏览器分析-学习笔记
  • (补充)RS422
  • Qt 实现新手引导
  • 分布式推客系统全栈开发指南:SpringCloud+Neo4j+Redis实战解析
  • 【世纪龙科技】几何G6新能源汽车结构原理教学软件
  • 【龙泽科技】新能源汽车维护与动力蓄电池检测仿真教学软件【吉利几何G6】
  • 重构下一代智能电池“神经中枢”:GCKontrol定义高性能BMS系统级设计标杆
  • Java :T extends Comparable<? super T> 和 T extends Comparable<T>的区别
  • 李沐动手学深度学习Pytorch-v2笔记【07自动求导代码实现】
  • 标准化模型格式ONNX介绍:打通AI模型从训练到部署的环节
  • 第十五章 STL(stack、queue、list、set、map容器使用)
  • Nginx 添加 Stream 模块(不覆盖已安装内容)
  • Java 中使用 Stream 将 List 转换为 Map 实战笔记(生产级版)
  • 【Freertos实战】零基础制作基于stm32的物联网温湿度检测(教程非常简易)持续更新中.........
  • 计算机网络第三章(5)——数据链路层《广域网》
  • 【网络编程】KCP——可靠的 UDP 传输协议——的知识汇总
  • 触控屏gt1947
  • 数据治理到底是什么?搞清这四件事,你就彻底明白了!
  • 【C++】内联函数inline以及 C++入门(4)
  • 静态路由综合配置实验报告
  • python实现DoIP基本通信(收发报文)
  • 深入探索Kafka Streams:企业级实时数据处理实践指南