[MySQL]MySQL内外连接

[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.hqwc.cn/news/22857.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

001- database - 数据库

1、新的数据库进入默认有四个数据库,一般不要轻易删除; -- 创建数据库 CREATE DATABASE 数据库名 -- 查询所有数据库 SHOW DATABASES -- 使用数据库 -- USE 数据库名 -- 查询当前使用的数据库 SELECT DATABASE() -- 删除数据库 DROP DATABASE 数据库名

Apache Tomcat 信息泄露漏洞CVE-2023-28708处理

一、漏洞描述 Apache Tomcat软件是Jakarta Servlet、 Jakarta Server Pages、 Jakarta Expression Language、 Jakarta WebSocket、 Jakarta Annotations和 Jakarta Authentication 规范的开源实现 。Apache Tomcat实现了对Servlet和JavaServer Page(JSP&#xff09…

Kong 服务和路由的添加

管理服务 这里参考DB-less-Mode,因为使用的是yaml配置文件的形式,所以所有的相关配置只需要往初始化的kong.yml文件中添加就可以了,就像nginx的配置文件 DB-less-Mode 创建服务 vim /etc/kong/kong.yml services: - name: my-service #…

flutter开发实战-底部bottomNavigationBar➕PageView

flutter开发实战-底部bottomNavigationBar tabbar在app中非常常见,底部BottomNavigationBar属性 一、BottomNavigationBar属性 BottomNavigationBar组件的常用属性: type:tabbar样式,默认为白色不显示;fixedColor:t…

SkipList

文章目录 SkipList理解跳表从单链表说起查找的时间复杂度空间复杂度插入数据更高效的方式维护索引代码实现索引的抽取概率算法 举例插入元素 删除数据总结为什么Redis选择使用跳表而不是红黑树来实现有序集合 SkipList 理解跳表从单链表说起 在原始单链表中查找元素&#xff…

JavaScript--修改 HTML 元素

这些是一些用于修改 HTML 元素的常见方法&#xff1a; 1、document.createElement(element)&#xff1a;创建 HTML 元素节点。可以使用这个方法创建一个新的 HTML 元素&#xff0c; 例如 document.createElement(div) 将创建一个 <div> 元素节点。 2、document.createA…

【探索AI未来】人工智能技术在软件开发中的应用与革新

自我介绍⛵ &#x1f4e3;我是秋说&#xff0c;研究人工智能、大数据等前沿技术&#xff0c;传递Java、Python等语言知识。 &#x1f649;主页链接&#xff1a;秋说的博客 &#x1f4c6; 学习专栏推荐&#xff1a;人工智能&#xff1a;创新无限、MySQL进阶之路、C刷题集、网络安…

postgresql还原bak

1、第一步肯定是要新建自己还原的目标数据库&#xff0c;例如&#xff1a; 2、进入postgresql的安装目录下的bin目录下 然后地址栏输入cmd进入命令 输入以下 psql -h localhost -U postgres -p 5432 -d SamsinoYardStandard_karamay -f "D:\desktop\zk\20230628.bak&quo…

VQA评测evaluation代码:gqa / aokvqa / vqav2 / scienceQA

VQA评测分多种&#xff0c;这里提几种&#xff0c;代码参考来自lavis和mmpretrain。 一、gqa评测&#xff08;只有一个answer&#xff09; 数据集下载及格式&#xff1a; blip中json地址 图片下载 # gqa格式已重新整理&#xff0c;特点是每个question对应的gt_answers只有一…

Python自动化之pytest常用插件

目录 1、失败重跑 pytest-rerunfailures 2、多重校验 pytest-assume 3、设定执行顺序 pytest-ordering 4、用例依赖&#xff08;pytest-dependency&#xff09; 5.分布式测试(pytest-xdist) 6.生成报告&#xff08;pytest-html&#xff09; 1、失败重跑 pytest-rerunfailu…

Unity游戏源码分享-Unity5.4.1打砖块游戏Breakout_Game_Starter_Kit

Unity5.4.1打砖块游戏Breakout_Game_Starter_Kit 童年的回忆 项目地址&#xff1a;https://download.csdn.net/download/Highning0007/88042779Unity游戏源码分享-

SpringCloud——消息总线Bus

SpringCloud Bus将分布式系统的节点与轻量级消息系统链接起来的框架&#xff0c;是对SpringCloud Config的加强&#xff0c;广播自动版的配置。 支持两种消息代理&#xff1a;RabbitMQ和Kafka 一、创建工程&#xff0c;添加依赖 spring-cloud-starter-config spring-cloud-st…