GaussDB数据库SQL系列-UNION UNION ALL

news2024/11/26 7:33:36

目录

一、前言

二、GaussDB  UNION/UNION ALL

1、GaussDB UNION 操作符

2、语法定义

三、GaussDB实验示例

1、创建实验表

2、合并且除重(UNION)

3、合并不除重(UNION ALL)

4、合并带有WHERE子句SQL结果集(UNION ALL)

5、业务逻辑除重后合并(UNION ALL)

四、GaussDB UNION常见错误

1、“each UNION query must have the same number of columns”

2、“UNION types timestamp without time zone and text cannot be matched”

五、小结

一、前言

SQL(结构化查询语言)是一种用于管理关系型数据库的标准语言。它允许用户通过使用SQL语言来操作数据库中的数据。而在SQL中,UNION是一个非常强大的功能,它可以将多个SELECT语句的结果合并成一个结果集。本文将以GaussDB数据库为例,介绍一下UNION操作符的使用。

二、GaussDB  UNION/UNION ALL

1、GaussDB UNION 操作符

GaussDB UNION 操作符用于合并两个或多个 SELECT 语句的结果集。请注意,UNION 内部的每个 SELECT 语句必须拥有相同数量的列。列也必须拥有相似的数据类型。同时,每个 SELECT 语句中的列的顺序必须相同。

2、语法定义

1)UNION语法

SELECT column1
      ,column2
	  ,……
FROM table1 
[WHERE condition]
UNION
SELECT column1
      ,column2
	  ,……
FROM table2 
[WHERE condition]

2)UNION ALL 语法

SELECT column1
      ,column2
	  ,……
FROM table1 
[WHERE condition]
UNION ALL
SELECT column1
      ,column2
	  ,……
FROM table2 
[WHERE condition]

说明:UNION在合并两个或多个集合时会执行去重操作,而UNION ALL则直接将两个或者多个结果集合并,不执行去重。 另外,执行去重会消耗大量的时间,因此,在一些实际应用场景中,如果通过业务逻辑已确认了两个集合不存在重重复数据时,可直接用UNION ALL  替代UNION,以便提升性能。

三、GaussDB实验示例

本文以GaussDB数据库为实验平台,

1、创建实验表并初始化

1)学生信息表student(ID、姓名、性别、城市)

--创建学生信息表
CREATE table student(
 sId VARCHAR(10) NOT NULL
,sname VARCHAR(10) NOT NULL
,ssex VARCHAR(10) NOT NULl
,scity VARCHAR(10) NOT NULl
);

--初识化实验数据
INSERT INTO student VALUES('s01' , '赵雷' , '男', 'XIAN');
INSERT INTO student VALUES('s02' , '钱电' , '男', 'YUNNAN');
INSERT INTO student VALUES('s03' , '孙风' , '男', 'NIXIA');
INSERT INTO student VALUES('s04' , '李云' , '男', 'XIZANG');
INSERT INTO student VALUES('s05' , '周梅' , '女', 'XINJIANG');
INSERT INTO student VALUES('s06' , '吴兰' , '女', 'CHENGDU');
INSERT INTO student VALUES('s07' , '郑竹' , '女', 'XIAN');
INSERT INTO student VALUES('s08' , '张三' , '女', 'CHENGDU');

--查看结果集
SELECT * FROM student;

2)教师信息表teacher(ID、姓名、性别、城市) 

--创建教师信息表
CREATE table teacher(
 teid VARCHAR(10) NOT NULL
,tname VARCHAR(10) NOT NULL
,tsex VARCHAR(10) NOT NULL
,tcity VARCHAR(10) NOT NULL
);

--初始化实验数据
INSERT INTO teacher VALUES('t01' , '张磊', '男', 'XIAN');
INSERT INTO teacher VALUES('t02' , '李强', '男', 'BEIJING');
INSERT INTO teacher VALUES('t03' , '王刚', '男', 'XINJIANG');

--查看结果集
SELECT * FROM teacher;

2、合并且除重(UNION)

--获取学生和教师所属的城市,并按城市名称首字母升序排序。

SELECT t.city
FROM (
	SELECT scity AS city
	FROM student
	UNION
	SELECT tcity AS city
	FROM teacher
) t
ORDER BY t.city ASC;

结果集如下截图,且城市数据不存在重复:

3、合并不除重(UNION ALL)

--获取所有学生和教师所属的城市,并按城市名称首字母升序排序。

SELECT t.city
FROM (
	SELECT scity AS city
	FROM student
	UNION ALL
	SELECT tcity AS city
	FROM teacher
) t
ORDER BY t.city ASC;

结果集如下截图,罗列了所有城市数据:

