当前位置: 首页 > news >正文

GaussDB join 连接的用法

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.dtcms.com/a/286861.html

相关文章:

  • 已经安装numpy,但是报错ModuleNotFoundError: No module named ‘numpy‘
  • 船舶终端数据采集与监管平台解决方案
  • EasyGBS算法算力云平台:算法仓百种算法,全形态算力协同
  • Python 之地址编码识别
  • 判断数据类型的方法
  • 分享|技师院校人工智能技术应用专业—数字人教学辅助平台有哪些特点
  • java常见的jvm内存分析工具
  • hive的sql优化思路-明白底层运行逻辑
  • 机械材料计算软件,快速核算重量
  • MySQL 插入时间 更新时间
  • android版本编译问题之Hvac 应用体积优化问题处理记录
  • 大模型微调流程解读:基于Qwen2.5-3B-Instruct的LoRA高效微调全流程解析
  • 讯方·智汇云校 | 课程和优势介绍
  • Glary Utilities (PC维护百宝箱) v6.24.0.28 便携版
  • Composer 可以通过指定 PHP 版本运行
  • vue2 面试题及详细答案150道(71 - 80)
  • 从 C# 到 Python:6 天极速入门(第二天)
  • 解决网络问题基本步骤
  • 【52】MFC入门到精通——MFC串口助手(二)---通信版(发送数据 、发送文件、数据转换、清空发送区、打开/关闭文件),附源码
  • 路由的概述
  • Android开发工程师:Linux一条find grep命令通关搜索内容与文件
  • ffplay显示rgb565格式的文件
  • CentOS下安装Mysql
  • Prometheus错误率监控与告警实战:如何自定义规则精准预警服务器异常
  • 【Linux】Linux异步IO-io_uring
  • YOLO融合CAF-YOLO中的ACFM模块
  • 怎么解决Spring循环依赖问题
  • go安装使用gin 框架
  • 在Jetson部署AI语音家居助手(二):语音激活+语音转文字
  • RS485转PROFIBUS DP网关写入命令让JRT激光测距传感器开启慢速模式连续测量