GBase 8s内连接和外连接

2024-03-07 15:44
文章标签 连接 gbase 8s

本文主要是介绍GBase 8s内连接和外连接,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

GBase 8s内连接和外连接

内连接(INNER JOIN)

内连接(INNER JOIN)是最常用的连接类型之一,它根据两个或多个表之间的共同列值来联接这些表。在内连接中,只有在连接的表之间有匹配的值时,才会返回结果。
内加接语法示例:

-- 基中 INNER 关键字 可省略
select * 
from tableft INNER JOIN tabright ON tableft.col1 = tabright.col1;

结果:

col1col2col1col3
3左0033右003
3左0033右005
3左0043右003
3左0043右005

在上面的例子中,我们根据 col1 从两个表中联接了 tableft 和 tabright 表,并且只返回了那些在两个表中都存在的数据。

注:内连接与自然连接(NATURAL JOIN)类似,主要区别在于自然连接返回的结果中包含所有属性,但公共列仅保留一份。
GBase 8s不支持自然连接语法。
自然连接的语法:

-- 其它支持NATURAL JOIN的库
select * 
from tableft NATURAL JOIN tabright;

结果:

col1col2col3
3左003右003
3左003右005
3左004右003
3左004右005

与之对应的内连接的语句为:

-- 所有字段列出,但公共字段保留一份
select tableft.col1,col2,col3
from tableft INNER JOIN tabright ON tableft.col1 = tabright.col1;

外连接(OUTER JOIN)

外连接(OUTER JOIN)是另一种连接类型,它可以返回两个或多个表之间所有的匹配和不匹配的数据。外连接有三种类型:左外连接(LEFT OUTER JOIN)、右外连接(RIGHT OUTER JOIN)和全外连接(FULL OUTER JOIN)。

左外连接(LEFT OUTER JOIN)

左外连接(LEFT OUTER JOIN)返回左边表的所有记录以及右边表中与左边表列相匹配的记录。如果右边表中没有匹配的行,则返回NULL值。
左外连接的语法如下:

-- 其中 OUTER 关键字可省略
SELECT * 
FROM tableft LEFT OUTER JOIN tabrightON tableft.col1 = tabright.col1;

结果:

col1col2col1col3
1左001NULLNULL
NULL左002NULLNULL
3左0033右003
3左0033右005
3左0043右003
3左0043右005

在上面的例子中,我们使用左外连接,从 tableft 表中返回所有的数据,如果 tabright 表中对应的数据,将被填充为NULL值。

外连接优化

如果外连接关联条件的 被驱动表 的连接字段值唯一时,可以将外连接查询优化为子查询
更新示例表中的数据:

update tabright set col1 = 5 where col3 = '右005';

左连接语句:

select tableft.col1,col2,col3
from tableft left join tabrighton tableft.col1 = tabright.col1;

可以相应的修改为:

select tableft.col1,col2,-- 子查询仅能返回不超过一行(select col3 from tabright where tabright.col1 = tableft.col1) col3
from tableft;

在返回的数据中,只需要 被驱动表 中的少量数据时 有效。

右外连接(RIGHT OUTER JOIN)

右外连接(RIGHT OUTER JOIN)则相反,它返回右边表的所有记录以及左边表中与右边表列相匹配的记录。如果左边表中没有匹配的行,则返回NULL值。
右外连接的语法如下:

-- 其中 OUTER 关键字可省略
SELECT * 
FROM tableft RIGHT OUTER JOIN tabrightON tableft.col1 = tabright.col1;

结果:

col1col3col1col2
2右002NULLNULL
3右0033左003
3右0033左004
3右0053左003
3右0053左004

在上面的例子中,我们使用右外连接,从 tabright 表中返回所有的数据,如果 tableft 表中无对应的数据,将被填充为NULL值。

全外连接(FULL OUTER JOIN)

全外连接(FULL OUTER JOIN)则返回左边表和右边表的所有记录,即使没有匹配的行也不会被过滤掉。如果没有匹配的行,则返回NULL值。
全外连接的语法如下:

-- 基中 OUTER 关键字可省略
SELECT * 
FROM tableft FULL OUTER JOIN tabrightON tableft.col1 = tabright.col1;

结果:

col1col2col1col3结果集说明
1左001NULLNULL左连接
NULL左002NULLNULL左连接
3左0033右003左连接、右连接
3左0033右005左连接、右连接
3左0043右003左连接、右连接
3左0043右005左连接、右连接
NULLNULL2右002右连接

在上面的例子中,我们使用全外连接,返回了所有的数据,无论它们是否有匹配的数据。全外连接的结果集为左外连接和右外连接的并集去重。

总结:

在SQL中,内连接和外连接是在联接多个表时常用的操作。内连接仅返回在连接的表之间有匹配的记录,而外连接则返回匹配和不匹配的记录。左外连接和右外连接分别根据左边表和右边表的数据来返回记录,全外连接则返回两个表的所有记录。

  • 内连接(inner join):取出两张表中匹配到的数据,匹配不到的不保留
  • 外连接(outer join):取出连接表中匹配到的数据,匹配不到的也会保留,其值为NULL

