首页 > 数据库 >图解数据库左连接、右连接、内连接、外连接、全连接

图解数据库左连接、右连接、内连接、外连接、全连接

时间:2024-01-14 09:55:40浏览次数:27  
标签:outer -- 数据库 id join 图解 连接 select

图解数据库左连接、右连接、内连接、外连接、全连接

 

1. 前言

在日常的数据库增删改查任务中,由于数据的规范设计,数据通常不集中在同一张表里,所以经常会涉及到多表的数据查询,多表数据查询需要表之间的连接,而表间连接方式有很多,下面就针对各种表连接方式进行介绍。在介绍之前,为了方便对文字概念的深入理解,本文利用实例和图例进行概念的补充深化,为准确理解提供支持。

1)数据库的常用连接方式:

内连接:inner join,最常见的一种连接方式

左连接:也叫左外连接(left [outer] join)

右连接:也叫右外连接(right [outer] join)

全连接:full [outer] join ,MySQL不能直接支持。

 

 2)例子中的两个表的结构和数据

 

 

  

2. 内连接

内连接,也叫等值连接, inner join得出同时存在t1表和t2表的数据集,通俗一点说就是求两个表的交集。

SQL语句

-- join
select * from course c join teacher t ON c.t_id = t.t_id 

-- inner join
select * from course c inner join teacher t on c.t_id = t.t_id 

-- 逗号的连表方式就是内连接
select * from course c ,  teacher t where c.t_id = t.t_id 

“inner join”两边的表的位置可以互换,结果都一样

3. 外连接

1) 左连接

左连接:left [outer] join,左连接从左表取出所有记录,与右表匹配。如果没有匹配,以null值代表右边表的列。outer 可以不写,默认情况下不写outer关键字。

SQL语句

-- left join
select * from course c left join teacher t  on  c.t_id = t.t_id 

-- left outer join
select * from course c left outer join teacher t  on c.t_id = t.t_id 

“left join”两边的表的位置不可以互换,交换后结果可能不一样。需要考虑好哪个是主表,哪个是从表。写在前面的是主表

2) 右连接

右连接:right [outer] join,右连接从右表取出所有记录,与左表匹配。如果没有匹配,以null值代表左边表的列。outer 可以不写,默认情况下不写outer关键字。

SQL语句

-- right join
select * from course c right join teacher t on   c.t_id = t.t_id 

-- right outer join
select * from course c right outer join teacher t on   c.t_id = t.t_id 

4. 全连接

两个表的并集,MySQL暂不支持这种语句,不过可以使用union将两个结果集“堆一起”,利用左连接,右连接分两次将数据取出,然后用union将数据合并去重。

 

SQL语句

-- oracle的全连接
select * from a full join b on a.id = b.id

-- mysql的全连接
-- mysql中没有full join,mysql可以使用union实现全连接;
select * from a left join b on a.id = b.id
union
select * from a right join b on a.id = b.id

5. 总结

最后,通过一张图来汇总常用的连接方式:

 

标签:outer,--,数据库,id,join,图解,连接,select
From: https://www.cnblogs.com/livebetter/p/17963384

相关文章

  • .NET中轻松应用SQLite:零配置数据库引擎的完美指南
     SQLite是一种轻量级的嵌入式数据库引擎,它在.NET中被广泛使用。SQLite是一个零配置的数据库引擎,不需要服务器,可以直接在应用程序中使用。下面是一个简单的示例,演示如何在.NET中使用SQLite,并提供了常见的查询、增加、修改和删除功能。首先,你需要在项目中安装 System.D......
  • 如何正确使用数据库的读写分离
    背景在应用系统发展的初期,我们并不知道以后会发展成什么样的规模,所以一开始不会考虑复杂的系统架构,复杂的系统架构费时费力,开发周期长,与系统发展初期这样的一个定位是不吻合的。所以,我们都会采用简单的架构,随着业务不断的发展,访问量不断升高,我们再对系统进行架构方面的优化。架......
  • Jmeter 如何连接mysql数据库?
    1首先安装jmeterjdbc插件JDBC驱动包下载教程:https://blog.csdn.net/qq_50896685/article/details/1291548012安装好后将插件放在lib目录ext目录下 3jmeter如何连接?首先添加一个jdbcconnectionconfigure 这里有三个字段需要配置,第一个环境变量名字,后面jdbcreques......
  • 如何通过Navicat把MySQL远程数据库导入到本地数据库
    前提:先安装好MySQL、Navicat。1.打开Navicat,新建连接,连接名由自己取,我取的是localhost,如下填写好各项信息,测试连接,连接成功。那本地数据库就建好了。2.在localhost下新建目标数据库,写好数据库名3.点击Navicat的【工具】菜单,选择【数据传输】,细心选好源库和目标库,然后按提示一......
  • redis 数据库
    1redis单机数据库结构1redisserver/client结构 2 每个数据库都有一个包含所有数据的字典 2过期时间redis每个库都会保存一个结构,里面包含了每个键的过期时间的字典结构;redis 如何判断过期,首先检查给的键是否在过期字典中,如果在,那就获取过期时间,在检查当前Un......
  • 深入学习数据库事务
    什么是数据库事务事务(Transaction):一般是指要做的或所做的事情。在计算机术语中是指访问并可能更新数据库中各种数据项的一个程序执行单元(unit)。在计算机术语中,事务通常就是指数据库事务,是逻辑上的一组数据库操作,要么都执行,要么都不执行。例子:假如A要给B转账500元,这个转账会涉及......
  • Java使用modbus4j通过串口modbus-rtu协议 连接设备 demo
    前言项目中需要使用串口来连接操控烟雾报警器且只能使用modbus-rtu协议在找了一堆资料后终于成功了在此呈上代码和资料链接【ModBus】modbus之modbus4j的使用和流程原理解析(5)-CSDN博客使用modbus4j通过串口解析modbus协议(java)_javamodbus4j-CSDN博客 串口通讯需要使用modbus4j......
  • openGauss学习笔记-196 openGauss 数据库运维-常见故障定位案例-强制结束指定的问题会
    openGauss学习笔记-196openGauss数据库运维-常见故障定位案例-强制结束指定的问题会话196.1强制结束指定的问题会话196.1.1问题现象有些情况下,为了使系统继续提供服务,管理员需要强制结束有问题的会话。196.1.2处理办法以操作系统用户omm登录主机。使用如下命令连接......
  • 手把手教你MongoDB 数据库连接URL 格式、authSource参数
    快速了解MongoDB官方文档MongoDB是一个文档数据库MongoDB将数据存储为一个文档,数据结构由键值(key=>value)对组成使用URL连接MongoDB数据库标准URI连接语法:mongodb://[username:password@]host1[:port1][,host2[:port2],...[,hostN[:portN]]][/[database][?options]]......
  • 确保你的数据库安全:如何防止SQL注入攻击
    最近,越来越多的组织和公司受到SQL注入攻击的困扰。这种攻击可以导致数据库中的敏感信息泄露,破坏数据完整性,甚至可能导致整个系统崩溃。如果您是一名数据库管理员或网站管理员,您需要了解如何保护您的数据库免受SQL注入攻击的威胁。在本文中,小德将介绍什么是SQL注入攻击,以及如何预防......