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

相关文章

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 |

【Go】go连接clickhouse使用TCP协议

离开你是傻是对是错 是看破是软弱 这结果是爱是恨或者是什么 如果是种解脱 怎么会还有眷恋在我心窝 那么爱你为什么                      🎵 黄品源/莫文蔚《那么爱你为什么》 package mainimport ("context""fmt""log""time""github.com/ClickHouse/clickhouse-go/v2")func main(

nginx长连接的问题

转自: http://www.360doc.com/content/12/1108/17/1073512_246644318.shtml

NGINX轻松管理10万长连接 --- 基于2GB内存的CentOS 6.5 x86-64

转自:http://blog.chinaunix.net/xmlrpc.php?r=blog/article&uid=190176&id=4234854 一 前言 当管理大量连接时,特别是只有少量活跃连接,NGINX有比较好的CPU和RAM利用率,如今是多终端保持在线的时代,更能让NGINX发挥这个优点。本文做一个简单测试,NGINX在一个普通PC虚拟机上维护100k的HTTP

TL-Tomcat中长连接的底层源码原理实现

长连接:浏览器告诉tomcat不要将请求关掉。  如果不是长连接,tomcat响应后会告诉浏览器把这个连接关掉。    tomcat中有一个缓冲区  如果发送大批量数据后 又不处理  那么会堆积缓冲区 后面的请求会越来越慢。

DBeaver 连接 MySQL 报错 Public Key Retrieval is not allowed

DBeaver 连接 MySQL 报错 Public Key Retrieval is not allowed 文章目录 DBeaver 连接 MySQL 报错 Public Key Retrieval is not allowed问题解决办法 问题 使用 DBeaver 连接 MySQL 数据库的时候, 一直报错下面的错误 Public Key Retrieval is

Github连接方式

打开Linux中git的配置文件: /home/username/git/MyRepository/.git/config [core]repositoryformatversion = 0filemode = truebare = falselogallrefupdates = true[remote "origin"]fetch = +refs/heads/*:refs/remot

ora-01017 ora-02063 database link,oracle11.2g通过dblink连接oracle11.2g

错误图示: 问题解决 All database links, whether public or private, need username/password of the remote/target database. Public db links are accessible by all accounts on the local database, while private