SQL表间关联查询实例详解

2025-04-16 16:50

本文主要是介绍SQL表间关联查询实例详解,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

《SQL表间关联查询实例详解》本文主要讲解SQL语句中常用的表间关联查询方式,包括:左连接(leftjoin)、右连接(rightjoin)、全连接(fulljoin)、内连接(innerjoin)、...

简介

本文主要讲解SQL语句中常用的表间关联查询方式,包括:左连接(left join)、右连接(right join)、全连接(full join)、内连接(inner join)、交叉连接(cross join)、自然连接(natural join)。

样例准备

oracle数据库为例,现在有两张表TESTTABLEONE(简称a表)和TESTTABLETWO(简称b表),两张表分别有id和name两个字段,两张表数据如下两图所示。

SQL表间关联查询实例详解

SQL表间关联查询实例详解

China编程张表各有4条数据,其中,a表和b表都有id01和id02这两条数据,a表有id03和id04两条数据但b表没有,b表有id05和id06两条数据但a表没有。

左外连接

左外连接简称左连,语法为left joinleft outer join,左表返回全部数据,右表返回满足连接条件的数据,对于左表存在而右表不存在的数据,右表对应的字段返回NULL。

执行以下语句:

--left join前面的a表就是左表,left join后面的b表就是右表,onTUPNGJtXix的后面是连接编程China编程条件,以下连接条件表示按id字段匹配。China编程

select a.*,b.* from TESTTABLEONE a left join TESTTABLETWO b on a.id=b.id;

返回结果如下图:

左表(a表)返回全部4条数据,右表(b表)只返回了id01和id02,对于左表存在而右表不存在的id03和id04两条数据,左表返回全部数据,而右表则返回NULL。

SQL表间关联查询实例详解

右外连接

右外连接简称右连,语法为right joinright outer join,右表返回全部数据,左表返回满足连接条件的数据,对于右表存在而左表不存在的数据,左表对应的字段返回NULL。

执行以下语句:

--right join前面的a表就是左表,right join后面的b表就是右表,on的后面是连接条件,以下连接条件表示按id字段匹配。

seandroidlect a.*,b.* from TESTTABLEONE a right join TESTTABLETWO b on a.id=b.id;

返回结果如下图:

右表(b表)返回全部4条数据,左表(a表)只返回了id01和id02,对于右表存在而左表不存在的id05和id06两条数据,右表返回全部数据,而左表则返回NULL。

SQL表间关联查询实例详解

全外连接

全外连接简称全连接,语法为full joinfull outer join,返回左表和右表的全部数据,对于左表存在而右表不存在的数据,右表对应的字段返回NULL,对于右表存在而左表不存在的数据,左表对应的字段返回NULL。

执行以下语句:

--full join连接a表和b表,on的后面是连接条件,以下连接条件表示按id字段匹配。

select a.*,b.* from TESTTABLEONE a full join TESTTABLETWO b on a.id=b.id;

返回结果如下图:

左表和右表都返回全部4条数据,对于左表存在而右表不存在的id03和id04两条数据,右表则返回NULL,对于右表存在而左表不存在的id05和id06两条数据,左表则返回NULL。

SQL表间关联查询实例详解

内连接

内连接语法为inner join,只返回左表和右表满足连接条件的数据,对于左表存在而右表不存在的数据以及右表存在而左表不存在的数据,都不返回。

执行以下语句:

--inner join连接a表和b表,on的后面是连接条件,以下连接条件表示按id字段匹配。

select a.*,b.* from TESTTABLEONE a inner join TESTTABLETWO b on a.id=b.id;

以下写法的效果也相当于内连接:

--a表和b表直接用逗号隔开,把内连接的条件写到where条件里面。

select a.*,b.* from TESTTABLEONE a,TESTTABLETWO b where a.id=b.id;

返回结果如下图:

只返回左表和右表都存在的数据:id01和id02。

SQL表间关联查询实例详解

交叉连接

交叉连接语法为cross join,不带连接条件,即没有on的部分,返回左表和右表的笛卡尔积,即左表所有数据与右表所有数据组合。

执行以下语句:

--cross join连接a表和b表,不带连接条件

select a.*,b.* from TESTTABLEONE a cross join TESTTABLETWO b;

返回结果如下图:

总共返回16条数据,即左表4条数据乘以右表4条数据。

SQL表间关联查询实例详解

交叉连接可以加where条件,可以起到内连接的效果。

执行以下语句:

--cross join加上where条件(a.id=b.id),相当于inner join。

select a.*,b.* from TESTTABLEONE a cross join TESTTABLETWO b where a.id=b.id;

返回结果如下图:

只返回左表和右表都存在的数据:id01和id02。

SQL表间关联查询实例详解

自然连接

