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

【MySQL 10】表的内外连接 (带思维导图)

文章目录

  • 🌈 一、内连接
    • ⭐ 0. 准备工作
    • ⭐ 1. 隐式内连接
    • ⭐ 2. 显式内连接
  • 🌈 二、外连接
    • ⭐ 0. 准备工作
    • ⭐ 1. 左外连接
    • ⭐ 2. 右外连接

在这里插入图片描述

🌈 一、内连接

  • 内连接实际上就是利用 where 子句对两张表形成的笛卡儿积进行筛选,之前所有的查询都是内连接,也是在开发过程中使用的最多的连接查询。
  • 内连接查询的是两张表交集部分的数据。
  • 内连接分为隐式内连接和显式内连接,隐式内连接和显式内连接除了写法不同之外,查询的结果是一致的

image-20240817223305285

⭐ 0. 准备工作

  • 当前有三张表,分别是:部门表 dept,员工表 emp,薪资等级表 salgrade,之后的查询工作主要依赖于这三张表进行。
    • 这三张表各自包含的字段和每个字段的内容如下。
  1. 员工表 emp:员工编号 (empno)、员工姓名 (ename)、员工职位 (job)、员工领导的编号 (mgr)、雇佣时间 (hiredate)、月薪 (sal)、奖金 (comm)、部门编号 (deptno)。

image-20240817104531316

image-20240817104611038

  1. 部门表 dept:部门编号 (deptno)、部门名称 (dname)、部门所在地 (loc)。

image-20240817104818532

image-20240817104856942

  1. 薪资登记表 salgrade:等级 (grade)、此等级最低工资 (losal)、此等级最高工资 (hisal)。

image-20240817105133021

image-20240817105108090

⭐ 1. 隐式内连接

  • 之前的所有查询都属于隐式内连接。
select 字段列表 from1,2 where 条件 ... ;

案例:显示 SMITH 的名字和部门名称

  • 对员工表 emp 和部门表 dept 作笛卡尔积,在 where 子句中指定使用员工表中的部门表含与部门表中的部门编号过滤迪科尔基,并且指定员工姓名为 SMITH。

image-20240817214526315

⭐ 2. 显式内连接

select 字段列表 from1 [inner] join2 on 连接条件 ... and 其他条件;
  • 显式内连接才是标准的内连接写法

案例:显示 SMITH 的名字和部门名称

  • 在 on 子句中指定内连接的连接条件为员工表的部门编号等于部门表的部门编号,再在 and 之后指定其他筛选条件为员工姓名 ename = ‘SMITH’。

image-20240817221027758

🌈 二、外连接

  • 外连接分为左外连接右外连接

⭐ 0. 准备工作

  • 创建学生表:表中包含 id 和名字 name 两个字段。

image-20240817221609725

image-20240817221706662

  • 创建成绩表:表中包含 id 和成绩 grade 这两个字段。
    • 插入数据:让 id 为 1、2、11 的同学有成绩,而 3、4 号同学没有成绩,学生表中并没有 11 号同学。

image-20240817221919723

image-20240817221959285

⭐ 1. 左外连接

select 字段列表 from1 left [outer] join2 on 条件 ...  and 其他条件;
  • 左外连接查询的是表 1 的全部数据,让表 2 按照条件与表 1 进行拼接,如果条件不满足,则用 null 进行拼接。

image-20240817223022561

案例:查询所有学生的成绩,如果这个学生没有成绩,也要将学生的个人信息显示出来

  • 要将学生表中的内容完全显示出来,将学生表 student 设为左表即可使用左外连接。如果左表中的某条记录根据连接条件没有找到匹配的右表中的记录,则会直接显示左表中的记录信息,而其对应的右表中的列信息将会用 null 值进行填充。
    • 将学生表和成绩表按照 id 进行连接起来,并且 3、4 号同学没有成绩。

image-20240817225446888

⭐ 2. 右外连接

select 字段列表 from1 right [outer] join2 on 条件 ... and 其他条件;
  • 右外连接查询的是表 2 的全部数据,让表 1 按照条件与表 2 进行拼接,如果条件不满足,则用 null 进行拼接。

image-20240817223142271

案例:对学生表和成绩表联合查询,把所有的成绩都显示出来,即使这个成绩没有学生与它对应,也要显示出来

  • 要将成绩表中的内容完全显示出来,将成绩表 exam 设为右表即可使用右外连接。如果右表中的某条记录根据连接条件没有找到匹配的左表中的记录,则会直接显示右表中的记录信息,而其对应的左表中的列信息将会用 null 值进行填充。
    • 将学生表和成绩表按照 id 进行连接起来,并且没有 11 号同学。

image-20240817225356349

http://www.lryc.cn/news/429644.html

相关文章:

  • 【C语言】:与文件通信
  • HTTPS通讯全过程
  • 建筑物规则化(实现) --- 特征边分组、重构、直角化
  • pytorch的优化
  • React 入门第一天:从Vue到React的初体验
  • Golang | Leetcode Golang题解之第357题统计各位数字都不同的数字个数
  • 【Linux】 gdb-调试器初入门(简单版使用)
  • Spring 的事务支持
  • 基于STM32开发的智能家居照明控制系统
  • 程序员的底层思维~张建飞
  • 美股收涨,半导体板块领涨;苹果iPhone出货预测上调
  • [学习笔记]在不同项目中切换Node.js版本
  • SOL项目开发代币DApp的基本要求、模式创建与海外宣发策略
  • 如何在 FastReport .NET 中构建和安装 Postgres 插件
  • JVM指令重排序
  • 改造字典关键字:
  • Neo4j 图数据库入门
  • linux 磁盘满了,程序运行失败,如何处理?df -h
  • Python编码系列—前端后浪:Python前后端分离开发实战指南
  • Docker学习之路【五】了解数据卷
  • matlab如何设置产生的随机数一致
  • ansible --------拓展
  • gazebo下使用Fast-planner配置(包含mpc局部规划+控制Gazebo小车以及FastPlanner配置)
  • Python核心编程--Python要点总结
  • 【mysql】mysql配置文件之优先级学习
  • 自然语言处理(NLP)大模型
  • 融合创新趋势:Web3时代的跨界融合
  • 面临新时代的机遇与挑战,联想凌拓将如何破局?
  • 2024.8.21
  • 在Ubuntu16.04里安装ROS Kinetic