SQL表间关联查询详解

news2025/1/21 6:13:10

简介

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

样例准备

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

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

左外连接

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

执行以下语句:

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

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

返回结果如下图:

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

右外连接

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

执行以下语句:

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

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

返回结果如下图:

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

全外连接

全外连接简称全连接,语法为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。

内连接

内连接语法为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。

交叉连接

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

执行以下语句:

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

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

返回结果如下图:

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

交叉连接可以加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。

自然连接

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

执行以下语句:

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

select * from TESTTABLEONE a natural join TESTTABLETWO b;

返回结果如下图:

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2279675.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

路由器旁挂三层网络实现SDWAN互联(爱快SD-WAN)

近期因公司新办公区建设,原有的爱快路由器的SDWAN功能实现分支之间互联的服务还需要继续使用。在原有的小型网络中,使用的爱快路由器当作网关设备,所以使用较为简单,如下图所示。 现变更网络拓扑为三层网络架构,但原有的SDWAN分支…

麦田物语学习笔记:制作[SceneName]Attribute特性

基本流程 因为在现有的项目中,像开始场景的切换或者Telepot组件都需要手动输入场景名,有时还可能键入出错,而该特性能用选择的方式去解决这一问题 1.代码实现 SceneNameDrawer.cs //参数绘制 using UnityEditor; using UnityEngine; #if UNITY_EDITOR [CustomPropertyDrawer(…

HTML之拜年/跨年APP(改进版)

目录: 一:目录 二:效果 三:页面分析/开发逻辑 1.页面详细分析: 2.开发逻辑: 四:完整代码(不多废话) index.html部分 app.json部分 二:效果 三:页面…

【2024 年度总结】从小白慢慢成长

【2024 年度总结】从小白慢慢成长 1. 加入 CSDN 的契机2. 学习过程2.1 万事开头难2.2 下定决心开始学习2.3 融入技术圈2.4 完成万粉的目标 3. 经验分享3.1 工具的选择3.2 如何提升文章质量3.3 学会善用 AI 工具 4. 保持初心,继续前行 1. 加入 CSDN 的契机 首次接触…

一文大白话讲清楚webpack基本使用——2——css相关loader的配置和使用

一文大白话讲清楚webpack基本使用——2——css相关loader的配置和使用 1. 建议按文章顺序从头看是看 第一篇:一文大白话讲清楚啥是个webpack第二篇:一文大白话讲清楚webpack基本使用——1——完成webpack的初步构建然后看本篇,Loader的配置…

如何将 session 共享存储到 redis 中

文章目录 一. 分布式 session 登录1.1 什么是分布式?1.2 Session 共享1.3 为什么服务器 A 登录后,请求发到服务器 B,不认识该用户?1.4 共享存储 二. Session 共享实现Redis三. 测试session共享四. cookie设置4.1 前端4.2 后端 一.…

Debezium日常分享系列之:对于从Oracle数据库进行快照的性能优化

Debezium日常分享系列之:对于从Oracle数据库进行快照的性能优化 源数据库Kafka Connect监控测试结果 源数据库 Oracle 19c,本地,CDB数据库主机的I/O带宽为6 GB/s,由此主机上运行的所有数据库共享临时表空间由42个文件组成&#x…

STM32 FreeROTS Tickless低功耗模式

低功耗模式简介 FreeRTOS 的 Tickless 模式是一种特殊的运行模式,用于最小化系统的时钟中断频率,以降低功耗。在 Tickless 模式下,系统只在有需要时才会启动时钟中断,而在无任务要运行时则完全进入休眠状态,从而降低功…

Redis - General - 未授权访问漏洞(用户配置问题)