4、合并带有WHERE子句SQL结果集(UNION ALL)

--获取来自'XIAN'的学生和教师的所有信息,并按学生和教师的编号升序排序。

SELECT t.*
FROM  
(SELECT Sid AS id
       ,Sname AS name
       ,Ssex AS sex
       ,Scity AS city
FROM student WHERE Scity='XIAN' 
UNION ALL
SELECT  Tid AS id
       ,Tname AS name
       ,Tsex AS sex
       ,Tcity AS city
FROM teacher WHERE Tcity='XIAN') t
ORDER BY t.id  ASC;

结果集如下截图,罗列了'XIAN'的学生和教师的所有信息:

5、业务逻辑除重后合并(UNION ALL)

在一些业务场景下,比如上游系统提供的两张表或者多张表之间互相不会存重复数据,且自身也不存在重复数据,则为了提升合并时SQL性能、减少SQL执行时间,则选择UNION ALL操作符。

四、GaussDB UNION常见错误

1、“each UNION query must have the same number of columns”

解决思路:根据提示查看两个表的表结构,看字段数量是否一支。

2、“UNION types timestamp without time zone and text cannot be matched”

解决思路:根据提示查看两个表的表结构,看字段类型是否一致。

 

五、小结

在实际业务场景中,无论选择GaussDB数据库,还是其他关系型数据库,在使用UNION和UNION ALL 时,都需要注意以下几点:

  • 左右两侧的SQL字段数量和字段类型需要保持一致;
  • 业务需求是否需要考虑数据除重(合并前除重还是合并时除重);
  • 根据表中数据量的大小,需要对SQL的执行效率进行评估,从而考虑是否需要选择临时表进行过渡后再合并;
  • 需要考虑SQL编写的复杂度,不能为了写SQL而写SQL,需要结合业务需求进行选择。

——结束

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/875835.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ansible的playbook剧本

playbook剧本 PlayBook1.playbooks 本身由以下各部分组成2.示例:3.运行playbook补充参数: 4.定义、引用变量5.指定远程主机sudo切换用户6.when条件判断7.迭代8.Templates 模块1.先准备一个以 .j2 为后缀的 template 模板文件,设置引用的变量2…

9.3.2.2网络原理(传输层TCP)

TCP全部细节参考RFC标准文档 一.TCP特点: 有连接,可靠传输,面向字节流,全双工. 二.TCP数据报: 1.端口号是传输层的重要概念. 2.TCP的报头是变长的(UDP是固定的8字节),大小存在4位首部长度中,用4个bit位(0~15)表示长度单位是4字节.(TCP报头最大长度是60字节,前面20字节是固定…

VR时代真的到来了?

业界对苹果的期待是,打造一台真正颠覆性的,给头显设备奠定发展逻辑底座的产品,而实际上,苹果只是发布了一台更强大的头显。 大众希望苹果回答的问题是“我为什么需要一台AR或者VR产品?”,但苹果回答的是“…

数据结构—图的应用

6.4图的应用 概念回顾—生成树 生成树:所有顶点均由边连接在一起,但不存在回路的图。 一个图可以有许多棵不同的生成树、含有n个顶点 n-1 条边的图不一定是生成树所有生成树具有以下共同特点 生成树的顶点个数与图的顶点个数相同;生成树是图的…

【正点原子STM32连载】第四章 APM32初体验摘自【正点原子】APM32F407最小系统板使用指南

1)实验平台:正点原子stm32f103战舰开发板V4 2)平台购买地址:https://detail.tmall.com/item.htm?id609294757420 3)全套实验源码手册视频下载地址: http://www.openedv.com/thread-340252-1-1.html# 第四…

达梦数据库(dm8) Centos7 高可用集群

国产数据库-达梦 一、环境详情二、Centos7 参数优化(所有节点)三、创建用户(所有节点)四、开始安装(所有节点)五、服务注册启动 当前安装:在指定版本环境下 测试,仅供参考 官网描述&…

ad+硬件每日学习十个知识点(31)23.8.11 (23ad的value,AD的mysql数据库)

文章目录 1.ad的sch库(23版本的value放在下面了)2.安装mysql数据库 1.ad的sch库(23版本的value放在下面了) 答: 2.安装mysql数据库 https://www.bilibili.com/video/BV1EJ411D7dd/?spm_id_from333.337.search-card.…

Redis使用Lua脚本和Redisson来保证库存扣减中的原子性和一致性

文章目录 前言1.使用SpringBoot Redis 原生实现方式2.使用redisson方式实现3. 使用RedisLua脚本实现3.1 lua脚本代码逻辑 3.2 与SpringBoot集成 4. Lua脚本方式和Redisson的方式对比5. 源码地址6. Redis从入门到精通系列文章7. 参考文档 前言 背景:最近有社群技术交…

