首页 > 其他分享 >openGauss学习笔记-27 openGauss 高级数据管理- JOIN

openGauss学习笔记-27 openGauss 高级数据管理- JOIN

时间:2023-08-01 21:32:37浏览次数:40  
标签:27 JOIN name BJ 连接 openGauss Lily Grace

openGauss学习笔记-27 openGauss 高级数据管理- JOIN

JOIN子句用于把来自两个或多个表的行结合起来,基于这些表之间的共同字段。

在openGauss中,JOIN有五种连接类型:

  • CROSS JOIN :交叉连接
  • INNER JOIN:内连接
  • LEFT OUTER JOIN:左外连接
  • RIGHT OUTER JOIN:右外连接
  • FULL OUTER JOIN:全外连接

以表table1和表table2为例说明不同连接类型,表数据如下:

openGauss=# SELECT * FROM table1;
 name  | city
-------+------
 Joes  | BJ
 Lily  | BJ
 James | SH
 Grace | SZ
(4 rows)

openGauss=# SELECT * FROM table2;
 id | name  | dept
----+-------+-------
  1 | Tommy | IT
  2 | Lily  | IT
  3 | Li    | sales
  4 | Grace | IT
(4 rows)

27.1 交叉连接

交叉连接即笛卡儿乘积,是指两个关系中所有元组的任意组合。

示例:将表table1和表table2进行交叉连接,结果如下。

openGauss=# SELECT * FROM table1 CROSS JOIN table2;
 name  | city | id | name  | dept
-------+------+----+-------+-------
 Joes  | BJ   |  1 | Tommy | IT
 Joes  | BJ   |  2 | Lily  | IT
 Joes  | BJ   |  3 | Li    | sales
 Joes  | BJ   |  4 | Grace | IT
 Lily  | BJ   |  1 | Tommy | IT
 Lily  | BJ   |  2 | Lily  | IT
 Lily  | BJ   |  3 | Li    | sales
 Lily  | BJ   |  4 | Grace | IT
 James | SH   |  1 | Tommy | IT
 James | SH   |  2 | Lily  | IT
 James | SH   |  3 | Li    | sales
 James | SH   |  4 | Grace | IT
 Grace | SZ   |  1 | Tommy | IT
 Grace | SZ   |  2 | Lily  | IT
 Grace | SZ   |  3 | Li    | sales
 Grace | SZ   |  4 | Grace | IT
(16 rows)

27.2 内连接

使用内连接时,如果两个表的相关字段满足连接条件,就从这两个表中提取数据并组合成新的记录,创建一个新的结果表。也就是在内连接查询中,只有满足条件的元组才能出现在结果关系中。

内连接是一种最常用的连接类型,也是默认的连接类型。

示例:查询表table1和表table2中字段name相同的列。

openGauss=# SELECT * FROM table1 a INNER JOIN table2 b ON a.name = b.name;
 name  | city | id | name  | dept
-------+------+----+-------+------
 Lily  | BJ   |  2 | Lily  | IT
 Grace | SZ   |  4 | Grace | IT
(2 rows)

27.3 左外连接

左外连接是指在连接查询中,将关键字左端表中所有的元组都列出来,如果能在右端的表中找到匹配的元组,显示匹配元组内容。如果在右端的表中,不能找到匹配的元组,那么对应的元组是空值(NULL)。

左外连接查询语句使用的关键字为LEFT OUTER JOIN,也就是说,左外连接的含义是限制连接关键字右端的表中的数据必须满足连接条件,而左端的表中的数据无论是否满足连接条件,均输出左端表中的内容。

示例:

openGauss=# SELECT * FROM table1 a LEFT OUTER JOIN table2 b ON a.name = b.name;
 name  | city | id | name  | dept
-------+------+----+-------+------
 Joes  | BJ   |    |       |
 Lily  | BJ   |  2 | Lily  | IT
 James | SH   |    |       |
 Grace | SZ   |  4 | Grace | IT
(4 rows)

27.4 右外连接

右外连接与左外连接类似,只是关键字右端表中的所有元组都列出,限制左端表的数据必须满足连接条件,而右端表中的数据无论是否满足连接条件,均输出表中的内容。

右外连接查询语句的关键字为RIGHT OUTER JOIN。

示例:

openGauss=# SELECT * FROM table1 a RIGHT OUTER JOIN table2 b ON a.name = b.name;
 name  | city | id | name  | dept
-------+------+----+-------+-------
 Lily  | BJ   |  2 | Lily  | IT
 Grace | SZ   |  4 | Grace | IT
       |      |  3 | Li    | sales
       |      |  1 | Tommy | IT
(4 rows)

