1 join 连接的作用

join 连接用于把来自两个或多个表的行结合起来,基于这些表之间的共同字段。
最常见的 join 类型:inner join(简单的 join)。 inner join 从多个表中返回满足 join条件的所有行。

2 示例数据

让我们看看选自 "orders" 表的数据:

csdn=> select * from orders;order_id | cust_id | empoyee_id |     order_date      | ship_id
----------+---------+------------+---------------------+---------1 |       3 |          9 | 2018-09-21 09:20:23 |       32 |       4 |          9 | 2018-06-28 11:10:23 |       53 |       6 |          3 | 2018-09-21 13:02:19 |       34 |       3 |          7 | 2018-09-28 14:11:16 |       45 |       1 |          4 | 2018-09-30 15:02:12 |       4
(5 rows)csdn=>
然后,看看选自 "customers" 表的数据:
 
csdn=> select * from customers;id |  name  |     addr      | city |  zip   | province
----+--------+---------------+------+--------+----------1 | 鲁智深 | 北京路27号    | 平凉 | 200000 | 甘肃省2 | 李四   | 南京路12号    | 杭州 | 310000 | 浙江市3 | 王五   | 花城大道17号  | 广州 | 510000 | 广州省4 | 马六   | 江夏路19号    | 武汉 | 430000 | 湖北省5 | 赵七   | 西二旗12号    | 北京 | 100000 | 北京市6 | 宋一   | 花城大道21号  | 广州 | 510000 | 广东省7 | 刘二   | 长安街 121 号 | 北京 | 100000 | 北京市8 | 宋江   | 梁山路1号     | 济南 | 250000 | 山东省| 武松   |               | 邢台 |        | 河北省10 | 韩信   | 梁山路1号     | 渝东 | 250001 | 四川省11 | 吕不韦 | 梁山路1号     | 渝中 | 250001 | 四川省
(11 rows)csdn=>

请注意,"orders" 表中的 "cust_id" 列指向 "customers" 表中的"id"。上面这两个表是通过 "客户ID" 列联系起来的。

select o.order_id as "订单ID",c.name as "姓名", o.order_date as "订单日期"
from orders o
inner join customers c
on o.cust_id=c.id;

结果:

3 不同的join


在我们继续讲解实例之前,我们先列出您可以使用的不同的 sql join 类型:

  • inner join:如果表中有至少一个匹配,则返回行
  • left join:即使右表中没有匹配,也从左表返回所有的行
  • right join:即使左表中没有匹配,也从右表返回所有的行
  • full join:只要其中一个表中存在匹配,则返回行

 

4 inner join


内部链接 inner join 关键字选择两个表中具有匹配值的记录。


inner join 语法


select column_name(s) from table1
inner join table2 on
table1.column_name = table2.column_name;


注释:inner join 与 join 是相同的,上面的示例就是 inner join

 

5 left join


sql 左链接 left join 关键字返回左表(表 1)中的所有行,即使在右表(表 2)
中没有匹配。如果在左表中没有匹配,结果是 null。


left join 语法


select column_name(s)
from table1
left join table2
on table1.column_name=table2.column_name;


或:


select column_name(s)
from table1
left outer join table2
on table1.column_name=table2.column_name;


注释:在GaussDB数据库中,left join 称为 left outer join。

 

 

left join 示例


我们想看看客户 customers 表中的所有用户是否都有下单,可以使用如下查询语言:

select c.name as "姓名",o.order_id as "订单id", o.order_date as "订单日期"
from customers c
left join orders o
on o.cust_id=c.id;


结果:

我们发现李四,刘二,赵七,宋江,吕不韦,韩信,武松没有对应的订单 ID 和订单日期,是因为他们没有在订单 ,表 orders 中不存在,没有匹配上他们的信息。但是由于是左连接,就把主表 customers 的信息全部显示出来了,就是对应上图的 table1。

 

6 right join


sql右链接 right join 关键字返回右表(table2)的所有行,即使在左表(table1)上没有匹配。如果左表没有匹配,则结果为 null。

right join 语法


select column_name(s) from table1
right join table2 on
table1.column_name = table2.column_name;


注释:在GaussDB数据库中,right join 称为 right outer join。

 

