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

【MySQL系列】表的内连接和外连接学习

「前言」文章内容大致是对MySQL表的内连接和外连接。

「归属专栏」MySQL

「主页链接」个人主页

「笔者」枫叶先生(fy)

MySQL

目录

  • 一、内连接
  • 二、外连接
    • 2.1 左外连接
    • 2.2 右外连接

一、内连接

内连接实际上就是利用where子句对两种表形成的笛卡儿积进行筛选,前面篇章学习的查询都是内连
接,也是在开发过程中使用的最多的连接查询

内连接语法如下:

SELECT ... FROM t1 INNER JOIN t2 ON 连接条件 [INNER JOIN t3 ON 连接条件] ... AND 其他条件;

说明:

  • 大写的表示关键字,[ ]中代表的是可选项
  • 内连接的条件通过连接条件指明,用户的其他筛选条件通过其他条件指明

显示SMITH的名字和部门名称

按照之前的做法就是,取员工表和部门表的笛卡尔积,在where子句中指明筛选条件为员工的部门号等于部门的部门号,筛选出每个员工匹配的部门信息,并指明员工姓名为SMITH

mysql> select ename, dname from emp, dept-> where emp.deptno = dept.deptno and ename='SMITH';

在这里插入图片描述
上述多表查询的方式本质就是内连接,下面使用标准的内连接SQL编写(写法不同而已):

  • 将员工表和部门号放在from子句中并通过inner join关键字隔开
  • on子句后指明内连接的条件为员工的部门号等于部门的部门号,保证筛选出来的数据是有意义的
  • and之后指明筛选条件为员工的姓名为SMITH
mysql> select ename, dname from emp inner join dept -> on emp.deptno = dept.deptno and ename='SMITH';

在这里插入图片描述

二、外连接

外连接又分为左外连接和右外连接

2.1 左外连接

如果进行联合查询,左侧的表完全显示我们就说是左外连接,而右侧的数据不完全显示或者为NULL

语法如下:

SELECT ... FROM t1 LEFT JOIN t2 ON 连接条件 [LEFT JOIN t3 ON 连接条件] ... AND 其他条件;

说明:

  • 写的表示关键字,[ ]中代表的是可选项
  • 左外连接的条件通过连接条件指明,用户的其他筛选条件通过其他条件指明

例如,创建两张表

-- 建两张表
create table stu (id int, name varchar(30)); -- 学生表
insert into stu values(1,'jack'),(2,'tom'),(3,'kity'),(4,'nono');
create table exam (id int, grade int); -- 成绩表
insert into exam values(1, 56),(2,76),(11, 8);

在这里插入图片描述

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

题目要求将没有成绩的学生的个人信息也要显示出来,也就是说学生表当中的内容需要完全被显示出来。

如果在连接学生表和成绩表时将学生表放在左侧,那么就可以使用左外连接

如果左侧表中的某条记录根据连接条件没有找到匹配的右侧表中的记录,其对应的右侧表中的列信息将会用NULL值进行填充

mysql> select * from stu left join exam on stu.id=exam.id;

在这里插入图片描述

2.2 右外连接

如果联合查询,右侧的表完全显示我们就说是右外连接,而左侧的数据不完全显示或者为NULL

语法如下:

SELECT ... FROM t1 RIGHT JOIN t2 ON 连接条件 [RIGHT JOIN t3 ON 连接条件] ... AND 其他条件;

说明:

  • 大写的表示关键字,[ ]中代表的是可选项
  • 右外连接的条件通过连接条件指明,用户的其他筛选条件通过其他条件指明

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

题目要求将没有学生与它对应的成绩信息也要显示出来,也就是成绩表当中的内容需要完全被显示出来

如果在连接学生表和成绩表时将成绩表放在右侧,那么就可以使用右外连接

右侧表中的某条记录根据连接条件没有找到匹配的左侧表中的记录,而其对应的左侧表中的信息将会用NULL值进行填充

mysql> select * from stu right join exam on stu.id=exam.id;

在这里插入图片描述

练习:列出部门名称和这些部门的员工信息,同时列出没有员工的部门

使用的是雇员信息的数据库
在这里插入图片描述

