【数据库CS751】数据库各种连接的理解(包括自然连接,内连接,外连接)

目录

一、前言

二、自然连接 NATURAL JOIN

三、内连接 INNER JOIN

四、外连接OUTER JOIN


一、前言

数据库的各种连接可能是学习数据库的时候最容易懵的点之一了。

所以今天来仔细盘一盘数据库的各种连接究竟是怎么回事。

本文使用的数据库表,都在《【数据库CS751】数据库的建表与插入》一文中有完整的SQL语句,可以去复制粘贴来一边测试一边理解。

二、自然连接 NATURAL JOIN

1.自然连接,是一种很自然的连接,没有指定连接条件,但是连接语句会自动检索两个表R,S的相同名称的列,注意:我说的是相同名称

如果不是相同名称,自然连接就会出现一些问题。

如果不是相同名称,则连接退化为笛卡尔积:

例如:现在有这样的表存在,我想让EMPLOYEE和WORKS_ON表自然连接,那么虽然Ssn与Essn是同一个意思,但是由于列名不一样,导致自然连接无法识别,就会成为笛卡尔积:

连接语句如下:

select * from employee natural join works_on

结果:筛选出来128条记录?!

 

 SSN与ESSN并没有合并,而且在EMPLOYEE中有8条内容,WORKS_ON中有16条

16*8 = 128,所以可以肯定的是,当自然连接无法匹配到同样的列名称时,将退化为笛卡尔积,变成无意义的表连接。所以一定要谨慎命名列名!

但是,我们依然可以通过AS重命名的方式来规避这一问题。

三、内连接 INNER JOIN

只有在另一个关系中存在匹配的元组时,才会在结果中包含元组。

也就是说,内连接,只匹配双方都有的项,同时,内连接需要连接条件,用on引出

例如:

select * from employee inner join works_on on employee.Ssn = works_on.Essn

结果:

 

 那么有16行匹配结果。这就与前面的自然连接失败形成鲜明对比。这也是自然连接成功时应该出现的结果。

同时,我们发现,其实当自然连接匹配成功时就是内连接,这就是自然连接与内连接的关系,同时Mysql中默认的join形式就是内连接或者自然连接。

四、外连接OUTER JOIN

那么outer join,分为左右外连接与全外连接,但是Mysql并不支持全外连接,

那么我们只说说左外连接吧:右外连接雷同

左外连接:

1.左表中的每个元组必须出现在result中

2.如果没有匹配的元组,为右表的属性添加NULL值

我们来举个例子:

我们用EMPLOYEE表左外连接DEPARTMENT表,虽然这么做没什么意义,但是我们却能清楚看到左外连接的效果:

select * from employee left outer join department on employee.Ssn = department.Mgr_ssn

 我们会发现在原DEPARTMENT的属性中出现了不匹配的项,这些项会被赋予null值

同时我们看到有8行返回,刚好等于EMPLOYEE表的行数,所以就知道,整个左外连接的过程,就是右表向左表按条件匹配的过程,没有匹配上的就给空值,匹配上的就自动连接。

右外连接基本同理。

另外,左右是相对的,我左外连接左表和右外连接右表其实是一样的效果。

就比如我刚刚是:

select * from employee left outer join department on employee.Ssn = department.Mgr_ssn

 我现在换成右外连接:同时调换左右表位置

select * from department right outer join employee on employee.Ssn = department.Mgr_ssn

那么结果是一样的:

 

  • 7
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
基于Java的远程监控系统主要通过使用Java语言和相关技术实现对远程设备或系统的监控和管理。 首先,我们可以使用Java的网络编程功能来实现远程设备的通信。通过建立基于TCP/IP协议的网络连接,监控系统可以与远程设备进行实时的数据交互和通信。这样,我们可以获取设备的状态信息、传感器数据等,并实现命令的下发和远程操作。 其次,Java的多线程编程能力可以对远程设备进行并发的监控。我们可以使用多个线程同时监测不同的设备或系统,提高监控效率和准确性。通过多线程,我们可以实现设备的实时监控、故障检测和报警等功能。 此外,Java的图形界面编程技术可以提供友好的用户界面,方便用户对远程设备进行监控和管理。我们可以使用Swing或JavaFX等工具包来创建监控面板,展示设备的状态信息和统计数据。用户可以通过界面对设备进行配置、查看历史数据、设置报警规则等。 此外,基于Java的远程监控系统还可以利用Java数据库连接(JDBC)技术来存储和管理监控数据。通过将数据存储在关系数据库中,我们可以实现数据的持久化和追溯。同时,可以利用SQL语言和Java的数据库操作功能来进行数据查询和统计分析,帮助用户更好地理解和利用监控数据。 综上所述,基于Java的远程监控系统可以通过使用Java网络编程、多线程编程、图形界面编程和数据库连接技术,实现对远程设备或系统的监控和管理。这种系统可以提供实时的监控数据和报警功能,帮助用户及时发现设备故障和异常情况,并对设备进行远程控制和管理。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

旋转跳跃我闭着眼

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值