【MySQL】内外连接
内外连接
- 一、内连接
- 二、外连接
- 1、左外连接
- 2、右外连接
表的连接分为内连和外连。
一、内连接
内连接实际上就是利用where子句对两种表形成的笛卡儿积进行筛选。只不过为了让sql的可读性更好,我们使用其他的关键字进行内连接。
语法:
SELECT ... FROM t1 INNER JOIN t2 ON 连接条件 [INNER JOIN t3 ON 连接条件] ... AND 其他条件;
说明:
- SQL中大写的表示关键字,[ ]中代表的是可选项。
下面是一些练习的数据表
雇员信息表数据库文件
- 三张表单

- 员工表(emp)
雇员编号(empno), 雇员姓名(ename),雇员职位(job),雇员领导编号(mgr),雇佣时间(hiredate)。
工资月薪(sal),奖金(comm),部门编号(deptno)。

- 部门表(dept)
部门编号(deptno),部门名称(dname),部门所在地点(loc)。

- 工资等级表(salgrade)
等级(grade),此等级最低工资(losal),此等级最高工资(hisal)。

1.1 显示SMITH的名字和部门名称
- 很明显,员工名称和部门名称分别在两张表中,
emp,dept。 - 我们想要同时显示员工名称和部门名称就需要我们对表进行内连接
emp inner join dept - 由于内连接是按照笛卡尔积的方式进行连接的,连接后有一些数据并不是真实有效的,所以我们还要对数据进行筛选
on emp.deptno=dept.deptno。 - 最后我们只要员工
SMITH的相关信息,所以我们可以使用where条件进行筛选。
select ename, dname from emp inner join dept on emp.deptno=dept.deptno where ename='SMITH';

可以看出这种写法我们将笛卡儿积的过滤条件单独挑出,这让我们的where子句的筛选条件更加清晰。
二、外连接
外连接分为左外连接和右外连接。
1、左外连接
如果进行联合查询,要求要保证左侧的表要完全显示,我们就说是左外连接。
SELECT ... FROM t1 LEFT JOIN t2 ON 连接条件 [LEFT JOIN t3 ON 连接条件] ... AND 其他条件;
给出一张学生表,学生表中的name代表的是学生的姓名,id代表的是学生的学号。如下:

再给出一张成绩表,其中的id代表的是考试学生的学号,grade代表的是学生的成绩。如下:

注意观察这两张表:
-
学生表中的
3,4号学生在成绩表中是没有成绩的(可能是缺考了) -
成绩表中的
11号学生,在学生表中是不存在的,(可能学生表统计漏了)
现在我们如果使用内连接进行连接,显示学号很姓名的,我们发现有一些信息会因为不存在,而被筛选掉。
select * from stu inner join exam on stu.id=exam.id;

1.1 查询所有学生的成绩,如果这个学生没有成绩,也要将学生的个人信息显示出来
可以看出题目要求学生表的信息要被完全展示,而成绩表中的信息如果实在不满足连接条件可以被忽略。
所以我们可以使用左外连接保证左边的表要被完全显示:
select * from stu left join exam on stu.id=exam.id;

观察表格:
-
学生表中的信息被完全被展示出来了!就算在成绩表中找不到
id与之匹配。同时因为找不到所以其对应的列全部以NULL进行填充 -
而成绩表中的11号
id,因为无法匹配而被筛选掉了。
2、右外连接
如果联合查询,右侧的表要求要被完全显示,我们就说是右外连接。
语法:
SELECT ... FROM t1 RIGHT JOIN t2 ON 连接条件 [RIGHT JOIN t3 ON 连接条件] ... AND 其他条件;
2.1 查询所有的成绩,就算这个成绩没有学生与它对应,也要将成绩信息显示出来
可以看出题目要求成绩表的信息要被完全展示,而学生表中的信息如果实在不满足连接条件可以被忽略。
所以我们可以使用右连接保证右边的表要被完全显示,(当然也可以调换表的顺序然后使用左外连接):
select * from stu right join exam on stu.id=exam.id;