0x01:产品简介 Redis(Remote Dictionary Service,远程数据服务),是一款开源的基于内存的键值对存储系统,其主要被用作高性能缓存服务器使用(比如作为消息中间件和用于 Session 共享&#xff09…

学习threejs,使用OrbitControls相机控制器

👨‍⚕️ 主页: gis分享者 👨‍⚕️ 感谢各位大佬 点赞👍 收藏⭐ 留言📝 加关注✅! 👨‍⚕️ 收录于专栏:threejs gis工程师 文章目录 一、🍀前言1.1 ☘️THREE.OrbitControls 相机控…

SQL和MySQL以及DAX的日期表生成?数字型日期?将生成的日期表插入到临时表或者实体表中

几种生成日期表的方法 如何用SQL语句生成日期表呢? 如何用MySQL语句生成日期表呢? 如何用DAX语句生成日期表呢? 1. MySQL生成日期表 1.1 日期格式:yyyy-MM-dd 字符型 2024-01-02 -- 生成日期表 WITH RECURSIVE temp_dateTable …

C# 动态创建Label和ComboBox控件并修改Text

背景:在做项目的时候可能需要根据一定数量创建某些控件并修改其属性,本文以控件label、ConboBox控件进行动态创建。 程序运行前后的的Form动态图 代码如下: using System; using System.Collections.Generic; using System.ComponentModel; …

2025年编程语言热度分析:Python领跑,Go与Rust崛起

TIOBE Index(TIOBE 编程语言指数)是一个衡量编程语言流行度的排名系统。它通过分析多种搜索引擎、在线编程社区、技术论坛、问答网站(如 Google、Bing、Yahoo、Wikipedia、Stack Overflow)等的搜索和讨论数据,评估不同…

【从零开始入门unity游戏开发之——C#篇46】C#补充知识点——命名参数和可选参数

考虑到每个人基础可能不一样,且并不是所有人都有同时做2D、3D开发的需求,所以我把 【零基础入门unity游戏开发】 分为成了C#篇、unity通用篇、unity3D篇、unity2D篇。 【C#篇】:主要讲解C#的基础语法,包括变量、数据类型、运算符、…

python学opencv|读取图像(三十九 )阈值处理Otsu方法

【1】引言 前序学习了5种阈值处理方法,包括(反)阈值处理、(反)零值处理和截断处理,还学习了一种自适应处理方法,相关文章链接为: python学opencv|读取图像(三十三)阈值处理-灰度图像-CSDN博客 python学o…

【Idea】编译Spring源码 read timeout 问题

Idea现在是大家工作中用的比较多的开发工具,尤其是做java开发的,那么做java开发,了解spring框架源码是提高自己技能水平的一个方式,所以会从spring 官网下载源码,导入到 Idea 工具并编译,但是发现build的时…

macOS安装Gradle环境

文章目录 说明安装JDK安装Gradle 说明 gradle8.5最高支持jdk21,如果使用jdk22建议使用gradle8.8以上版本 安装JDK mac系统安装最新(截止2024.9.13)Oracle JDK操作记录 安装Gradle 下载Gradle,解压将其存放到资源java/env目录…

VMware Workstation Pro 17免费开放,再也不用到处找license了

VMware Workstation Pro 17免费开放啦 VMware Workstation Pro 17.6.2 版本介绍一、免费开放二、性能与稳定性提升三、重要问题修复1. Linux 快照崩溃问题解决2. Windows 11 主机优化3. Linux 内核兼容性增强 四、功能亮点1. 全新的性能优化2. 稳定性和可靠性增强3. 更友好的用…

寒假1.19

题解 web(堆叠注入):[SUCTF 2019]EasySQL 参考wp:BUUCTF [SUCTF 2019]EasySQL1 writeup(详细版)-CSDN博客 判断: 法一: 打开环境,有一个可交互的界面,随便输入几个字…

WebGL渲染3D高斯泼溅模型

WebGL渲染3D高斯泼溅模型 原文: GitHub - kishimisu/Gaussian-Splatting-WebGL: 3D Gaussian Splatting Renderer for WebGL 此外,一些基于webgpu,threejs渲染,以及和cesium集成的项目如下 GitHub - playcanvas/supersplat: 3D Ga…