【MySQL】内连接和外连接
内连接和外连接
- 前言
- 正式开始
- 内连接
- 外连接
- 左外连接
- 右外连接

前言
前一篇讲多表查询的时候讲过笛卡尔积,其实笛卡尔积就算一种连接,不过前一篇讲的时候并没有细说连接相关的内容,本篇就来详细说说表的连接有哪些。
本篇博客中主要用到的还是前一篇中的三张表:

雇员表emp:

部门表dept:

薪资等级表:

这三张表中没有明确指出外键和主键约束,但是是有外键和主键约束的样子的:

其中不同薪资对应不同的薪资等级。
这三张表就不细说了,等会用例子慢慢了解。
正式开始
内连接
内连接实际上就是利用where子句对两种表形成的笛卡儿积进行筛选,我前面博客中的查询都是内连
接,这也是在开发过程中使用的最多的连接查询。
说一下语法:
select 字段 from 表1 inner join 表2 on 连接条件 and 其他条件;
这里的连接条件能用and不断级联。
我前一篇中所讲的语法格式和这里的语法格式不太一样,我前一篇对两个表进行连接的时候是这样(假如说是对emp表和dept表进行连接,如果看不懂建议先看一下我前一篇博客:【MySQL】多表查询、子查询、自连接、合并查询详解,包含大量示例,包你会):

这里给没有看过我上一篇博客的同学简单解释一下:

如果是用刚刚的语法的话就是这样:

解释一下:

两种语法产生的效果都是一样的。不过更推荐用inner join这个语法,至于为什么等会就知道了。
来个例子:
题目>>显示SMITH的名字和部门名称
首先明确一点,SMITH的名字在emp表中:

但是部门名称在dept表中:

所以说这是一个多表查询的问题,需要对这两张表进行连接:

但是这里没有添加连接条件,就会导致产生一些无效的记录。
比如说SMITH对应记录有三条,每条都有着不同的部门,但是SMITH实际上是属于20号部门的,对应dept连接出来的表中10和30号部门的信息没有用。故要去掉这些无效信息。
而emp表和dept表中共同列属性为deptno,需要根据deptno来对两张表进行连接,那么这两张表的连接条件就是二者的deptno要相等:

这样得到的记录就都是有效的记录了。
再加上题目的条件:SMITH的名字和部门名称,那么就是名字必须位SMITH:

不过这里的where也可以换成and:

因为员工名为SMITH也可以算成是一个连接的条件,不过把它算成筛选条件在逻辑上更通畅,所以用where更好一点,更能体现出来过程性。
如果用where,表达的意思就是先用deptno作为链接条件来对这两张表进行连接,连接好之后再用where对ename进行筛选,筛选出来的就是SMITH。逻辑更加清晰。
而用前一篇中的方法的话就会变成这样:

用的是where将表结构筛选出来。
再挑出来响应的列,结果就是这样:

逻辑上就是用on作为连接条件,用where作为筛选条件,更加清晰。
外连接
外连接可分为两种,左外连接和右外连接。
左外连接
左外连接就是当两张表进行连接的时候左表所有的数据都要显示,就算右表对应行是没有数据的,也必须要将左表的所有数据显示出来,对应右表没有数据的行会显示为空。
上例子,不然看不懂,先创建两张表,一张学生表:

插入点数据:

然后再建一张成绩表:

插入点数据:

两张表中的数据并不是所有都能一一对应上的,stu中id为3、4的在exam中没有成绩,而exam中id为11的在stu中没有数据。
左外连接的语法:
select 列名 from 表名1 left join 表名2 on 连接条件 and 其他连接条件;
此时如果将stu放到表名1,exam放到表名2:

此时stu中3、4没有成绩的也会显示出来,右表中对应列的数据为空。
但如果用内连接就不会显示不完整的数据:

如果把exam放到表名1位置:

对应id为11的在stu中没有数据,但是还是会将其显示,右表没有数据的会显示为空。
所以左外连接即在左表必须显示全,右表根据筛选条件连接,如果条件不满足就会显示为空。
来个题目:
题目>>查询所有学生的成绩,如果这个学生没有成绩,也要将学生的个人信息显示出来
很简单,其实就是刚刚的示例:

右外连接
和左外连接同理。右表中的数据必须完全显示。
其实有了左外连接都不需要右外连接了,因为我们在写sql语句的时候完全可以调整两个表名字的位置,这样就能起到同样的效果。
语法:
select 列名 from 表名1 right join 表名2 where 连接条件1 and 连接条件2 ...;
演示一下:

以右表的exam为主。
再来:

效果都是一样的。我甚至感觉左外连接看起来更方便一点。
很简单,不细说了。
题目>>对stu表和exam表联合查询,把所有的成绩都显示出来,即使这个成绩没有学生与它对应,也要显示出来
也是刚刚的示例:

再来一个开头给出的三张表的例子:
题目>>列出部门名称和这些部门的员工信息,同时列出没有员工的部门
其实三dept表有4个部门,但是有一个部门没有员工,这个在生活中也是有的,比如说一个公司某项业务规模还比较小,但是不妨碍开一个空部门,等以后业务扩大了之后再向这个空部门中添加员工。

看着不太方便,排个序:

这样看起来就好多了。
到此结束。。。
相关文章:
【MySQL】内连接和外连接
内连接和外连接 前言正式开始内连接外连接左外连接右外连接 前言 前一篇讲多表查询的时候讲过笛卡尔积,其实笛卡尔积就算一种连接,不过前一篇讲的时候并没有细说连接相关的内容,本篇就来详细说说表的连接有哪些。 本篇博客中主要用到的还是…...
U盘启动制作工具Rufus
U盘启动制作工具Rufus 下载U盘启动制作工具Rufus,进入Rufus官网:http://rufus.ie/en/,打开之后往后滑动,找到download即可点击下载。 需要插入U盘 首先需要插入U盘,如果U盘有重要文件一定要备份,然后右键…...
Ubuntu 22.04安装vscode
要在Ubuntu 22.04安装vscode,请完成这些步骤。 首先apt命令更新软件包索引并安装导入微软GPG密钥的依赖软件。 更新,近期内执行过可忽略 sudo apt update安装工具包 sudo apt install software-properties-common apt-transport-https curl当导入GPG后…...
计算机视觉的应用19-基于pytorch框架搭建卷积神经网络CNN的卫星地图分类问题实战应用
大家好,我是微学AI,今天给大家介绍一下计算机视觉的应用19-基于pytorch框架搭建卷积神经网络CNN的卫星地图分类问题实战应用。随着遥感技术和卫星图像获取能力的快速发展,卫星图像分类任务成为了计算机视觉研究中一个重要的挑战。为了促进这一…...
Java 获取本地ip网卡信息
工具类 public static Optional<Inet4Address> getLocalIp4Address() throws SocketException {final List<Inet4Address> inet4Addresses getLocalIp4AddressFromNetworkInterface();if (inet4Addresses.size() ! 1) {final Optional<Inet4Address> ipBySo…...
将kali系统放在U盘中插入电脑直接进入kali系统
首先准备一个空白的 U 盘。 Kali Linux | Penetration Testing and Ethical Hacking Linux Distribution 在 Windows 上制作 Kali 可启动 USB 驱动器 Making a Kali Bootable USB Drive on Windows | Kali Linux Documentation 1. 首先下载 .iso 镜像 Index of /kali-images…...
二十四、RestClient操作文档
目录 一、新增文档 1、编写测试代码 二、查询文档 1、编写测试代码 三、删除文档 1、编写测试代码 四、修改文档 1、编写测试代码 五、批量导入文档 批量查询 一、新增文档 1、编写测试代码 SpringBootTest public class HotelDocumentTest {private RestHighLevelC…...
【Docker】从零开始:9.Docker命令:Push推送仓库(Docker Hub,阿里云)
【Docker】从零开始:9.Docker命令:Push推送仓库 知识点1.Docker Push有什么作用?2.Docker仓库有哪几种2.1 公有仓库2.2 第三方仓库2.3 私有仓库2.4 搭建私有仓库的方法有哪几种 3.Docker公有仓库与私有仓库的优缺点对比 Docker Push 命令标准语法操作参数…...
Centos部署GitLab-备份恢复
1. 下载rpm包 wget https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el7/gitlab-ce-10.8.4-ce.0.el7.x86_64.rpm2. 安装依赖 yum -y install policycoreutils openssh-server openssh-clients postfix policycoreutils-python3. rpm安装 rpm -ivh gitlab-ce-10.8.4-ce.…...
CSV用EXCEL打开后为科学计数法(后几位丢失)解决方法
当在Excel中打开含有长数字(如订单号)的CSV文件时,Excel可能会默认将这些长数字格式化为科学计数法。 而当您尝试将它们转换为文本格式时,如果数字非常长,Excel可能无法正确处理其精度,导致数字的后几位变…...
flink sqlClient提交hiveIceberg
flink sqlClient提交hiveIceberg 环境准备sqlclient启动前准备启动sqlclientinit.sqlinsert.sql 环境准备 组件名版本flink客户端1.14.4-2.12hadoop集群3.1.4hive客户端3.1.2icebergiceberg-flink-runtime-1.14-0.13.2.jariceberg-hive依赖iceberg-hive-runtime-0.13.2.jar s…...
SpringBoot 导入其他配置文件
默认情况下,springboot 初始的项目中都有一个 application.yml 或者 application.properties 文件,如果我们希望再定义一个独立的配置文件用来配置特定业务数据,而不希望把这些配置内容都堆积在 application 配置文件中,实现这个需…...
景区智慧旅游智能化系统方案:PPT全文58页,附下载
关键词:智慧景区解决方案,智慧文旅解决方案,智慧旅游解决方案,智慧文旅综合运营平台 一、景区智慧旅游智能化系统建设背景 近年来,随着信息技术的快速发展和普及,以及旅游市场的不断扩大和升级࿰…...
Java特殊文件读取案例Properties
代码 package com.itheima.d1;import java.io.FileNotFoundException; import java.io.FileReader; import java.io.FileWriter; import java.util.Properties;public class Test3 {public static void main(String[] args) throws Exception {//目标:读取属性文件…...
搜维尔科技:Faceware面部捕捉最佳实践!
视频源和分辨率: 我们的软件针对 RGB 彩色素材进行了优化,不支持使用红外摄像机。 我们建议视频分辨率为 720p 和 1080p。低于 720p 的分辨率可能会对跟踪质量产生负面影响,而高于 1080p 的分辨率会导致存储要求和传输时间增加,而…...
如何使用ArcGIS Pro进行坐标转换
不同来源的数据坐标系可能是不同的,为了统一使用这些数据就需要进行坐标转换,ArcGIS Pro作为专业的GIS软件,坐标转换功能肯定也是包含的,这里为大家介绍一下ArcGIS Pro如何进行坐标转换,希望能对你有所帮助。 数据来源…...
Python----类对象和实例对象
目录 一.类和类的实例 二.类属性和实例属性 三.私有属性和公有属性 四.静态方法和类方法 五.__init__方法,__new__方法和__del__方法: 六.私有方法和公有方法 七.方法的重载 八.方法的继承 九.方法的重写 十.对象的特殊方法 十一.对象的引用&a…...
[23] 4K4D: Real-Time 4D View Synthesis at 4K Resolution
paper | proj | code 提出一种基于K-Planes的4D point cloud Representation;提出一种Hybrid appearance model,包含image blending model和SH model。其中,image blending model将3D点映射回原图中求得,SH model通过模型预测求得…...
MySQL错误之ONLY_FULL_GROUP_BY
报错信息: 翻译: 对该报错的解释 所以,实际上该报错是由于在SQL查询语句中有group by,而这个包含group by的SQL查询写的并不规范导致的,这个ONLY_FULL_GROUP_BY模式开启之后检查就会很严格,如果select列表…...
牛客 HJ106 字符逆序 golang实现
牛客题目算法连接 题目 golang 实现 package mainimport ("fmt""bufio""os" )func main() {str, _ : bufio.NewReader(os.Stdin).ReadString(\n)if len(str) 0 {return } else {newstr:""strLen:len(str)-1for i:strLen;i>0;i-…...
OpenLayers 可视化之热力图
注:当前使用的是 ol 5.3.0 版本,天地图使用的key请到天地图官网申请,并替换为自己的key 热力图(Heatmap)又叫热点图,是一种通过特殊高亮显示事物密度分布、变化趋势的数据可视化技术。采用颜色的深浅来显示…...
51c自动驾驶~合集58
我自己的原文哦~ https://blog.51cto.com/whaosoft/13967107 #CCA-Attention 全局池化局部保留,CCA-Attention为LLM长文本建模带来突破性进展 琶洲实验室、华南理工大学联合推出关键上下文感知注意力机制(CCA-Attention),…...
pam_env.so模块配置解析
在PAM(Pluggable Authentication Modules)配置中, /etc/pam.d/su 文件相关配置含义如下: 配置解析 auth required pam_env.so1. 字段分解 字段值说明模块类型auth认证类模块,负责验证用户身份&am…...
macOS多出来了:Google云端硬盘、YouTube、表格、幻灯片、Gmail、Google文档等应用
文章目录 问题现象问题原因解决办法 问题现象 macOS启动台(Launchpad)多出来了:Google云端硬盘、YouTube、表格、幻灯片、Gmail、Google文档等应用。 问题原因 很明显,都是Google家的办公全家桶。这些应用并不是通过独立安装的…...
postgresql|数据库|只读用户的创建和删除(备忘)
CREATE USER read_only WITH PASSWORD 密码 -- 连接到xxx数据库 \c xxx -- 授予对xxx数据库的只读权限 GRANT CONNECT ON DATABASE xxx TO read_only; GRANT USAGE ON SCHEMA public TO read_only; GRANT SELECT ON ALL TABLES IN SCHEMA public TO read_only; GRANT EXECUTE O…...
多种风格导航菜单 HTML 实现(附源码)
下面我将为您展示 6 种不同风格的导航菜单实现,每种都包含完整 HTML、CSS 和 JavaScript 代码。 1. 简约水平导航栏 <!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><meta name"viewport&qu…...
GC1808高性能24位立体声音频ADC芯片解析
1. 芯片概述 GC1808是一款24位立体声音频模数转换器(ADC),支持8kHz~96kHz采样率,集成Δ-Σ调制器、数字抗混叠滤波器和高通滤波器,适用于高保真音频采集场景。 2. 核心特性 高精度:24位分辨率,…...
MySQL账号权限管理指南:安全创建账户与精细授权技巧
在MySQL数据库管理中,合理创建用户账号并分配精确权限是保障数据安全的核心环节。直接使用root账号进行所有操作不仅危险且难以审计操作行为。今天我们来全面解析MySQL账号创建与权限分配的专业方法。 一、为何需要创建独立账号? 最小权限原则…...
Reasoning over Uncertain Text by Generative Large Language Models
https://ojs.aaai.org/index.php/AAAI/article/view/34674/36829https://ojs.aaai.org/index.php/AAAI/article/view/34674/36829 1. 概述 文本中的不确定性在许多语境中传达,从日常对话到特定领域的文档(例如医学文档)(Heritage 2013;Landmark、Gulbrandsen 和 Svenevei…...
Python ROS2【机器人中间件框架】 简介
销量过万TEEIS德国护膝夏天用薄款 优惠券冠生园 百花蜂蜜428g 挤压瓶纯蜂蜜巨奇严选 鞋子除臭剂360ml 多芬身体磨砂膏280g健70%-75%酒精消毒棉片湿巾1418cm 80片/袋3袋大包清洁食品用消毒 优惠券AIMORNY52朵红玫瑰永生香皂花同城配送非鲜花七夕情人节生日礼物送女友 热卖妙洁棉…...