自然连接语法为natural join,不带显示连接条件,会自动对左表和右表中名称相同的字段进行连接,只返回左表和右表都存在的数据,并且,对于两张表中名称相同的连接字段,不会重复显示。

执行以下语句:

--natural join不需要带上显示的连接条件(即on后面的部分)。

select * from TESTTABLEONE a natural join TESTTABLETWO b;

返回结果如下图:

只返回左表和右表都存在的数据,并且,作为自然连接条件的ID和NAME字段没有重复显示。

SQL表间关联查询实例详解

到此这篇关于SQL表间关联查询详解的文章就介绍到这了,更多相关SQL关联查询内容请搜索China编程(www.chinasem.cn)以前的文章或继续浏览下面的相关文章希望大家以后多多支持China编程(www.chinasem.cn)!

这篇关于SQL表间关联查询实例详解的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1154249

相关文章

Redis 的 SUBSCRIBE命令详解

《Redis的SUBSCRIBE命令详解》Redis的SUBSCRIBE命令用于订阅一个或多个频道,以便接收发送到这些频道的消息,本文给大家介绍Redis的SUBSCRIBE命令,感兴趣的朋友跟随... 目录基本语法工作原理示例消息格式相关命令python 示例Redis 的 SUBSCRIBE 命令用于订

Linux下MySQL数据库定时备份脚本与Crontab配置教学

《Linux下MySQL数据库定时备份脚本与Crontab配置教学》在生产环境中,数据库是核心资产之一,定期备份数据库可以有效防止意外数据丢失,本文将分享一份MySQL定时备份脚本,并讲解如何通过cr... 目录备份脚本详解脚本功能说明授权与可执行权限使用 Crontab 定时执行编辑 Crontab添加定

使用Python批量将.ncm格式的音频文件转换为.mp3格式的实战详解

《使用Python批量将.ncm格式的音频文件转换为.mp3格式的实战详解》本文详细介绍了如何使用Python通过ncmdump工具批量将.ncm音频转换为.mp3的步骤,包括安装、配置ffmpeg环... 目录1. 前言2. 安装 ncmdump3. 实现 .ncm 转 .mp34. 执行过程5. 执行结

Python中 try / except / else / finally 异常处理方法详解

《Python中try/except/else/finally异常处理方法详解》:本文主要介绍Python中try/except/else/finally异常处理方法的相关资料,涵... 目录1. 基本结构2. 各部分的作用tryexceptelsefinally3. 执行流程总结4. 常见用法(1)多个e

SpringBoot日志级别与日志分组详解

《SpringBoot日志级别与日志分组详解》文章介绍了日志级别(ALL至OFF)及其作用,说明SpringBoot默认日志级别为INFO,可通过application.properties调整全局或... 目录日志级别1、级别内容2、调整日志级别调整默认日志级别调整指定类的日志级别项目开发过程中,利用日志

Java中的抽象类与abstract 关键字使用详解

《Java中的抽象类与abstract关键字使用详解》:本文主要介绍Java中的抽象类与abstract关键字使用详解,本文通过实例代码给大家介绍的非常详细,感兴趣的朋友跟随小编一起看看吧... 目录一、抽象类的概念二、使用 abstract2.1 修饰类 => 抽象类2.2 修饰方法 => 抽象方法,没有

MySQL8 密码强度评估与配置详解

《MySQL8密码强度评估与配置详解》MySQL8默认启用密码强度插件,实施MEDIUM策略(长度8、含数字/字母/特殊字符),支持动态调整与配置文件设置,推荐使用STRONG策略并定期更新密码以提... 目录一、mysql 8 密码强度评估机制1.核心插件:validate_password2.密码策略级

从入门到精通详解Python虚拟环境完全指南

《从入门到精通详解Python虚拟环境完全指南》Python虚拟环境是一个独立的Python运行环境,它允许你为不同的项目创建隔离的Python环境,下面小编就来和大家详细介绍一下吧... 目录什么是python虚拟环境一、使用venv创建和管理虚拟环境1.1 创建虚拟环境1.2 激活虚拟环境1.3 验证虚

详解python pycharm与cmd中制表符不一样

《详解pythonpycharm与cmd中制表符不一样》本文主要介绍了pythonpycharm与cmd中制表符不一样,这个问题通常是因为PyCharm和命令行(CMD)使用的制表符(tab)的宽... 这个问题通常是因为PyCharm和命令行(CMD)使用的制表符(tab)的宽度不同导致的。在PyChar

sky-take-out项目中Redis的使用示例详解

《sky-take-out项目中Redis的使用示例详解》SpringCache是Spring的缓存抽象层,通过注解简化缓存管理,支持Redis等提供者,适用于方法结果缓存、更新和删除操作,但无法实现... 目录Spring Cache主要特性核心注解1.@Cacheable2.@CachePut3.@Ca