27.5 全外连接

全外连接查询的特点是左、右两端表中的元组都输出,如果没能找到匹配的元组,就使用NULL来代替。

示例:

openGauss=# SELECT * FROM table1 a FULL OUTER JOIN table2 b ON a.name = b.name;
 name  | city | id | name  | dept
-------+------+----+-------+-------
 Joes  | BJ   |    |       |
 Lily  | BJ   |  2 | Lily  | IT
 James | SH   |    |       |
 Grace | SZ   |  4 | Grace | IT
       |      |  3 | Li    | sales
       |      |  1 | Tommy | IT
(6 rows)

标签:27,JOIN,name,BJ,连接,openGauss,Lily,Grace
From: https://blog.51cto.com/u_237826/6928722

相关文章

  • Java面试题 P27:数据库篇:MySql篇-MySql优化-Sql语句执行很慢,如何分析呢?
       ......
  • 【暑假例题】20230727 矩阵基本运算(C++)
    题目请使用C++实现矩阵的各种运算矩阵创建矩阵相加矩阵相减矩阵相乘数字乘矩阵矩阵上叠加矩阵左右叠加矩阵转置矩阵旋转矩阵求逆矩阵输出题目分析矩阵创建这里只需注意由于我们需要通过不同的函数对数组进行操作,所以我们需要将数组存储在容器或者使用指针防止数......
  • openGauss数据库常用操作命令
    1.以操作系统用户omm登录数据库主节点su-omm1.1启动服务分布式openGauss:gs_om-tstart启动服务gs_om-trestart重启服务集中式openGauss:gs_om-tstop关闭服务gs_om-tstart启动服务1.2使用“gs_om-tstatus–detail”命令查询openGauss各实例状......
  • 2799.统计完全子数组的数目-356
    统计完全子数组的数目给你一个由正整数组成的数组nums。如果数组中的某个子数组满足下述条件,则称之为完全子数组:子数组中不同元素的数目等于整个数组不同元素的数目。返回数组中完全子数组的数目。子数组是数组中的一个连续非空序列。示例1:输入:nums=[1,3,1,2......
  • 【我和openGauss的故事】openGauss的WDR报告解读
    【我和openGauss的故事】openGauss的WDR报告解读在Oralce数据库中,遇到性能问题,我们通常会查看有无对应时间段的快照,生成awr报告并进一步分析(AWR是AutomaticWorkloadRepository的简称,中文叫着自动工作量资料档案库,是Oracle数据库用于收集、管理和维护数据库整个运行期间和性能相关......
  • 【我和openGauss的故事】openGauss易知易会的几个实用特性
    【我和openGauss的故事】openGauss易知易会的几个实用特性使用openGauss已经有很长一段时间了,本文将介绍几个简单易用的数据库特性。单列显示整行数据where比较列合并独立写布尔列using关键字domain单列显示整行数据首先我们准备测试数据表:createtableusers(idint,nametext,ema......
  • 祝贺!openGauss社区技术委员会主席李国良当选2023 IEEE FELLOW
    祝贺!openGauss社区技术委员会主席李国良当选2023IEEEFELLOW[openGauss](javascript:void(0);)2022-11-2917:56发表于广东近日,IEEE(InstituteofElectricalandElectronicEngineers)公布了2023年度Fellow名单,全球共有319位学者入选,华人学者占104位(约占总人数的31%)。其中,openGa......
  • openGauss获2022年度创新产品奖!
    openGauss获2022年度创新产品奖![openGauss](javascript:void(0);)2022-12-2920:46发表于广东喜讯openGauss企业级开源数据库获IT1682022年度创新产品奖!获奖理由开源社区是openGauss的重要创新平台,提供openGauss与开发者、用户、产业伙伴联接的桥梁。openGauss以社区为依托,联合......
  • openGauss学习笔记-26 openGauss 高级数据管理-约束
    openGauss学习笔记-26openGauss高级数据管理-约束约束子句用于声明约束,新行或者更新的行必须满足这些约束才能成功插入或更新。如果存在违反约束的数据行为,行为会被约束终止。约束可以在创建表时规定(通过CREATETABLE语句),或者在表创建之后规定(通过ALTERTABLE语句)。约束可......
  • P1273 有线电视网
    P1273有线电视网树上背包的变形\[f_{u,j+k}=\max_{v\inson(u)}f_{u,j}+f_{v,k}-w_{u,v}\]这里写成\(j+k\)是为了和代码一致。\(f_{u,j+k}\) 代表以\(u\)为根的子树中,选择了\(j+k\)个叶子结点的利润最大值。\(w_{u,v}\)代表\(u\)到\(v\)的......