右连接与左连接的主表刚好相反,会将 table2 中的数据完全显示,如果 table1 中
没有匹配上的就不显示。
 
select c.name as "姓名",c.province as "省",o.order_id as "订单id", o.order_date as "订单日期"
from customers c
right join orders o
on o.cust_id=c.id;

结果:

 

7 full outer join


当左(表 1)或右(表 2)表记录匹配时,full outer join 关键字将返回所有记录。
注意: full outer join 可能会返回非常大的结果集!

FULL OUTER JOIN 语法


select column_name(s) from table1
full outer join table2 on
table1.column_name = table2.column_name;

 

全连接就是将 table1 和 table2 的内容完全显示,不管有没有匹配上。
 
 
 select c.name as "姓名",c.province as "省",o.order_id as "订单id",o.order_date as "订单日期"
from customers c
full join orders o
on o.cust_id=c.id;

结果:

 

批注

join在 SQL 中占有重要的地位,通过 join 我们可以将有匹配关系的两张表或更 多表进行关联,来获取我们想要的数据。关联的方式也比较灵活,常用的就是 INNER JOIN,请务必掌握它。

 

 

 

 

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

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

GitHub开源轻量级语音模型 Vui:重塑边缘智能语音交互的未来

前言 今天将深入解析一款颠覆性开源语音模型——Vui(来自 Fluxions-AI 项目)。它正以“轻量化”为矛,刺破传统语音模型高耗能的壁垒,让智能语音无处不在。 GitHub:https://github.com/fluxions-ai/vuihuggingface&am…

用aws下载NOAA的MB文件

安装aws下载某航次MB文件 安装aws curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip" unzip awscliv2.zip sudo ./aws/install下载对应航次数据 aws s3 cp s3://noaa-wcsd-pds/data/raw/Atlantis/AT26-09 /home/xxx/…

Kubernetes (k8s)、Rancher 和 Podman 的异同点分析

1. Kubernetes (k8s) 类型:容器编排系统。功能: 自动化部署、扩展和管理容器化应用。支持跨多台主机的容器编排。提供服务发现、负载均衡、滚动更新等功能。 架构:基于 Master-Node 架构,Master 负责调度和管理,Node 运…

71 模块编程之新增一个字符设备

前言这个 主要是 最开始的时候了解驱动的时候, 看到的一系列的 case, 这里 来大致剖析一下 相关的道理这些模块 是怎么和内核交互的, 内核的这些业务是怎么实现的 这里主要是一个模块来注册了一个字符设备 然后这个字符设备 可读可写, 基于的是分配的一段空间 测试用例测试模块…

小众创新方向!多传感器融合与视觉惯性导航,定位精度和效率大幅提升!

多传感器融合与视觉惯性导航技术(VINS)取得了显著进展。近期,研究人员通过优化视觉与惯性传感器数据的融合算法、引入深度学习技术以及改进系统架构,显著提升了VINS在复杂环境下的定位精度和鲁棒性。基于深度学习的特征提取方法能…

超简单linux上部署Apache

1.Apache是什么?Apache 是世界上最流行的 ​​开源Web服务器软件​​,由 Apache 软件基金会维护。​​主要功能​​:接收客户端(如浏览器)的HTTP请求,返回网页、图片等静态/动态资源。​​特点​​&#xf…

前端 SSE 实战应用:用最简单的方式实现实时推送

前端 SSE 实战应用:用最简单的方式实现实时推送 📌 点赞收藏关注不迷路! 在前端项目中,我们常听到“实时通信”这个需求 —— 聊天、进度、状态变化、系统消息。 但提到实时,大家首先想到的是 WebSocket,对…

第16章 基于AB实验的增长实践——验证想法:AB实验实践