观察表格:
-
成绩表中的信息被完全被展示出来了!就算在学生表中找不到
id与之匹配。同时因为找不到所以其对应的列全部以NULL进行填充 -
而学生表中的
3,4号id,因为无法匹配而被筛选掉了。
案例:列出部门名称和这些部门的员工信息,同时列出没有员工的部门
- 部门名称和的员工信息显然来自于不同的表中,所以我们需要连接两张表。
- 同时列出没有员工的部门,意味着我们要以部门为主。所以我们可以使用外连接。
- 连接条件就是部门的部门号要等于员工所在的部门号相等,即
dept.deptno=emp.deptno。
select dept.dname, emp.ename from dept left join emp on dept.deptno=emp.deptno;

相关文章:
【MySQL】内外连接
内外连接 一、内连接二、外连接1、左外连接2、右外连接 表的连接分为内连和外连。 一、内连接 内连接实际上就是利用where子句对两种表形成的笛卡儿积进行筛选。只不过为了让sql的可读性更好,我们使用其他的关键字进行内连接。 语法: SELECT ... FRO…...
selenium执行出现异常,SessionNotCreatedException ChromeDriver only supports
问题现状: 运行程序报错: selenium.common.exceptions.SessionNotCreatedException: Message: session not created: This version of ChromeDriver only supports Chrome version 114 Current browser version is 121.0.6167.85 with binary path /App…...
Flink:快速掌握批处理数据源的创建方法
Flink 社区最近 “基于FLIP-27” 设计了新的 Source 框架 。一些连接器(API)已迁移到这个新框架。本文介绍了如何使用这个新框架创建批处理源。 它是在为Cassandra实现Flink 批处理源时构建的。如果您有兴趣贡献或迁移连接器,这篇文章非常适合…...
基于cubeMX的正点原子miniSTM32对W25Q64的存储使用
一、实现目标 使用cubeMX建立项目工程,结合正点原子提供的hal库对W25Q64闪存调用的例程,实现W25Q64的读写。 二、实现过程 1、首先建立cubeMX工程,其他项设置不再叙述,只看连接W25Q64的SPI设置,这里使用SPI1…...
C++笔记(三)
封装意义: 在设计类的时候,属性和行为写在一起,表现事物 类在设计时,可以把属性和行为放在不同的权限下,加以控制。 访问权限有三种: public 公共 类内 类外都可以访问, protected保护 类内可以访问…...
c语言不定参数
时间记录:2024/1/22 一、不定参数的函数定义和使用到的c函数 (1)定义 void fun1(参数类型 argName,...); 示例: void fun1(int count,...);(2)获取不定参数的值 #include <stdarg.h> //包含头文件…...
云手机与实体手机的对比
在数字化时代,云手机作为一种虚拟手机在云端服务器上运行,与传统的实体手机相比存在诸多差异。让我们深入探讨云手机与实体手机之间的区别,以便更好地了解它们的特点和优势。 外观上的差异 实体手机具有实际的外观和重量,占据一定…...
diffusion 和 gan 的优缺点对比
sample速度GAN更快,Diffusion需要迭代更多次。 训练难度GAN 的训练可能是不稳定的,容易出现模式崩溃和训练振荡等问题。Diffusion 训练loss收敛性好,比较平稳。 模拟分布连续性Diffusion相较于GAN可以模拟更加复杂,更加非线性的分…...
VC++中使用OpenCV进行人脸检测
VC中使用OpenCV进行人脸检测 对于上面的图像,如何使用OpenCV进行人脸检测呢? 使用OpenCV进行人脸检测十分简单,OpenCV官网给了一个Python人脸检测的示例程序, objectDetection.py代码如下: from __future__ import p…...
11Docker数据持久化
Docker数据持久化 容器中数据持久化主要有两种方式: 数据卷(Data Volumes)数据卷容器(Data Volumes Dontainers) 数据卷 数据卷是一个可供一个或多个容器使用的特殊目录,可以绕过UFS(Unix F…...
RK3588平台开发系列讲解(视频篇)RKMedia框架
文章目录 一、 RKMedia框架介绍二、 RKMedia框架API三、 视频处理流程四、venc 测试案例沉淀、分享、成长,让自己和他人都能有所收获!😄 📢RKMedia是RK提供的一种多媒体处理方案,可实现音视频捕获、音视频输出、音视频编解码等功能。 一、 RKMedia框架介绍 功能: VI(输…...
Vue3 Teleport 将组件传送到外层DOM位置
✨ 专栏介绍 在当今Web开发领域中,构建交互性强、可复用且易于维护的用户界面是至关重要的。而Vue.js作为一款现代化且流行的JavaScript框架,正是为了满足这些需求而诞生。它采用了MVVM架构模式,并通过数据驱动和组件化的方式,使…...
【学网攻】 第(5)节 -- Cisco VTP的使用
文章目录 【学网攻】 第(1)节 -- 认识网络【学网攻】 第(2)节 -- 交换机认识及使用【学网攻】 第(3)节 -- 交换机配置聚合端口【学网攻】 第(4)节 -- 交换机划分Vlan 前言 网络已经成为了我们生活中不可或缺的一部分,它连接了世界各地的人们,让信息和资…...
uniapp复选框 实现排他选项
选择了排他选项之后 复选框其他选项不可以选择 <view class"reportData" v-for"(val, index) in obj" :key"index"> <view v-if"val.type 3" ><u-checkbox-group v-model"optionValue" placement"colu…...
openssl3.2/test/certs - 004 - cross root and root cross cert
文章目录 openssl3.2/test/certs - 004 - cross root and root cross cert概述笔记END openssl3.2/test/certs - 004 - cross root and root cross cert 概述 索引贴 openssl3.2 - 官方demo学习 - test - certs 笔记 // \file my_openssl_linux_log_doc_004.txt // openssl…...
图像分类】【深度学习】【轻量级网络】【Pytorch版本】EfficientNet_V2模型算法详解
【图像分类】【深度学习】【轻量级网络】【Pytorch版本】EfficientNet_V2模型算法详解 文章目录 【图像分类】【深度学习】【轻量级网络】【Pytorch版本】EfficientNet_V2模型算法详解前言EfficientNet_V2讲解自适应正则化的渐进学习(Progressive Learning with adaptive Regul…...
05.Elasticsearch应用(五)
Elasticsearch应用(五) 1.目标 咱们这一章主要学习Mapping(映射) 2.介绍 Mapping是对索引库中文档的约束,类似于数据表结构,作用如下: 定义索引中的字段的名称定义字段的数据类型ÿ…...
npm更换镜像
大家好!今天给大家分享的知识是如何更换npm镜像 前言 有时候在加载npm时有时会很慢,那是由于node安装插件是从国外服务器下载,受网络影响大,速度慢且可能出现异常,这时候就需要更换镜像,使插件的安装快捷&…...
野指针(C语言)
野指针 //概念:野指针就是指针指向的位置是不可知的(随机的,不正确的 //,没有明确限制的,空间还属于操作系统而不属于程序的) //野指针成因: //1.指针未初始化 #include <stdio.h> int main() { int* p;//局部变量指针未初始化,默认为随机值 //此时p指向的空间不…...
动物姿态识别(数据集+代码)
动物姿态识别是指利用计算机视觉和深度学习技术来识别动物的姿态,即确定动物身体的姿态、方向和位置等信息。这种技术可应用于动物行为研究、动物健康监测、智能养殖等领域。 动物姿态识别的关键技术包括图像处理、特征提取和分类器设计。首先,需要对动…...
Fish-Speech-1.5在短视频生产的应用:批量生成多语种配音方案
Fish-Speech-1.5在短视频生产的应用:批量生成多语种配音方案 1. 引言 短视频内容创作正面临着一个普遍痛点:多语言配音成本高、周期长。传统方式下,一个MCN机构要为一条短视频制作中文、英文、日文三种语言的配音,需要分别联系不…...
3分钟掌握的网盘密码解析黑科技:让提取码自动获取效率提升10倍
3分钟掌握的网盘密码解析黑科技:让提取码自动获取效率提升10倍 【免费下载链接】baidupankey 项目地址: https://gitcode.com/gh_mirrors/ba/baidupankey 你是否曾经因为寻找百度网盘分享链接的提取码而浪费大量时间?传统方式下,用户…...
如何打破微信单设备限制:WeChatPad终极指南
如何打破微信单设备限制:WeChatPad终极指南 【免费下载链接】WeChatPad 强制使用微信平板模式 项目地址: https://gitcode.com/gh_mirrors/we/WeChatPad 你是不是也遇到过这样的尴尬时刻?在电脑上登录微信工作,手机上的微信就被迫下线…...
Mermaid Live Editor:代码驱动图表设计的终极解决方案
Mermaid Live Editor:代码驱动图表设计的终极解决方案 【免费下载链接】mermaid-live-editor Edit, preview and share mermaid charts/diagrams. New implementation of the live editor. 项目地址: https://gitcode.com/GitHub_Trending/me/mermaid-live-editor…...
Kazumi:跨平台动漫资源整合解决方案,打造个性化追番体验
Kazumi:跨平台动漫资源整合解决方案,打造个性化追番体验 【免费下载链接】Kazumi 基于自定义规则的番剧采集APP,支持流媒体在线观看,支持弹幕。 项目地址: https://gitcode.com/gh_mirrors/ka/Kazumi 动漫爱好者常面临三大…...
工业质检实战:用Real-IAD D³的‘伪3D’光度立体数据,搞定MVTec搞不定的细微划痕
工业质检实战:用Real-IAD D的‘伪3D’光度立体数据,搞定MVTec搞不定的细微划痕 在精密制造领域,金属表面0.1mm级的发丝划痕往往成为质检工程师的噩梦。传统2D视觉系统受限于平面成像原理,对这类微观三维形变束手无策;而…...
05. 微交互设计模式解析:让界面更有生命力
05. 微交互设计模式解析:让界面更有生命力 引言 微交互是用户与界面之间的小互动,它们虽然微小,却能给用户带来巨大的愉悦感。作为一名把代码当散文写的 UI 匠人,我始终认为:好的微交互不是简单的动画效果,…...
CMake实战:用ExternalProject_Add一键集成第三方库(附spdlog完整配置)
CMake实战:用ExternalProject_Add一键集成第三方库(附spdlog完整配置) 在C项目开发中,第三方库的集成往往是最耗时的环节之一。传统的手动下载、编译、配置头文件路径和链接库文件的方式,不仅效率低下,还会…...
别再死记硬背DAQmx流程了!LabVIEW数据采集核心逻辑拆解:以USB-6008正弦波实验为例
从设计模式视角重构LabVIEW数据采集:以USB-6008正弦波实验为例 当LabVIEW新手第一次接触DAQmx数据采集时,往往会被"创建任务→添加通道→配置时钟→开始任务→读取数据→清除任务"的固定流程所困扰。这种机械记忆不仅容易遗忘,更难…...
PyTorch内存优化实战:深入解析torch.utils.checkpoint的机制与应用
1. 为什么我们需要torch.utils.checkpoint? 第一次用PyTorch训练ResNet50时,我的16GB显存直接被撑爆了。当时怎么都想不明白——明明batch_size只设了32,怎么连这种经典模型都跑不动?后来才发现,问题出在前向传播时PyT…...
