数据库常见的三种join方式 inner join ,left outter join,right outter join

数据库常见的三种join方式 inner join ,left outter join,right outter join数据库常见的三种join方式 inner join ,left outter join,right outter join

大家好,又见面了,我是你们的朋友全栈君。

转自:https://www.cnblogs.com/rickons/p/5504284.html

数据库常见的join方式有三种:inner join, left outter join, right outter join(还有一种full join,因不常用,本文不讨论)。这三种连接方式都是将两个以上的表通过on条件语句,拼成一个大表。以下是它们的共同点:

  1. 关于左右表的概念。左表指的是在SQL语句中排在left join左边的表,右表指的是排在left join右边的表。
  2. 在拼成的大表中,左表排在左边,右表排在右边。
  3. on条件语句最好用=号对两表相应的主外键进行连接。当然,也可以用其他操作符,如>, <, 来连接两表的任一字段,此时的关系将非常复杂,连接后的记录数也随之而变得不确定。如果在一些特殊的场合中需要用到这种方式,必须通过简单的实例加以确认,否则,连接结果很可能不是我们所想要的!
  4. on条件语句不能省略。
  5. 可以连锁使用join,每次使用join都令另一表与当前的表或连接的结果相连接。

在下文中,用到了两个表,”部门”表与”组织”表,其中,”部门”表有一名为”组织编号”的外键,指向”组织”表中的主键”编号”。

inner join

  格式:select * from 部门 inner join 组织 on 部门.组织编号 = 组织.编号

  目的:将两表中符合on条件的所有记录都找出来。

  规律:

    1. 拼出的大表记录不会增加。
    2. 如果左边与右表的关系是一对多的关系,在选出的任一记录中,假若右表有多个记录与其对应,那么,连接后的左表,主键将不再唯一。

  典型应用:将存在多关系的引用表放在左表,将存在一关系的被引用表放在右表,通过=号将主外键进行连接,通过对右表设定过滤条件,选出相应的且主键唯一的左表记录。

  备注:inner join 是默认的连接方式,可缩写为join。

  转化为where子句:

    select * from 部门, 组织 where 部门.组织编号 = 组织.编号

 

left outter join

  格式: select * from 部门 left join 组织 on 部门.组织编号 = 组织.编号

  格式: select * from 组织 left join 部门 on 组织.编号 = 部门.组织编号

  目的:将左表的所有记录列出,右表中只要符合on条件的,与左表记录相拼合,不符合条件的,填以null值。

  规律:

    1. 选出所有符合条件的左表,如果左边与右表的关系是一对一的关系,则拼成的大表记录不会改变。
       如果左边与右表的关系是多对一的关系,则拼成的大表记录也不会改变。
       如果左边与右表的关系是一对多的关系,则拼成的大表记录会增加。对于每一具有一对多关系的左表记录,如果左表1:N与右表对应,那么会多出N-1条记录。例如,如果左表第一条记录1:3对应于右表,多出2条记录。如果左表第二条记录1:2对应于右表,则再多出1条记录。这样,总共多出3条记录。其他类推。
    2. 如果左边与右表的关系是一对多的关系,在选出的任一记录中,假若右表有多个记录与其对应,那么,连接后的左表,主键将不再唯一。
    3. 如果左边与右表的关系是一对多的关系,对于左表任一记录,如果右表没有记录与其相对应,则全部填以null值。

  典型应用:将存在多关系的引用表放在左表,将存在一关系的被引用表放在右表,通过对右表设定过滤条件,选出相应的且主键唯一的左表记录。

  备注:left outter join可用left join代替。在有些数据库中,如HSqlDb, 只能使用left join而不能使用left outter join。

  转化为where子句:

    select * from 部门, 组织 where 部门.组织编号 = 组织.编号

right outter join

  格式: select * from 部门 right join 组织 on 部门.组织编号 = 组织.编号

  格式: select * from 组织 right join 部门 on 部门.组织编号 = 组织.编号

  目的:将右表的所有记录列出,左表中只要符合on条件的,与右表记录相拼合,不符合条件的,填以null值。

  规律:(与left outter join相反)

  典型应用:可转化成left outter join。例如

    select * from 组织 right join 部门 on 部门.组织编号 = 组织.编号
    与
    select * from 部门 left join 组织 on 部门.组织编号 = 组织.编号
    的效果一样

  备注:right outter join可用right join代替。在有些数据库中,如HSqlDb, 没有实现right join功能。

  转化为where子句:

    select * from 部门, 组织 where 部门.组织编号 = 组织.编号

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/106220.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • React高阶组件实践

    React高阶组件实践前言React高阶组件,即Higher-OrderComponent,其官方解释是:Ahigher-ordercomponentisafunctionthattakesacomponentandreturnsanewcomponent.一个传入一个组件,返回另一个组件的函数,其概念与高阶函数的将函数作为参数传入类似。用代码来解释就是:const…

    2022年10月29日
  • PyTorch安装最全流程

    PyTorch安装最全流程本文介绍基于Anaconda环境以及PyCharm软件结合,安装PyTorch深度学习框架。1.Anaconda安装下载链接:https://www.anaconda.com/1.1点击Next1.2点击同意1.3点击Next1.4选择目标文件夹,点击下一步1.5将Anaconda加入到系统变量安装成功后,在CMD中检查Anaconda时候加入到环境变量中。1.6单击启动AnacondaPrompt创建虚拟“房间”通过conda创建一个名为:pytorch.

  • Git创建远程分支并提交代码到远程分支「建议收藏」

    Git创建远程分支并提交代码到远程分支「建议收藏」1、可以通过gitbranch-r命令查看远端库的分支情况如图所示,远程仓库只有一个master分支2、从已有的分支创建新的分支(如从master分支),创建一个dev分支但此时并没有在远程仓库上创建分支如图所示还是只有一个master分支3、建立本地到远端仓库的链接–这样代码才能提交上去使用命令行gitpush–set-…

  • Java虚拟机:对象创建过程与类加载机制、双亲委派模型

    Java虚拟机:对象创建过程与类加载机制、双亲委派模型

  • PKI体系快速了解「建议收藏」

    PKI体系快速了解「建议收藏」首先,PKI(PublicKeyInfrastructure)是一个体系。公钥基础设施是一个包括硬件、软件、人员、策略和规程的集合,用来实现基于公钥密码体制的密钥和证书的产生、管理、存储、分发和撤销等功能。PKI体系是计算机软硬件、权威机构及应用系统的结合。它为实施电子商务、电子政务、办公自动化等提供了基本的安全服务,从而使那些彼此不认识或距离很远的用户能通过信任链安全地交流。—百度百科说白了,PKI还是提供了彼此身份确认的服务,确保通信的安全。…

  • 什么是SSH 以及常见的ssh 功能

    什么是SSH 以及常见的ssh 功能什么是SSH?简单说,SSH是一种网络协议,用于计算机之间的加密登录。如果一个用户从本地计算机,使用SSH协议登录另一台远程计算机,我们就可以认为,这种登录是安全的,即使被中途截获,密码也不会泄露。最早的时候,互联网通信都是明文通信,一旦被截获,内容就暴露无疑。1995年,芬兰学者TatuYlonen设计了SSH协议,将登录信息全部加密,成为互联网安全的一个基本解决方案,迅速在全世界获得推广,目…

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号