​一、AB实验全流程框架​实验分为5个核心环节:实验假设​ → 实验设计​ →实验运行​ → 实验分析​ → 实验决策​​二、各环节核心要点详解​​1. 实验假设​​原则​:目标性、可归因、可复用(前两者必选)​(1&…

解决【软件安装路径】失败的方法

出现问题上图所示问题为:你的临时目录路径中包含 Unicode 字符,这可能会导致安装损坏。请参阅故障排除指南以获取解决方法。出现问题的原因:添加路径下存在中文,导致系统文件无法识别。解决方法步骤一:创建Temp(临时文…

FreeRTOS学习笔记——总览

考虑到RTOS能够提升单片机开发能力,也是开发复杂任务的必经之路,还是有必要学习的。 FreeRTOS教程多,免费开源,是个不错的选择。后续可以考虑继续学习RT-Thread等。 参考1:FreeRTOS(教程非常详细)——作者&…

Clip微调系列:《coOp: learning to prompt for vision-language models》

论文链接:arxiv.org/pdf/2109.01134v1 推荐视频(clip_coop的代码逻辑讲解,代码简单,有助于理解):CLIP和CoOp工作的简单Pytorch复现和理解_哔哩哔哩_bilibili 其他参考链接:CoOp - CLIP 自适应Prompt工程 【一】_coop…

[论文阅读] 人工智能 + 软件工程 | 开源软件中的GenAI自白:开发者如何用、项目如何管、代码质量受何影响?

开源软件中的GenAI自白:开发者如何用、项目如何管、代码质量受何影响? 论文:Self-Admitted GenAI Usage in Open-Source SoftwarearXiv:2507.10422 Self-Admitted GenAI Usage in Open-Source Software Tao Xiao, Youmei Fan, Fabio Calefato…

AI绘画版权问题全解析:你的作品真的属于你吗?

AI绘画版权问题全解析:你的作品真的属于你吗? 关键词:AI绘画、版权归属、生成式AI、训练数据、独创性、法律合规、知识产权 摘要:当你用MidJourney生成一张“赛博朋克风格的熊猫”,或用Stable Diffusion画出“梵高笔触的星空咖啡馆”时,你是否想过:这张图的版权属于你、…

深入理解Linux文件I/O:系统调用与标志位应用

目录 一、引入 二、标志位 1、什么是标志位? 2、标志位传递示例 输出结果分析 关键点解释 三、文件描述符(File Descriptor)(先大概了解) 四、接口介绍:open()函数 1、命令查看 2、头文件 3、函数原型 4、参数说明 …

海康线扫相机通过采集卡的取图设置

目录 1、扫描高度小于65000行 1.1 软触发 1、采集卡设置项 2、相机设置项 1.2 硬触发 1、采集卡设置项 2、相机设置项 2、扫描高度大于65000行 1.1 软触发 1、采集卡设置项 2、相机设置 1.2 硬触发 1、采集卡设置项 2、相机设置 2.1 帧扫描 2.2 行扫描 3、注意…

InfluxDB 3与Apache Parquet:打造高性能时序数据存储与分析解决方案

在当今数据驱动的时代,各行业产生的数据量呈爆炸式增长,如何高效存储和管理海量数据成为企业和开发者面临的重大挑战。对于时序数据而言,其具有数据量大、写入频繁、查询模式多样等特点,对存储系统的性能和效率提出了更高的要求。…

20250718-4-Kubernetes 应用程序生命周期管理-Pod对象:实现机制_笔记

一、Pod对象1. 资源共享实现机制1)共享网络基本概念实现方式:通过将业务容器网络加入到负责网络的容器(infra container)实现网络共享核心特点:共享网络协议栈(包括TC…

防爆手机是什么?能用普通手机改装吗?

在石油开采平台的井架之上,在化工车间的反应釜旁,在煤矿深达千米的巷道中,一群特殊的工作人员正使用着看似普通的通讯设备。这些设备外壳上醒目的Ex防爆认证标志,揭示着其与众不同的身份——防爆手机。这类专为易燃易爆环境设计的…

gem install报错解析

报错内容 [rootlocalhost ~]# gem install bundler Fetching: bundler-2.6.9.gem (100%) ERROR: Error installing bundler:bundler requires Ruby version > 3.1.0. The current ruby version is 2.5.0.解决方案(任选其一) 这个错误表明你当前的 Ru…

css 如何实现大屏4个占位 中屏2个 小屏幕1个

1、 使用grid.container {display: grid;grid-template-columns: repeat(4, 1fr);gap: 20px;border: 1px solid red;width: 400px;height: 400px;}media (max-width: 768px) {.container {grid-template-columns: 1fr;}}media (min-width: 768px) and (max-width: 992px) {.con…