[MySQL]MySQL内外连接

news2024/11/20 20:31:08

[MySQL]MySQL内外连接

文章目录

  • [MySQL]MySQL内外连接
    • 1. 内连接
    • 2. 外连接
      • 2.1 左外连接
      • 2.2 右外连接
    • 3. 简单练习

1. 内连接

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

语法:

SELECT ... FROM t1 INNER JOIN t2 ON 连接条件 [INNER JOIN t3 ON 连接条件] ... AND 其他条件;
  • 内连接的条件通过连接条件指明,用户的其他筛选条件通过其他条件指明。
  • 内连接的效果和多表查询的效果相同。

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

现给出以下表:

image-20230713185707754

此表为员工表,其中ename就是员工姓名。

还有另一张表:

image-20230713185744436

此表为部门表,其中dname就是部门名称。

要显示SMITH的名字和部门名称,可以选择直接对两张表进行笛卡尔积运算,然后筛选出部门号相同,名字是SMITH的记录:

image-20230713190015916

除了上面这种方式还可以直接使用内连接,内连接的是员工表和部门表,连接条件是部门号相同,其他条件为姓名为SMITH:

image-20230713190330997

2. 外连接

2.1 左外连接

如果联合查询,左侧的表完全显示我们就说是左外连接。

语法:

SELECT ... FROM t1 LEFT JOIN t2 ON 连接条件 [LEFT JOIN t3 ON 连接条件] ... AND 其他条件;
  • 左侧的表完全显示。
  • 右侧的表中连接条件满足的就将数据连接,不满足的将null值连接。

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

用下面的SQL语句创建两张表,然后插入一部分数据。

-- 建两张表
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);

学生表的结构和数据如下:

image-20230713192103008

成绩表的结构和数据如下:

image-20230713192145796

如果使用内连接,连接条件为id相同,只会显示id相同的连接记录:

image-20230713192542058

由于学生没有成绩,也要将学生的个人信息显示出来,因此需要将学生表放在左侧并且使用左外连接,连接条件为id相同,id相同且成绩表中有成绩的会将数据连接过来,id相同且成绩表中没有成绩的会将null值连接过来:

image-20230713192251410

2.2 右外连接

如果联合查询,右侧的表完全显示我们就说是右外连接。

语法:

SELECT ... FROM t1 RIGHT JOIN t2 ON 连接条件 [RIGHT JOIN t3 ON 连接条件] ... AND 其他条件;
  • 右侧的表完全显示。
  • 左侧的表中连接条件满足的就将数据连接,不满足的将null值连接。

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

由于需要把所有的成绩都显示出来,因此需要将成绩表放在右侧并且使用右外连接,连接条件为id相同,如果该成绩没有学习对应,左侧会将null值连接过来。

image-20230713192906455

3. 简单练习

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

由于需要部门表和员工表,需要先查看一下表的数据:

部门表的数据如下:

image-20230713194010249

员工表的数据如下:

image-20230713194051108

列出部门名称和这些部门的员工信息,同时列出没有员工的部门,由此可以看出无论有没有员工都要显示部门,因此可以选择将部门表作为左侧表进行左外连接,连接条件为部门号相同,为了方便查看我们对结果按照部门号进行升序排序:

image-20230713194449813

同样的,还可以将部门表作为右侧表进行右外连接,连接条件为部门号相同,为了方便查看我们对结果按照部门号进行升序排序:

image-20230713194555603

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/755590.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【USRP X310】如何将你的X310转化为USRP RIO 可以用于FPGA编程

X310 转化为USRP RIO X310产品X310和NI-USRP对应关系 简介第一步原理解释打开工具运行 Initialize Flash.vi可以去选择设备类型Hardware Current Version 如何选择 第二步创建工程运行校准程序 附录:射频子板的IDWBXSBXCBXUBXTwinRX X310产品 X310和NI-USRP对应关系…

【Android知识笔记】应用进程(一)

应用进程的启动流程 冷启动与热启动 冷启动与热启动相比:冷启动除了要启动目标进程的入口Activity外,还需要通过AMS向Zygote申请启动目标应用进程,而热启动由于目标进程已经启动,只需直接打开目标进程的入口Activity即可。 AMS冷启动大概流程: 应用进程是在什么时机被启…

网络数据安全风险评估实施指引(二)

评估手段是多种多样的。信息安全风险评估可以用各种不同的方式识别资产脆弱性和攻击路径,数据安全风险评估也包含但不限于以下措施: 人员访谈:对相关人员进行访谈,核查制度规章、防护措施、安全责任落实情况; 文档查…

HTTP、HTTPS协议详解

文章目录 HTTP是什么报文结构请求头部响应头部 工作原理用户点击一个URL链接后,浏览器和web服务器会执行什么http的版本持久连接和非持久连接无状态与有状态Cookie和Sessionhttp方法:get和post的区别 状态码 HTTPS是什么ssl如何搞到证书nginx中的部署 加…

C#使用Chart进行统计,切换不同的图表类型

WindowsForm应用程序中Chart图表控件所属的命名空间: Chart 命名空间: System.Windows.Forms.DataVisualization.Charting 对应的dll路径: C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.6.1\Syst…

链表的头指针、头节点和首元节点