附件:

示例用到的初始化数据:

-- 左表
DROP TABLE IF EXISTS tableft;
CREATE TABLE tableft (col1 int, col2 varchar(20));
INSERT INTO tableft values(1,'左001');
INSERT INTO tableft values(null,'左002');
INSERT INTO tableft values(3,'左003');
INSERT INTO tableft values(3,'左004');-- 右表
DROP TABLE IF EXISTS tabright;
CREATE TABLE tabright(col1 int, col3 varchar(20));
INSERT INTO tabright VALUES(2,'右002');
INSERT INTO tabright values(3,'右003');
INSERT INTO tabright values(3,'右005');

这篇关于GBase 8s内连接和外连接的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

Mac电脑如何通过 IntelliJ IDEA 远程连接 MySQL

《Mac电脑如何通过IntelliJIDEA远程连接MySQL》本文详解Mac通过IntelliJIDEA远程连接MySQL的步骤,本文通过图文并茂的形式给大家介绍的非常详细,感兴趣的朋友跟... 目录MAC电脑通过 IntelliJ IDEA 远程连接 mysql 的详细教程一、前缀条件确认二、打开 ID

Go语言连接MySQL数据库执行基本的增删改查

《Go语言连接MySQL数据库执行基本的增删改查》在后端开发中,MySQL是最常用的关系型数据库之一,本文主要为大家详细介绍了如何使用Go连接MySQL数据库并执行基本的增删改查吧... 目录Go语言连接mysql数据库准备工作安装 MySQL 驱动代码实现运行结果注意事项Go语言执行基本的增删改查准备工作

python连接sqlite3简单用法完整例子

《python连接sqlite3简单用法完整例子》SQLite3是一个内置的Python模块,可以通过Python的标准库轻松地使用,无需进行额外安装和配置,:本文主要介绍python连接sqli... 目录1. 连接到数据库2. 创建游标对象3. 创建表4. 插入数据5. 查询数据6. 更新数据7. 删除

在 Spring Boot 中连接 MySQL 数据库的详细步骤

《在SpringBoot中连接MySQL数据库的详细步骤》本文介绍了SpringBoot连接MySQL数据库的流程,添加依赖、配置连接信息、创建实体类与仓库接口,通过自动配置实现数据库操作,... 目录一、添加依赖二、配置数据库连接三、创建实体类四、创建仓库接口五、创建服务类六、创建控制器七、运行应用程序八

解决hive启动时java.net.ConnectException:拒绝连接的问题

《解决hive启动时java.net.ConnectException:拒绝连接的问题》Hadoop集群连接被拒,需检查集群是否启动、关闭防火墙/SELinux、确认安全模式退出,若问题仍存,查看日志... 目录错误发生原因解决方式1.关闭防火墙2.关闭selinux3.启动集群4.检查集群是否正常启动5.

在Linux系统上连接GitHub的方法步骤(适用2025年)

《在Linux系统上连接GitHub的方法步骤(适用2025年)》在2025年,使用Linux系统连接GitHub的推荐方式是通过SSH(SecureShell)协议进行身份验证,这种方式不仅安全,还... 目录步骤一:检查并安装 Git步骤二:生成 SSH 密钥步骤三:将 SSH 公钥添加到 github

Redis客户端连接机制的实现方案

《Redis客户端连接机制的实现方案》本文主要介绍了Redis客户端连接机制的实现方案,包括事件驱动模型、非阻塞I/O处理、连接池应用及配置优化,具有一定的参考价值,感兴趣的可以了解一下... 目录1. Redis连接模型概述2. 连接建立过程详解2.1 连php接初始化流程2.2 关键配置参数3. 最大连

C#连接SQL server数据库命令的基本步骤

《C#连接SQLserver数据库命令的基本步骤》文章讲解了连接SQLServer数据库的步骤,包括引入命名空间、构建连接字符串、使用SqlConnection和SqlCommand执行SQL操作,... 目录建议配合使用:如何下载和安装SQL server数据库-CSDN博客1. 引入必要的命名空间2.

Java通过驱动包(jar包)连接MySQL数据库的步骤总结及验证方式

《Java通过驱动包(jar包)连接MySQL数据库的步骤总结及验证方式》本文详细介绍如何使用Java通过JDBC连接MySQL数据库,包括下载驱动、配置Eclipse环境、检测数据库连接等关键步骤,... 目录一、下载驱动包二、放jar包三、检测数据库连接JavaJava 如何使用 JDBC 连接 mys

Qt使用QSqlDatabase连接MySQL实现增删改查功能

《Qt使用QSqlDatabase连接MySQL实现增删改查功能》这篇文章主要为大家详细介绍了Qt如何使用QSqlDatabase连接MySQL实现增删改查功能,文中的示例代码讲解详细,感兴趣的小伙伴... 目录一、创建数据表二、连接mysql数据库三、封装成一个完整的轻量级 ORM 风格类3.1 表结构