免费试用!谷露人才Mapping2.0上线,组织架构直链人才库速来体验

关注“谷露软件”公众号,后台回复“人才mapping”即可立刻免费试用。 点击去免费试用 点击去免费试用 谷露软件(Gllue Software)成立于2012年,目前已经成为中国领先的招聘管理系统和招聘解决方案供应商。谷露旗下涵盖猎头版和企业…

基于ssm+vue的新能源汽车在线租赁管理系统源码和论文PPT

基于ssmvue的新能源汽车在线租赁管理系统源码和论文PPT010 开发环境: 开发工具:idea 数据库mysql5.7(mysql5.7最佳) 数据库链接工具:navcat,小海豚等 开发技术:java ssm tomcat8.5 摘 要 随着科学技术的飞速发展&#xff0…

latex三线表按页面大小填充

latex三线表按页面大小填充 使用Latex表格时会出现下图情况,表格没有填充整个页面,导致不美观。 解决方法: 在\begin{tabular}前加上\resizebox{\linewidth}{!}{ , 在\end{tabular} 后加 ‘}’ 如下:\resizebox{…

helm部署vmalert

先决条件 安装以下软件包:git, kubectl, helm, helm-docs,请参阅本教程。 在 CentOS 上启用 snap 并安装 helm 启用 snapd 使用以下命令将 EPEL 存储库添加到您的系统中: sudo yum install epel-release 按如下方式安装 Snap&#xff1…

Nginx 基本原理与最小配置

文章和代码已经归档至【Github仓库:https://github.com/timerring/front-end-tutorial 】或者公众号【AIShareLab】回复 nginx 也可获取。 文章目录 目录结构基本运行原理Nginx配置与应用场景最小配置worker_processesevents模块下worker_connections http模块下inc…

使用chatGPT-4 畅聊量子物理学(二)

Omer 量子力学的主导哲学或模型或解释是什么? ChatGPT 量子力学是一门描述微观世界中粒子行为的物理学理论,但它的解释和哲学观点在学术界存在多种不同的观点和争议。以下是几种主要的哲学观点或解释: 哥本哈根解释:这是最为广泛…

easyx图形库基础:2.基本运动+键盘交互

基本运动键盘交互 一.基本运动1.基本运动:1.如何实现动画:2.实现一个小球从左到右从右到左:(往返运动)3.实现一个五角星的移动:4.实现一个五角星自转和圆周运动的集合:(圆周运动&…

网络安全 Day30-运维安全项目-容器架构上

容器架构上 1. 什么是容器2. 容器 vs 虚拟机(化) :star::star:3. Docker极速上手指南1)使用rpm包安装docker2) docker下载镜像加速的配置3) 载入镜像大礼包(老师资料包中有) 4. Docker使用案例1) 案例01::star::star::…

OLED透明屏售价:通过真实数据和研究报告的说服力分析

随着科技的不断发展,OLED透明屏的应用越来越广泛,因其高色彩饱和度、更快的响应速度和更广的视角,OLED透明屏成为了许多消费者的选择。 但是,OLED透明屏的售价是怎么样的呢?售价的影响因素是什么?如何判断…

蒸散发ET及其组分、植被总初级生产力GPP概念和碳水耦合基本原理丨Penman-Monteith模型冠层导度、蒸散发组分计算

目录 一、蒸散发与光合作用阻抗&Python实践 二、ArcGIS实践应用 三、数据处理实践 四、冠层导度与水、碳通量空间模拟案例分析实践 更多推荐 熟悉蒸散发ET及其组分(植被蒸腾Ec、土壤蒸发Es、冠层截留Ei)、植被总初级生产力GPP的概念和碳水耦合的…

搭建一个能与大家分享的旅游相册网站——“cpolar内网穿透”

如何用piwigo与cpolar结合共同搭建一个能分享的旅行相册网站 文章目录 如何用piwigo与cpolar结合共同搭建一个能分享的旅行相册网站前言1. 使用piwigo这款开源的图片管理软件2. 需要将piwigi网页复制到phpstudy3. “开始安装”进入自动安装程序4. 创建新相册5. 创建一条空白数据…

Apache Doris 2.0.0 版本正式发布:盲测性能 10 倍提升,更统一多样的极速分析体验

亲爱的社区小伙伴们,我们很高兴地向大家宣布,Apache Doris 2.0.0 版本已于 2023 年 8 月 11 日正式发布,有超过 275 位贡献者为 Apache Doris 提交了超过 4100 个优化与修复。 在 2.0.0 版本中,Apache Doris 在标准 Benchmark 数…