题目要求同时列出部门名和员工信息,因此需要将部门表和员工表连接起来

题目要求同时列出没有员工的部门,也就是部门表当中的内容需要完全被显示出来,如果在连接部门表和员工表时将部门表放在左侧,那么就可以使用左外连接

mysql> select dname, emp.* from dept left join emp on dept.deptno=emp.deptno;

在这里插入图片描述
也可以右外连接进行操作,右外连接就是显示完全右边的表,即部门表

mysql> select dname, emp.* from emp right join dept on dept.deptno=emp.deptno;

在这里插入图片描述
--------------------- END ----------------------

「 作者 」 枫叶先生
「 更新 」 2023.8.26
「 声明 」 余之才疏学浅,故所撰文疏漏难免,或有谬误或不准确之处,敬请读者批评指正。

相关文章:

【MySQL系列】表的内连接和外连接学习

「前言」文章内容大致是对MySQL表的内连接和外连接。 「归属专栏」MySQL 「主页链接」个人主页 「笔者」枫叶先生(fy) 目录 一、内连接二、外连接2.1 左外连接2.2 右外连接 一、内连接 内连接实际上就是利用where子句对两种表形成的笛卡儿积进行筛选,前面篇章学习的…...

C语言日常刷题 3

文章目录 题目答案与解析1234、5、6、 题目 1.已知函数的原型是: int fun(char b[10], int *a); ,设定义: char c[10];int d; ,正确的调用语句是( ) A: fun(c,&d); B: fun(c,d); C: fun(&c,&d…...

.net6中, 用数据属性事件触发 用httpclient向服务器提交Mes工单

MES开发中, 客户往往会要求 工单开始时记录工艺数据, 工单结束时将这些工艺数据回传到更上一级的WES系统中. 因为MES系统和PLC 是多线程读取, 所以加锁, 事件触发是常用手段. using MyWebApiTest.PLC; using MyWebApiTest.Service; using MyWebApiTest.Service.Entry; using M…...

sin(A)的意义

若存在矩阵A,则sin(A)表示对于矩阵A的每一个元素,进行对应的函数运算。 如:...

ctfshow-web14

0x00 前言 CTF 加解密合集CTF Web合集 0x01 题目 0x02 Write Up 首先看到这个,swith,那么直接输入4,则会打印$url的值 然后访问一下 查看一下,发现完整的请求是http://c7ff9ed6-dccd-4d01-907a-f1c61c016c15.challenge.ctf.sho…...

数据结构—循环队列(环形队列)

循环队列(环形队列) 循环队列的概念及结构循环队列的实现 循环队列的概念及结构 循环队列是一种线性数据结构,其操作表现基于 FIFO(先进先出)原则并且队尾被连接在队首之后以形成一个循环。它也被称为“环形缓冲器”。…...

vue3 实现按钮权限管理

在做后台管理系统时,经常会有权限管理的功能,这里来记录一下关于按钮权限管理的实现方法 1、自定义指令 v-permission。新建js文件用来写指令代码。 export default function btnPerms(app) {app.directive(permission, {mounted(el, binding) {if (!p…...

C语言练习4(巩固提升)

C语言练习4 选择题 前言 面对复杂变化的世界,人类社会向何处去?亚洲前途在哪里?我认为,回答这些时代之问,我们要不畏浮云遮望眼,善于拨云见日,把握历史规律,认清世界大势。 选择题 …...

将AI融入CG特效工作流;对谈Dify创始人张路宇;关于Llama 2的一切资源;普林斯顿LLM高阶课程;LLM当前的10大挑战 | ShowMeAI日报

👀日报&周刊合集 | 🎡生产力工具与行业应用大全 | 🧡 点赞关注评论拜托啦! 🤖 将AI融入CG特效工作流,体验极致的效率提升 BV1pP411r7HY 这是 B站UP主 特效小哥studio 和 拓星研究所 联合投稿的一个AI特…...

Vue2学习笔记のVue中的ajax

目录 Vue中的ajaxvue脚手架配置代理方法一方法二 插槽 hello, 这篇文章是Vue2学习笔记的第四篇,也是第四章:Vue中的ajax。 Vue中的ajax vue脚手架配置代理 方法一 在vue.config.js中添加如下配置: devServer:{proxy:"http://localho…...

C# 使用NPOI操作EXCEL

1.添加NOPI 引用->管理NuGet程序包->添加NOPI 2.相关程序集 3....

分布式 - 服务器Nginx:一小时入门系列之 return 指令

文章目录 1. return 指令语法2. return code URL 示例3. return code text 示例4. return URL 示例 1. return 指令语法 return指令用于立即停止当前请求的处理,并返回指定的HTTP状态码和响应头信息,它可以用于在Nginx中生成自定义错误页面,…...

【Linux】ext4和xfs扩大,缩小lv后,无法识别如何操作

虚拟机系统异常,挂载到其他环境如何修复系统盘 1、环境 UOS 1060E x86环境 模拟异常环境: 1060e系统,使用lvm缩小磁盘后,出现异常,将异常磁盘挂载到其他服务器中,但存在问题发现有uuid相同的问题。 为…...

基于HarmonyOS ArkUI实现音乐列表功能

本节将演示如何在基于HarmonyOS ArkUI的List组件来实现音乐列表功能。 本文涉及的所有源码&#xff0c;均可以在文末链接中找到。 活动主页 华为开发者论坛 规则要求具体要求如下&#xff1a; 第1步&#xff1a;观看<HarmonyOS第一课>“营”在暑期•系列直播&#x…...

Android系统启动流程 源码解析

Android系统启动流程 本文链接&#xff1a;https://blog.csdn.net/feather_wch/article/details/132518105 有道云脑图&#xff1a;https://note.youdao.com/s/GZ9d8vzO 1、整体流程 Boot RoomBootLoaderidle kthreadinit init ServiceManagerzygote zygote SystemServerap…...

【头歌】构建哈夫曼树及编码

构建哈夫曼树及编码 第1关:构建哈夫曼树 任务描述 本关任务:构建哈夫曼树,从键盘读入字符个数n及这n个字符出现的频率即权值,构造带权路径最短的最优二叉树(哈夫曼树)。 相关知识 哈夫曼树的定义 设二叉树具有n个带权值的叶子结点{w1,w2,...,wn},从根结点到每个叶…...

创建本地镜像

通过前面文章的阅读&#xff0c;读者已经了解到所谓的容器实际上是在父镜像的基础上创建了一个可读写的文件层级&#xff0c;所有的修改操作都在这个文件层级上进行&#xff0c;而父镜像并未受影响&#xff0c;如果读者需要根据这种修改创建一个新的本地镜像&#xff0c;有两种…...

网络编程套接字(2): 简单的UDP网络程序

文章目录 网络编程套接字(2): 简单的UDP网络程序3. 简单的UDP网络程序3.1 服务端创建(1) 创建套接字(2) 绑定端口号(3) sockaddr_in结构体(4) 数据的接收与发送接收发送 3.2 客户端创建3.3 代码编写(1) v1_简单发送消息(2) v2_小写转大写(3) v3_模拟命令行解释器(4) v4_多线程版…...

Android Mvvm设计模式的详解与实战教程

一、介绍 在开发设计模式中&#xff0c;模式经历了多次迭代&#xff0c;从MVC到MVP&#xff0c;再到如今的MVVM。发现的过程其实很简单&#xff0c;就是为了项目更好的管理。 设计模式严格来说属于软件工程的范畴&#xff0c;但是如今在各大面试中或者开发中&#xff0c;设计模…...

软考A计划-系统集成项目管理工程师-小抄手册(共25章节)-下

点击跳转专栏>Unity3D特效百例点击跳转专栏>案例项目实战源码点击跳转专栏>游戏脚本-辅助自动化点击跳转专栏>Android控件全解手册点击跳转专栏>Scratch编程案例点击跳转>软考全系列点击跳转>蓝桥系列 &#x1f449;关于作者 专注于Android/Unity和各种游…...

Phi-4-mini-reasoning应对软件测试:自动生成测试用例与缺陷分析

Phi-4-mini-reasoning应对软件测试&#xff1a;自动生成测试用例与缺陷分析 1. 引言&#xff1a;软件测试的痛点与AI解决方案 在软件开发的生命周期中&#xff0c;测试环节往往占据30%-50%的项目时间。传统测试工作面临两大核心挑战&#xff1a;一是测试用例设计需要大量人工…...

OpenRocket:革新性全流程火箭设计的开源技术突破实践

OpenRocket&#xff1a;革新性全流程火箭设计的开源技术突破实践 【免费下载链接】openrocket Model-rocketry aerodynamics and trajectory simulation software 项目地址: https://gitcode.com/GitHub_Trending/op/openrocket OpenRocket作为一款基于Java开发的开源火…...

从内核事件到业务洞察:手把手教你用sysdig + Lua脚本定制专属监控看板

从内核事件到业务洞察&#xff1a;用sysdig与Lua脚本构建定制化监控体系 当你的微服务集群每天处理数十亿次API调用时&#xff0c;标准监控指标如CPU使用率或内存消耗早已无法满足需求。真正的挑战在于&#xff1a;当某个关键业务接口的99线突然飙升时&#xff0c;如何快速定位…...

技术速递|6000 万次 Copilot 代码审查 且仍在持续增长

作者&#xff1a;Ria Gopu & David Apirian排版&#xff1a;Alan WangCopilot 代码审查如何帮助团队跟上 AI 加速带来的代码变更。自去年 4 月我们首次推出 Copilot 代码审查&#xff08;CCR&#xff09;以来&#xff0c;其使用量已增长了 10 倍&#xff0c;目前已占 GitHu…...

别再死记硬背GAT公式了!用Python+PyTorch手把手图解注意力机制(附代码)

图解GAT&#xff1a;用PythonPyTorch拆解图注意力机制的实现奥秘 当你第一次听说图注意力网络&#xff08;GAT&#xff09;时&#xff0c;是否被那些复杂的数学公式和抽象概念吓退&#xff1f;本文将以全新的可视化方式&#xff0c;带你从零实现一个完整的GAT层&#xff0c;用代…...

进程间通信(IPC):原理、场景与选型

在操作系统的世界里&#xff0c;进程是程序运行的基本单元&#xff0c;每个进程都拥有独立的内存空间和资源&#xff0c;彼此之间相互隔离&#xff0c;无法直接访问对方的数据。这种隔离机制保证了系统的稳定性&#xff0c;避免进程间相互干扰&#xff0c;但也带来了一个问题&a…...

用Python的igraph和leidenalg搞定知识图谱布局:一个科研领域的可视化实战

科研知识图谱实战&#xff1a;用PythonLeiden算法揭示学科交叉规律 当你在文献海洋中寻找研究方向时&#xff0c;是否曾被复杂的学科交叉关系困扰&#xff1f;传统的关键词共现分析已经不能满足现代科研的需求。本文将带你用Python的igraph和leidenalg构建一个能自动识别学科社…...

突破资源封装壁垒:RePKG开源工具全维度应用指南

突破资源封装壁垒&#xff1a;RePKG开源工具全维度应用指南 【免费下载链接】repkg Wallpaper engine PKG extractor/TEX to image converter 项目地址: https://gitcode.com/gh_mirrors/re/repkg 问题&#xff1a;专用资源格式的困境与破局思路 如何突破专用格式的封锁…...

GLM-OCR赋能微信小程序:开发随身扫描与文档管理工具

GLM-OCR赋能微信小程序&#xff1a;开发随身扫描与文档管理工具 1. 引言 你有没有遇到过这样的场景&#xff1f;开会时看到白板上写满了重要信息&#xff0c;想快速记录下来&#xff0c;却只能对着手机一张张拍照&#xff0c;事后还得手动整理&#xff1b;或者收到一份纸质合…...

别再死记硬背了!用游戏地图和社交网络,5分钟搞懂BFS和DFS(附C++代码)

游戏化学习&#xff1a;用社交网络和迷宫探险理解BFS与DFS 想象一下你正在玩一款开放世界游戏&#xff0c;地图被战争迷雾笼罩。每次只能看到周围一小块区域&#xff0c;如何高效探索整个地图&#xff1f;或者回忆微信里"朋友的朋友"推荐功能&#xff0c;系统如何找到…...