GaussDB数据库SQL系列-子查询
目录
一、前言
二、GaussDB SQL子查询表达式
1、EXISTS/NOT EXISTS
2、IN/NOT IN
3、ANY/SOME
4、ALL
三、GaussDB SQL子查询实验示例
1、创建实验表
2、EXISTS/NOT EXISTS示例
3、IN/NOT IN 示例
4、ANY/SOME 示例
5、ALL示例
四、注意事项及建议
五、小结
一、前言
在数据库技术领域,SQL(结构化查询语言)是一种用于管理关系数据库的标准语言。它允许用户从数据库中检索、插入、更新和删除数据,以及执行各种高级的数据操作。
在本文中,我们将重点介绍GaussDB SQL中的子查询功能。子查询是SQL中的一种重要技术,它允许我们在一个查询中嵌套另一个查询,从而实现更复杂的数据查询和分析。
二、GaussDB SQL子查询表达式
1、EXISTS/NOT EXISTS
EXISTS/NOT EXISTS是SQL中的语法,SQL 会首先执行子查询,然后根据子查询的结果是否满足条件来决定是否继续执行主查询。如果子查询返回至少一行数据,则 EXISTS 条件与主查询结合使用并被视为满足。NOT EXISTS 则相反,它只会在子查询没有返回任何数据行时才会被视为满足。

EXISTS的参数是一个任意的SELECT语句,或者说子查询。系统对子查询进行运算以判断它是否返回行。如果它至少返回一行,则EXISTS结果就为"真";如果子查询没有返回任何行, EXISTS的结果是"假"。这个子查询通常只是运行到能判断它是否可以生成至少一行为止,而不是等到全部结束。
语法:WHERE column_name EXISTS/NOT EXISTS (subquery)
2、IN/NOT IN
IN 和 NOT IN 是 SQL 中的子查询运算符,用于测试某个给定的比较值是否存在于某一组值里。如果外层查询里的行与子查询返回的某一个行相匹配,那么 IN 的结果为真。如果外层查询里的行与子查询返回的所有行都不匹配,那么 NOT IN 的结果为真。

语法:WHERE column_name IN/NOT IN (subquery)
3、ANY/SOME
ANY 和 SOME 都是用于子查询中的关键字。 ANY 表示子查询中的任何值都可以与外部查询中的值匹配。 SOME 与 ANY 相同,只是在语法上的差别。
右边的子查询,它必须只返回一个字段。左边表达式使用operator对子查询结果的每一行进行一次计算和比较(=、<>、<、<=、>、>=),其结果必须是布尔值。如果至少获得一个真值,则ANY结果为“真”。如果全部获得假值,则结果是“假”(包括子查询没有返回任何行的情况)。

语法:WHERE column_name operator ANY/SOME (subquery)
4、ALL
右边的子查询,它必须只返回一个字段。左边表达式使用operator对子查询结果的每一行进行一次计算和比较(=、<>、<、<=、>、>=),其结果必须是布尔值。如果全部获得真值,ALL结果为"真"(包括子查询没有返回任何行的情况)。如果至少获得一个假值,则结果是"假"。

语法:WHERE column_name operator ALL (subquery)

三、GaussDB SQL子查询实验示例
在接下来的内容中,我们将以GaussDB数据库为实验平台,通过示例来演示如何利用这些子查询。
1、创建实验表
--课程表:course(cid,cname,teid)
--cid 课程编号,cname 课程名称,tid 教师编号
--创建course表
CREATE TABLE course(cid VARCHAR(10),cname VARCHAR(10),teid VARCHAR(10));--初始化
INSERT INTO course VALUES('01' , '语文' , '02');
INSERT INTO course VALUES('02' , '数学' , '01');
INSERT INTO course VALUES('03' , '英语' , '03');--查看结果
SELECT * FROM course;

--教师表teacher(teid,tname)
--tid 教师编号,tname 教师姓名
--创建teacher表
CREATE TABLE teacher(teid VARCHAR(10),tname VARCHAR(10));--初始化数据
INSERT INTO teacher VALUES('01' , '张老师');
INSERT INTO teacher VALUES('02' , '李老师');
INSERT INTO teacher VALUES('03' , '王老师');
INSERT INTO teacher VALUES('04' , '赵老师');--查看
SELECT * FROM teacher;
2、EXISTS/NOT EXISTS示例
--查询在course表中的教师记录
SELECT * FROM teacher WHERE EXISTS (SELECT * FROM course WHERE course.teid = teacher.teid);

