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

相关文章

VScode连接远程Linux服务器环境配置图文教程

《VScode连接远程Linux服务器环境配置图文教程》:本文主要介绍如何安装和配置VSCode,包括安装步骤、环境配置(如汉化包、远程SSH连接)、语言包安装(如C/C++插件)等,文中给出了详... 目录一、安装vscode二、环境配置1.中文汉化包2.安装remote-ssh,用于远程连接2.1安装2

关于rpc长连接与短连接的思考记录

《关于rpc长连接与短连接的思考记录》文章总结了RPC项目中长连接和短连接的处理方式,包括RPC和HTTP的长连接与短连接的区别、TCP的保活机制、客户端与服务器的连接模式及其利弊分析,文章强调了在实... 目录rpc项目中的长连接与短连接的思考什么是rpc项目中的长连接和短连接与tcp和http的长连接短

Xshell远程连接失败以及解决方案

《Xshell远程连接失败以及解决方案》本文介绍了在Windows11家庭版和CentOS系统中解决Xshell无法连接远程服务器问题的步骤,在Windows11家庭版中,需要通过设置添加SSH功能并... 目录一.问题描述二.原因分析及解决办法2.1添加ssh功能2.2 在Windows中开启ssh服务2

Redis连接失败:客户端IP不在白名单中的问题分析与解决方案

《Redis连接失败:客户端IP不在白名单中的问题分析与解决方案》在现代分布式系统中,Redis作为一种高性能的内存数据库,被广泛应用于缓存、消息队列、会话存储等场景,然而,在实际使用过程中,我们可能... 目录一、问题背景二、错误分析1. 错误信息解读2. 根本原因三、解决方案1. 将客户端IP添加到Re

Mysql 中的多表连接和连接类型详解

《Mysql中的多表连接和连接类型详解》这篇文章详细介绍了MySQL中的多表连接及其各种类型,包括内连接、左连接、右连接、全外连接、自连接和交叉连接,通过这些连接方式,可以将分散在不同表中的相关数据... 目录什么是多表连接?1. 内连接(INNER JOIN)2. 左连接(LEFT JOIN 或 LEFT

Spring Boot实现多数据源连接和切换的解决方案

《SpringBoot实现多数据源连接和切换的解决方案》文章介绍了在SpringBoot中实现多数据源连接和切换的几种方案,并详细描述了一个使用AbstractRoutingDataSource的实... 目录前言一、多数据源配置与切换方案二、实现步骤总结前言在 Spring Boot 中实现多数据源连接

QT实现TCP客户端自动连接

《QT实现TCP客户端自动连接》这篇文章主要为大家详细介绍了QT中一个TCP客户端自动连接的测试模型,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录版本 1:没有取消按钮 测试效果测试代码版本 2:有取消按钮测试效果测试代码版本 1:没有取消按钮 测试效果缺陷:无法手动停

W外链微信推广短连接怎么做?

制作微信推广链接的难点分析 一、内容创作难度 制作微信推广链接时,首先需要创作有吸引力的内容。这不仅要求内容本身有趣、有价值,还要能够激起人们的分享欲望。对于许多企业和个人来说,尤其是那些缺乏创意和写作能力的人来说,这是制作微信推广链接的一大难点。 二、精准定位难度 微信用户群体庞大,不同用户的需求和兴趣各异。因此,制作推广链接时需要精准定位目标受众,以便更有效地吸引他们点击并分享链接

Java 连接Sql sever 2008

Java 连接Sql sever 2008 /Sql sever 2008 R2 import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.Statement; public class TestJDBC

实例:如何统计当前主机的连接状态和连接数

统计当前主机的连接状态和连接数 在 Linux 中,可使用 ss 命令来查看主机的网络连接状态。以下是统计当前主机连接状态和连接主机数量的具体操作。 1. 统计当前主机的连接状态 使用 ss 命令结合 grep、cut、sort 和 uniq 命令来统计当前主机的 TCP 连接状态。 ss -nta | grep -v '^State' | cut -d " " -f 1 | sort |