openGauss学习笔记-46 openGauss 高级数据管理-子查询

news2024/12/23 5:58:43

文章目录

    • openGauss学习笔记-46 openGauss 高级数据管理-子查询
      • 46.1 SELECT语句中的子查询使用
      • 46.2 INSERT语句中的子查询使用
      • 46.3 UPDATE语句中的子查询使用
      • 46.4 DELETE语句中的子查询使用

openGauss学习笔记-46 openGauss 高级数据管理-子查询

子查询或称为内部查询,嵌套查询,指的是在数据库查询的WHERE子句中嵌入查询语句,相当于临时表。一个SELECT语句的查询结果能够作为另一个语句的输入值。

子查询可以与SELECT,INSERT,UPDATE和DELETE语句一起使用。

以下是子查询必须遵守的几个规则:

  • 子查询必须用括号括起来。
  • 子查询在SELECT子句中只能有一个列,除非在主查询中有多列,与子查询的所选列进行比较。
  • ORDER BY不能用在子查询中,虽然主查询可以使用ORDER BY。可以在子查询中使用GROUP BY,功能与ORDER BY相同。
  • 子查询返回多于一行,只能与多值运算符一起使用,如IN运算符。
  • BETWEEN运算符不能与子查询一起使用,但是,BETWEEN可在子查询内部使用。

46.1 SELECT语句中的子查询使用

SELECT语句在子查询返回的数据中进行查询。基本语法如下:

SELECT column_name [, column_name ]
FROM   table1 [, table2 ]
WHERE  column_name OPERATOR
      (SELECT column_name [, column_name ]
      FROM table1 [, table2 ]
      [WHERE]);

示例:

创建表customer,数据内容如下。

openGauss=# SELECT * FROM customer_t1;
 c_customer_sk | c_customer_id | c_first_name | c_last_name | amount
---------------+---------------+--------------+-------------+--------
          3869 | hello         | Grace        |             |   1000
          3869 |               | Grace        |             |
          3869 | hello         |              |             |
          6985 | maps          | Joes         |             |   2200
          9976 | world         | James        |             |   5000
          4421 | Admin         | Local        |             |   3000
(6 rows)

在SELECT中使用子查询,语句如下。

openGauss=# SELECT * FROM customer_t1 WHERE c_customer_sk IN (SELECT c_customer_sk FROM customer_t1 WHERE amount > 2500) ;
 c_customer_sk | c_customer_id | c_first_name | c_last_name | amount
---------------+---------------+--------------+-------------+--------
          9976 | world         | James        |             |   5000
          4421 | Admin         | Local        |             |   3000
(2 rows)

46.2 INSERT语句中的子查询使用

子查询也可以与INSERT语句一起使用。INSERT语句使用子查询返回的数据插入到另一个表中。基本语法如下:

INSERT INTO table_name [ (column1 [, column2 ]) ]
SELECT [ *|column1 [, column2 ] ]
FROM table1 [, table2 ]
[ WHERE VALUE OPERATOR ]

示例:

创建表customer_bak,表结构与customer_t1一致。

openGauss=# CREATE TABLE customer_bak
(
    c_customer_sk             integer,
    c_customer_id             char(5),
    c_first_name              char(6),
    c_last_name               char(8),
    Amount                    integer
);
CREATE TABLE

将表customer_t1中的数据插入customer_bak。

openGauss=# INSERT INTO customer_bak SELECT * FROM customer_t1  WHERE c_customer_sk  IN (SELECT c_customer_sk  FROM customer_t1) ;
INSERT 0 6

插入数据后的customer_bak的表如下:

openGauss=# SELECT * FROM customer_bak;
 c_customer_sk | c_customer_id | c_first_name | c_last_name | amount
---------------+---------------+--------------+-------------+--------
          3869 | hello         | Grace        |             |   1000
          3869 |               | Grace        |             |
          3869 | hello         |              |             |
          6985 | maps          | Joes         |             |   2200
          9976 | world         | James        |             |   5000
          4421 | Admin         | Local        |             |   3000
(6 rows)

46.3 UPDATE语句中的子查询使用

通过UPDATE语句使用子查询时,表中多个列被更新。基本语法如下:

UPDATE table
SET column_name = new_value
[ WHERE OPERATOR [ VALUE ]
   (SELECT COLUMN_NAME
   FROM TABLE_NAME
   [ WHERE ])

示例:

把表customer_t1中所有c_customer_sk大于4000的客户的amount更新为原来的0.50倍:

openGauss=# UPDATE customer_t1 SET amount = amount * 0.50 WHERE c_customer_sk IN (SELECT c_customer_sk FROM customer_bak WHERE c_customer_sk > 5000 );
UPDATE 2

更新影响2行,更新后表customer_t1数据如下:

openGauss=# SELECT *  FROM  customer_t1;
 c_customer_sk | c_customer_id | c_first_name | c_last_name | amount
---------------+---------------+--------------+-------------+--------
          3869 | hello         | Grace        |             |   1000
          3869 |               | Grace        |             |
          3869 | hello         |              |             |
          4421 | Admin         | Local        |             |   3000
          6985 | maps          | Joes         |             |   1100
          9976 | world         | James        |             |   2500
(6 rows)

46.4 DELETE语句中的子查询使用

基本语法如下:

DELETE FROM TABLE_NAME
[ WHERE OPERATOR [ VALUE ]
   (SELECT COLUMN_NAME
   FROM TABLE_NAME
   [ WHERE ])

示例:

删除表customer_t1中所有c_customer_sk大于4000的客户:

openGauss=# DELETE FROM customer_t1 WHERE c_customer_sk IN (SELECT c_customer_sk FROM customer_bak WHERE  c_customer_sk > 5000 );
DELETE 2

删除影响2行,删除后的表customer_t1数据如下:

openGauss=# SELECT *  FROM  customer_t1;
 c_customer_sk | c_customer_id | c_first_name | c_last_name | amount
---------------+---------------+--------------+-------------+--------
          3869 | hello         | Grace        |             |   1000
          3869 |               | Grace        |             |
          3869 | hello         |              |             |
          4421 | Admin         | Local        |             |   3000
(4 rows)

👍 点赞,你的认可是我创作的动力!

⭐️ 收藏,你的青睐是我努力的方向!

✏️ 评论,你的意见是我进步的财富!

图片

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

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

相关文章

实战演练 | Navicat 导出向导

数据库工具中的导入导出功能是指将数据从一个数据库系统导出到另一个数据库系统,或者将数据从一个文件格式导出到另一个文件格式。导入导出功能可以通过各种方式实现,例如使用SQL语句、数据库管理工具或第三方库和工具。在进行数据迁移时,通常…

AMBA总线协议(6)——AHB(四):传输细节

一、前言 在之前的文章中,我们已经讲述了AHB传输中的两种情况,基本传输和猝发传输。我们进行一个简单的回顾,首先,开始一次传输之前主机需要向仲裁器申请获得总线的使用权限,然后主机给出地址和控制信号,根…

冠达管理:沪指失守3100点 大盘加速赶底

8月21日,A股商场缩量跌落,上证指数尾盘失守3100点。券商股领跌,环保板块逆势掀涨停潮。北向资金净卖出64.12亿元,这是自8月7日以来连续第11个交易日净卖出。 从盘面看,早盘三大指数小幅低开,以券商股为主的…

前端找工作,有没有什么推荐的vue项目?

前言 可以参考一下下面的项目,已经作了vue2和vue3的分类,可以自己去选择适合的,希望对你有帮助~ Vue2 PC项目 1、 Elemen Star:53.4k 是一个基于Vue.js 2.0的UI组件库,由饿了么前端团队开发和维护。该组件库提供了…

文旅景区vr体验馆游乐场vr项目是什么

我们知道现在很多的景区或者游玩的地方,以及学校、科技馆、科普馆、商场或公园或街镇,都会建一些关于游玩以及科普学习的项目。从而增加学习氛围或者带动人流量等等。这样的形式,还是有很好的效果呈现。 普乐蛙VR体验馆案例 下面是普乐蛙做的…

wazuh初探系列一 : wazuh环境配置

目录 方法一:一体化部署 安装先决条件 第一步、安装所有必需的软件包 第二步、安装Elasticsearch 1、添加 Elastic Stack 存储库 安装 GPG 密钥: 添加存储库: 更新源: 2、Elasticsearch安装和配置 安装 Elasticsearch 包…

解决问题:C++ [某变量名] was not declared in this scope

目录 程序报错的问题 查看程序问题 发现错误代码 错误原因 修改代码 再次运行 程序报错的问题 查看程序问题 发现错误代码 cout<<c; 错误原因 c 这个变量还没有在这个程序中定义 修改代码 加上 int c; 再次运行

算法:二分查找算法/朴素二分/查找区间左右端点二分

文章目录 实现原理查找区间左右端点查找左端点查找右端点 实现思路朴素二分查找模板查找区间左右端点模板 典型例题二分查找查找元素第一个和最后一个位置x的平方根山脉数组峰顶索引 总结 实现原理 通常来说&#xff0c;二分查找的使用范围是当数组有序的时候可以使用&#xf…

2023年夏季《移动软件开发》实验报告2

2023年夏季《移动软件开发》实验报告 姓名和学号&#xff1f;本实验属于哪门课程&#xff1f;中国海洋大学23夏《移动软件开发》实验名称&#xff1f;实验2&#xff1a;天气查询小程序博客地址&#xff1f;XXXXXXXGithub仓库地址&#xff1f;XXXXXXX &#xff08;备注&#x…

MyBaits注解开发

1、注解开发介绍 在过去使用框架开发项目&#xff0c;基本都采用xml作为框架的核心配置文件存在&#xff0c;但是这种方式开发效率还是比较地下、不灵活。 现在企业开发为了能够更快的提高开发效率&#xff0c;必然会使用企业级框架进行项目开发&#xff0c;而现在主流的框架…

华人画家戴渭作品 3000 万拍出,牛津艺术学院发出任教邀请

爱丁堡,2023年7月 - 画家戴渭以他独特的画风、深邃的意境和慈悲智慧的属性,将艺术与宗教融合于作品之中。初看他的作品,可能会被其高超的艺术水准所震撼,然而仔细品味,方能领略到他深邃的艺术造诣与宗教智慧的深度融合。 作为国内最年轻的华人80后画家之一,戴渭近期被英国牛津…

若依cloud -【 22 ~ 25 】

22 认证中心介绍 1 概述 用户身份认证的过程ruoyi-cloud认证中心的实现没有依赖任何插件&#xff0c;相对简单&#xff0c;一看就懂从架构图的角度看认证中心&#xff1a; 登录请求&#xff0c;进到网关网关直接调用认证中心。查看ruoyi-gateway-dev.yml&#xff1a; # 结论…

【历史上的今天】8 月 22 日:改变世界的程序员们;网络直播的鼻祖;何小鹏离开阿里巴巴

整理 | 王启隆 透过「历史上的今天」&#xff0c;从过去看未来&#xff0c;从现在亦可以改变未来。 今天 2023 年 8 月 22 日。历史上的今天&#xff0c;Masatoshi Shima 出生&#xff0c;他和 英特尔&#xff08;Intel&#xff09; 合作设计的芯片让第一个微处理器 Intel 400…

【SpringSecurity】二、密码处理与获取当前登录用户

文章目录 一、密码处理1、加密方案2、BCryptPasswordEncoder类初体验3、使用加密码加密 二、获取当前登录用户1、方式一&#xff1a;通过安全上下文的静态调用2、方式二&#xff1a;做为Controller中方法的参数3、方式三&#xff1a;从HTTPServletRequest中获取4、方式四&#…

无涯教程-PHP Installation on Windows NT/2000/XP with IIS函数

在Windows Server上运行IIS的PHP的安装比在Unix上简单得多,因为它涉及的是预编译的二进制文件而不是源代码。 如果您打算在Windows上安装PHP,那么这是先决条件列表- 运行中的PHP支持的Web服务器。一个正确安装的PHP支持的数据库,如MySQL或Oracle等。(如果您打算使用的话) PHP…

smiley-http-proxy-servlet 实现springboot 接口反向代理,站点代理,项目鉴权,安全的引入第三方项目服务

背景&#xff1a; 项目初期 和硬件集成&#xff0c;实现了些功能服务&#xff0c;由于是局域网环境&#xff0c;安全问题当时都可以最小化无视。随着对接的服务越来越多&#xff0c;部分功能上云&#xff0c;此时就需要有一种手段可以控制到其他项目/接口的访问权限。 无疑 反向…

硬件解码example

使用方法&#xff1a; ./hw_decode vaapi juren-30s.mp4 juren-30s.mp4 验证播放&#xff1a; ffplay -video_size 1920x1080 -pixel_format yuv420p juren-30s.yuv av_hwdevice_iterate_types(type)如果你填入的参数不对&#xff0c;那么这函数这个函数的作用相当于以下命令&…

飞天使-k8s基础组件分析-pod

文章目录 pod介绍pod 生命周期init 容器容器handlerpod中容器共享进程空间sidecar 容器共享 参考链接 pod介绍 最小的容器单元 为啥需要pod? 答: 多个进程丢一个容器里&#xff0c;会因为容器里个别进程出问题而出现蝴蝶效应&#xff0c;pod 是更高级的处理方式pod 如何共享相…

简述docker映射(Mapping)和挂载(Mounting)

映射的概念&#xff1a; 将容器内的端口映射到主机的端口上&#xff0c;这样就可以通过主机的网络接口与容器内部进行通信。主机上对应端口的请求会被转发到容器内部&#xff0c;从而实现对容器内部程序的通信访问&#xff08;注意&#xff01;这里提到的容器内部的端口并不一定…