--查询没有在course表中的教师记录
SELECT * FROM teacher WHERE NOT EXISTS (SELECT * FROM course WHERE course.teid = teacher.teid);
3、IN/NOT IN 示例
--根据教师id匹配course表
SELECT * FROM course WHERE teid IN (SELECT teid FROM teacher );

--取不在course表的教师信息
SELECT * FROM teacher WHERE teid NOT IN (SELECT teid FROM course );

4、ANY/SOME 示例
--左侧主句与右侧子查询进行字段比对,获取需要的结果集
SELECT * FROM course WHERE teid < ANY (SELECT teid FROM teacher where teid<>'04');
--或
SELECT * FROM course WHERE teid < some (SELECT teid FROM teacher where teid<>'04');

Tip:此示例主要展示ANY/SOME的查询效果,实际应用请结合具体场景使用。
5、ALL示例
--teid列中的值必须小于要评估为true的集合中的最小值。
SELECT * FROM course WHERE teid < ALL(SELECT teid FROM teacher WHERE teid<>'01');

--teidc列中的值必须大于要评估为true的集合中的最大值。
SELECT * FROM teacher WHERE teid > ALL(SELECT teid FROM course);

Tip:此示例主要展示ALL的查询效果,实际应用请结合具体场景使用。
四、注意事项及建议
- 禁止一条SQL语句中,出现重复子查询语句。
- 少用标量子查询(标量子查询指结果为1个值,并且条件表达式为等值的子查询)。
- 避免在SELECT目标列中使用子查询,可能导致计划无法下推影响执行性能。
- 子查询嵌套深度建议不超过2层。由于子查询会带来临时表开销,过于复杂的查询应考虑从业务逻辑上进行优化。
五、小结
子查询可以在 SELECT 语句中嵌套其他查询,从而实现更复杂的查询。子查询还可以在 WHERE 子句中使用其他查询的结果,从而更好地过滤数据。但是子查询可能会导致查询性能问题和代码难阅读和理解。 所以在GaussDB等数据库中使用SQL子查询时,请结合实际业务情况进行操作。
——结束
相关文章:
GaussDB数据库SQL系列-子查询
目录 一、前言 二、GaussDB SQL子查询表达式 1、EXISTS/NOT EXISTS 2、IN/NOT IN 3、ANY/SOME 4、ALL 三、GaussDB SQL子查询实验示例 1、创建实验表 2、EXISTS/NOT EXISTS示例 3、IN/NOT IN 示例 4、ANY/SOME 示例 5、ALL示例 四、注意事项及建议 五、小结 一、…...
Kafka 什么速度那么快
批量发送消息 Kafka 采用了批量发送消息的方式,通过将多条消息按照分区进行分组,然后每次发送一个消息集合,看似很平常的一个手段,其实它大大提升了 Kafka 的吞吐量。 消息压缩 消息压缩的目的是为了进一步减少网络传输带宽。而…...
环形链表笔记(自用)
环形链表 不管怎么样slow最多走半圈了, 快慢指针slow走一步,fast走两步最合适,因为假设fast和slow相差n每一次他们前进,就会相差n-1步,这样他们一定会相遇,如果是环形链表的话。 代码 /*** Definition for…...
js循环中发起请求数据不一致问题
项目场景: 在公司的一个项目中需要使用循环更改查询条件,然后查询子表数据,但是在查询过程中for下面的key变化了之后,查询中的key却并没有变化,导致查询的参数不一致,从未结果数据出错 for(let i 0;i<…...
工作流自动化:提升效率、节约成本的重要工具
在现代社会中,软件和技术的运用使得我们的日常活动变得更加简单和高效。然而,这些技术也有自身的特点和独特之处。尽管我们使用这些工具来简化工作,但有时仍需要一些人工干预,比如手动数据录入。在工作场所中,手动数据…...
仿牛客论坛项目day7|Kafka
一、阻塞队列 创建了一个生产者线程和一个消费者线程。生产者线程向队列中放入元素,消费者线程从队列中取出元素。我们可以看到,当队列为空时,消费者线程会被阻塞,直到生产者线程向队列中放入新的元素。 二、Kafka入门 发布、订阅…...
[SpringCloud] 组件性能优化技巧
Feign 配置优化hystrix配置 优化ribbon 优化Servlet 容器 优化Zuul配置 优化 文章目录 1.Servlet 容器 优化2.Feign 配置优化3.Zuul配置 优化4.hystrix配置 优化5.ribbon 优化 1.Servlet 容器 优化 默认情况下, Spring Boot 使用 Tomcat 来作为内嵌的 Servlet 容器, 可以将 We…...
okhttp下载文件 Java下载文件 javaokhttp下载文件 下载文件 java下载 okhttp下载 okhttp
okhttp下载文件 Java下载文件 javaokhttp下载文件 下载文件 java下载 okhttp下载 okhttp 1、引入Maven1.1、okhttp发起请求官网Demo 2、下载文件3、扩充,读写 txt文件内容3.1读写内容 示例 http客户端 用的是 okhttp,也可以用 UrlConnetcion或者apache …...
Oracle/PL/SQL奇技淫巧之Json转表
在Oracle中,有些时候我们需要在一个json文档中查数据 这个时候我们可以通过JSON_TABLE函数来把 json文档 提取成一张可以执行正常查询操作的表 先看JSON_TABLE函数的基础用法: JSON_TABLE(json_data, $.json_path COLUMNS (column_definitions))其中&a…...
每日一学——网络安全
网络安全设计、原则、审计等知识点的精讲如下: 网络安全设计与原则: 网络安全设计是指在系统或网络的设计过程中考虑到安全性,并采取相应的安全措施来保护系统或网络不受威胁。安全设计原则包括最小权限原则(Least Privilege Prin…...
python中的lstm:介绍和基本使用方法
python中的lstm:介绍和基本使用方法 未使用插件 LSTM(Long Short-Term Memory)是一种循环神经网络(RNN)的变体,专门用于处理序列数据。LSTM 可以记忆序列中的长期依赖关系,这使得它非常适合于各…...
【Flink】Flink窗口触发器
数据进入到窗口的时候,窗口是否触发后续的计算由窗口触发器决定,每种类型的窗口都有对应的窗口触发机制。WindowAssigner 默认的 Trigger通常可解决大多数的情况。我们通常使用方式如下,调用trigger()方法把我们想执行触发器传递进去: SingleOutputStreamOperator<Produ…...
深度云化时代,什么样的云网络才是企业的“心头好”?
科技云报道原创。 近年来企业上云的快速推进,对云网络提出了更多需求。 最初,云网络只是满足互联网业务公网接入。 随着移动互联网的发展,企业对云上网络安全隔离能力和互访能力、企业数据中心与云上网络互联、构建混合云的能力࿰…...
【快应用】快应用广告学习之激励视频广告
【关键词】 快应用、激励视频广告、广告接入 【介绍】 一、关于激励视频广告 定义:用户通过观看完整的视频广告,获得应用内相关的奖励。适用场景:游戏/快游戏的通关、继续机会、道具获取、积分等场景中,阅读、影音等应用的权益体系…...
国产化系统中遇到的视频花屏、卡顿以及延迟问题的记录与总结
目录 1、国产化系统概述 1.1、国产化操作系统与国产化CPU 1.2、国产化服务器操作系统 1.3、当前国产化系统的主流配置 2、视频解码花屏与卡顿问题 2.1、视频解码花屏 2.2、视频解码卡顿 2.3、关于I帧和P帧的说明 3、国产显卡处理速度慢导致图像卡顿问题 3.1、视频延…...
go内存管理机制
golang内存管理基本是参考tcmalloc来进行的。go内存管理本质上是一个内存池,只不过内部做了很多优化:自动伸缩内存池大小,合理切割内存块。 基本概念: Page:页,一块 8 K大小的内存空间。Go向操作系统申请和…...
【Python】Web学习笔记_flask(5)——会话cookie对象
HTTP是无状态协议,一次请求响应结束后,服务器不会留下对方信息,对于大部分web程序来说,是不方便的,所以有了cookie技术,通过在请求和响应保温中添加cookie数据来保存客户端的状态。 html代码: …...
用友U8+CRM 任意文件上传+读取漏洞复现
0x01 产品简介 用友U8 CRM客户关系管理系统是一款专业的企业级CRM软件,旨在帮助企业高效管理客户关系、提升销售业绩和提供优质的客户服务。 0x02 漏洞概述 用友 U8 CRM客户关系管理系统 getemaildata.php 文件存在任意文件上传和任意文件读取漏洞,攻击…...
【量化课程】08_1.机器学习量化策略基础实战
文章目录 1. 常用机器学习模型1.1 回归模型1.2 分类模型1.2.1 SVC介绍1.2.2 SVC在量化策略中的应用 2. 机器学习量化策略实现的基本步骤3. 策略实现 1. 常用机器学习模型 1.1 回归模型 线性回归多层感知器回归自适应提升树回归随机森林回归 1.2 分类模型 线性分类支持向量机…...
Mongodb 更新集合的方法到底有几种 (中) ?
更新方法 Mongodb 使用以下几种方法来更新文档 , Mongodb V5.0 使用 mongosh 客户端: db.collection.updateOne(<filter>, <update>, <options>) db.collection.updateMany(<filter>, <update>, <options>) db.c…...
Vim 调用外部命令学习笔记
Vim 外部命令集成完全指南 文章目录 Vim 外部命令集成完全指南核心概念理解命令语法解析语法对比 常用外部命令详解文本排序与去重文本筛选与搜索高级 grep 搜索技巧文本替换与编辑字符处理高级文本处理编程语言处理其他实用命令 范围操作示例指定行范围处理复合命令示例 实用技…...
Xshell远程连接Kali(默认 | 私钥)Note版
前言:xshell远程连接,私钥连接和常规默认连接 任务一 开启ssh服务 service ssh status //查看ssh服务状态 service ssh start //开启ssh服务 update-rc.d ssh enable //开启自启动ssh服务 任务二 修改配置文件 vi /etc/ssh/ssh_config //第一…...
汽车生产虚拟实训中的技能提升与生产优化
在制造业蓬勃发展的大背景下,虚拟教学实训宛如一颗璀璨的新星,正发挥着不可或缺且日益凸显的关键作用,源源不断地为企业的稳健前行与创新发展注入磅礴强大的动力。就以汽车制造企业这一极具代表性的行业主体为例,汽车生产线上各类…...
定时器任务——若依源码分析
分析util包下面的工具类schedule utils: ScheduleUtils 是若依中用于与 Quartz 框架交互的工具类,封装了定时任务的 创建、更新、暂停、删除等核心逻辑。 createScheduleJob createScheduleJob 用于将任务注册到 Quartz,先构建任务的 JobD…...
Java - Mysql数据类型对应
Mysql数据类型java数据类型备注整型INT/INTEGERint / java.lang.Integer–BIGINTlong/java.lang.Long–––浮点型FLOATfloat/java.lang.FloatDOUBLEdouble/java.lang.Double–DECIMAL/NUMERICjava.math.BigDecimal字符串型CHARjava.lang.String固定长度字符串VARCHARjava.lang…...
微信小程序 - 手机震动
一、界面 <button type"primary" bindtap"shortVibrate">短震动</button> <button type"primary" bindtap"longVibrate">长震动</button> 二、js逻辑代码 注:文档 https://developers.weixin.qq…...
Java多线程实现之Callable接口深度解析
Java多线程实现之Callable接口深度解析 一、Callable接口概述1.1 接口定义1.2 与Runnable接口的对比1.3 Future接口与FutureTask类 二、Callable接口的基本使用方法2.1 传统方式实现Callable接口2.2 使用Lambda表达式简化Callable实现2.3 使用FutureTask类执行Callable任务 三、…...
linux 错误码总结
1,错误码的概念与作用 在Linux系统中,错误码是系统调用或库函数在执行失败时返回的特定数值,用于指示具体的错误类型。这些错误码通过全局变量errno来存储和传递,errno由操作系统维护,保存最近一次发生的错误信息。值得注意的是,errno的值在每次系统调用或函数调用失败时…...
【论文笔记】若干矿井粉尘检测算法概述
总的来说,传统机器学习、传统机器学习与深度学习的结合、LSTM等算法所需要的数据集来源于矿井传感器测量的粉尘浓度,通过建立回归模型来预测未来矿井的粉尘浓度。传统机器学习算法性能易受数据中极端值的影响。YOLO等计算机视觉算法所需要的数据集来源于…...
C# 类和继承(抽象类)
抽象类 抽象类是指设计为被继承的类。抽象类只能被用作其他类的基类。 不能创建抽象类的实例。抽象类使用abstract修饰符声明。 抽象类可以包含抽象成员或普通的非抽象成员。抽象类的成员可以是抽象成员和普通带 实现的成员的任意组合。抽象类自己可以派生自另一个抽象类。例…...