链表的头指针、头节点和首元节点 头节点(哑结点) 有时,在链表的第一个节点之前会额外增设一个节点,该节点的数据域一般不存放数据(有些情况下也可以存放链表的长度等信息),此节点被称为头节点。 若链表中存在头节点&…

[每周一更]-(第54期):Go的多版本管理工具

参考 https://zhuanlan.zhihu.com/p/611253641https://learnku.com/articles/78326 前文概要 Go语言从开始使用从1.13起步,随着泛型的支持,带领团队在转型Go的时候,做基础组件架构选型使用1.18,但是Go版本不断迭代想使用最新版本…

Java的日期时间API

目录 JDK8之前的日期时间API java.lang.System类 java.util.Date类 java.text.SimpleDateFormat类 java.util.Calendar(日历)类 java.util.GregorianCalendar类 JDK8中新日期时间API LocalDate、LocalTime、LocalDateTime 类 Instant类 java.time.format.DateTimeFor…

SCA Sentinel分布式系统的流量防卫兵

Sentinel官网:https://sentinelguard.io/zh-cn Sentinel:Sentinel是面向分布式、多语言异构化服务架构的流量治理组件,主要以流量为切入点,从流量控制、流量路由、熔断降级、系统自适应保护等多个维度来帮助用户 保障微服务的稳定性 Sentinel与Hystrix对…

http连接处理(下)(四)

1.结合代码分析请求报文响应 下面我们将介绍服务器如何响应请求报文,并将该报文发送给浏览器端。首先介绍一些基础API,然后结合流程图和代码对服务器响应请求报文进行详解。 基础API部分,介绍stat、mmap、iovec、writev。 流程图部分&…

NodeJS 后端通过Http获取Base64格式数据显示图片 ②〇

文章目录 前言BASE64前端开发后端开发异步代码效果总结 ⡖⠒⠒⠒⠤⢄⠀⠀⠀ ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢸ ⠀⠀⠀⡼⠀⠀⠀⠀ ⠀ ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢶⣲⡴⣗⣲⡦⢤⡏⠀⠀⠀⠀⠀ ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣰⠋⠉⠉⠓⠛⠿⢷⣶⣦⠀⠀⠀ ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢠⠇⠀…

Rust操作MySQL

查询 本部分是对 「Rust入门系列」Rust 中使用 MySQL[1]的学习与记录 经常使用的时间处理库: chrono 流式查询使用: query_iter 输出到Vec使用: query 映射到结构体使用: query_map 获取单条数据使用: query_first 命名…

RTP及RTP Header Extension

https://www.rfc-editor.org/rfc/rfc3550.txt 译文: http://www.gpssoft.cn/download/protocol/RFC-3550-%E4%B8%AD%E6%96%87%E7%89%88.pdf RTP:real-time transport protocol,实时传输协议 每一个 RTP 包中都有前 12 个字节,而…

了解PostgreSQL sql shell和VACUUM命令

从SQL Shell进入PostgreSQL;没用过这东西,看一下; 一直回车;最后输入口令就登入了;此时是登入默认的数据库postgres;这个数据库是默认安装的; 看一下有没有表,根据资料可以用 \d 或…

K210学习篇(五)PWM

machine.PWM PWM: 脉宽调制模块, 硬件支持的PWM, 可以指定任意引脚(0到47引脚) 每个 PWM 依赖于一个定时器, 即当定时器与 PWM 功能绑定后, 不能作为普通定时器使用了。 因为有 3 个定时器&…

go语言终端交叉编译的事项

一、可以使用的编译环境 go env 查看编译的环境 1.编译linux 64环境[centos7以及以上版本] go env -w GOOS"linux" go env -w GOARCH"amd64" 2.编译linux 32环境[centos6以及以下版本] go env -w GOOS"linux" go env -w GOARCH"386"…

动态库 的制作和使用

文章目录 重要命令制作流程和使用动态库加载失败&解决失败的原因:ldd命令系统加载动态库(共享库)的顺序问题解决途径一、修改环境变量二、修改/etc/ld.so.cache文件列表三、将动态库放在/lib 或 /usr/lib文件中(不推荐&#x…

互联网大厂技术-Redis-集群模型、架构原理、难点应用场景、高频面试问题详解

目录 一、Redis集群模型 1.1、主从模式 1.1.1 主从模式优缺点 1.2、哨兵模式 1.2.1 哨兵模式的作用: 1.2.2 哨兵实现原理 1.2.3 主观下线和客观下线 1.2.4 哨兵模式优缺点 1.3、各大厂的Redis集群方案 1.3.1 客户端分片 1.3.2 代理分片 Twemproxy的优点…

ESP32开发环境的搭建

ESP32开发环境的搭建 Windows11WSL2 Ubuntu22.04 下载ESP32开发所需的库和工具链 下载ESP-IDF库安装必要的工具sudo apt-get install git wget flex bison gperf python python-pip python-setuptools python-serial python-click python-cryptography python-future python…

收款单签字时,报”结算信息表体中本方银行账户、现金账户、票据号 (商业汇票号)不能同时为空,签字操作失败“,能否取消这个校验??

大概整理,如有不当,欢迎留言指出,谢谢! 收款单签字时,报”结算信息表体中本方银行账户、现金账户、票据号 (商业汇票号)不能同时为空,签字操作失败“,能否取消这个校验?&#xff1f…