【PostgreSQL 17】8 子查询
一、相关运算符 IN、ALL、ANY/SOME、EXISTS
IN
最好不要有null,
SELECT
*
FROM
departments
WHERE
department_id IN (10, 20, 30)
;

SELECT
*
FROM
departments
WHERE
department_id IN (
SELECT
department_id
FROM
employees
WHERE
hire_date >= date '2008-01-01'
)
;

ALL
SELECT
*
FROM
employees
WHERE
salary > ALL (
SELECT
salary
FROM
employees
WHERE
department_id = 80
)
;

等价于
SELECT
*
FROM
employees
WHERE
salary > (
SELECT
Max(salary)
FROM
employees
WHERE
department_id = 80
)
;
ANY / SOME
SELECT
*
FROM
employees
WHERE
salary > ANY(
SELECT
salary
FROM
employees
WHERE
department_id = 80
)
;

EXISTS
-- EXISTS
SELECT
*
FROM
departments d
WHERE
EXISTS(
SELECT null
FROM
employees
WHERE
department_id = d.department_id
AND
hire_date > date '2008-01-01'
)
;
二、子查询
SELECT *
FROM employees
WHERE salary >= (
SELECT AVG(salary)
FROM employees
);

SELECT
d.department_name,
ds.total_sal
FROM
departments d
JOIN (
SELECT
department_id,
SUM(salary) AS total_sal
FROM
employees
GROUP BY
department_id
) ds
ON
d.department_id = ds.department_id
;

三、关联子查询
SELECT
d.department_name,
(
SELECT
SUM(salary)
FROM
employees
WHERE
department_id = d.department_id
)
FROM
departments d
;
SELECT
*
FROM
employees e
WHERE
salary > (
SELECT
AVG(salary)
FROM
employees
WHERE
department_id = e.department_id
)
;
四、LATERAL 横向子查询
报错,此时是找不到d的

加上lateral
SELECT
d.department_name,
t.first_name,
t.salary
FROM
departments d
JOIN LATERAL(
SELECT
first_name,
salary
FROM
employees
WHERE
department_id = d.department_id
ORDER BY
salary DESC
LIMIT 3
) t
ON true
;
参考资料
[1] 不剪发的Tony老师【PostgreSQL开发指南】第22~26节
【PostgreSQL 17】8 子查询的更多相关文章
- 使用with语句来写一个稍微复杂sql语句,附加和子查询的性能对比
今天偶尔看到sql中也有with关键字,好歹也写了几年的sql语句,居然第一次接触,无知啊.看了一位博主的文章,自己添加了一些内容,做了简单的总结,这个语句还是第一次见到,学习了.我从简单到复杂地写, ...
- postgresql子查询优化(提升子查询)
问题背景 在开发项目过程中,客户要求使用gbase8s数据库(基于informix),简单的分页页面响应很慢.排查发现分页sql是先查询出数据在外面套一层后再取多少条,如果去掉嵌套的一层,直接获取则很 ...
- 2016年11月17日--SQL主、外键,子查询
主键 数据库主键是指表中一个列或列的组合,其值能唯一地标识表中的每一行.这样的一列或多列称为表的主键,通过它可强制表的实体完整性.当创建或更改表时可通过定义 PRIMARY KEY约束来创建主键.一个 ...
- 详细讲述MySQL中的子查询操作 (来自脚本之家)
继续做以下的前期准备工作: 新建一个测试数据库TestDB: ? 1 create database TestDB; 创建测试表table1和table2: ? 1 2 3 4 5 6 7 8 9 1 ...
- SQL Server 数据库子查询基本语法
一.SQL子查询语句 1.单行子查询 select ename,deptno,sal from emp where deptno=(select deptno ...
- 关系数据库SQL之基本数据查询:子查询、分组查询、模糊查询
前言 上一篇关系数据库常用SQL语句语法大全主要是关系型数据库大体结构,本文细说一下关系型数据库查询的SQL语法. 语法回顾 SELECT [ALL|DISTINCT] <目标列表达式>[ ...
- PostgreSQL-join多表连接查询和子查询
一.多表连接查询 1.连接方式概览 [inner] join 内连接:表A和表B以元组为单位做一个笛卡尔积,记为表C,然后在C中挑选出满足符合on 语句后边的限制条件的内容. left [outer] ...
- sql子查询 嵌套SELECT语句
嵌套SELECT语句也叫子查询,一个 SELECT 语句的查询结果能够作为另一个语句的输入值.子查询不但能够出现在Where子句中,也能够出现在from子句中,作为一个临时表使用,也能够出现在sele ...
- left join 改写标量子查询
数据库环境:SQL SERVER 2005 有一博彩的赔率是1:20,它有2张业务表:smuchs(投注表),lottery(开奖表). smuchs表有3个字段,分别是sno(投注号码).smuch ...
- 子查询有OR无法展开,改写成union
SELECT A.* FROM (SELECT CD.*, nvl(CV.SUM_CI_BALANCE, 0) as SUM_CI_BALANCE, ...
随机推荐
- 基于CentOS Stream 8的物联网平台深度优化方案
系统架构全景图 图表 一.系统平台优化(CentOS Stream 8) 1. 系统基础配置 bash # 1. 系统更新与加固 sudo dnf update -y sudo dnf install ...
- [2024.12.29 鲜花] 你怎么知道海伊出AI声库了
[2024.12.29 鲜花] 你怎么知道海伊出AI声库了 你好,这是咕咕咕了一周的鲜花 感觉日漫真的香啊,好看爱看,就是为什么现代人对于深桎的感情只会用爱情来描写吗,虽然描写的是很感人,但还是想吐槽 ...
- 新人如何入门学习 STM32?
作为一个在嵌入式领域摸爬滚打了近10年的老兵,看到这个问题时我的思绪瞬间回到了当年那个懵懂的自己.说实话,2014年那个夏天,24岁的我刚从机械专业毕业却被调剂到了厦门某马的电子部门,第一次听到&qu ...
- C# HttpWebRequest 请求返回 The remote server returned an error: (400) Bad Request.
可以看下他的响应Body catch (WebException ex) { if (ex.Status == WebExceptionStatus ...
- visual studio 推送项目上自己的github账户报错
https://blog.csdn.net/weixin_43129574/article/details/104753639?utm_medium=distribute.pc_aggpage_sea ...
- Java中的队列与参数传递
Java中的队列数据结构 定义: 队列(Queue)是一种先进先出(FIFQ)的线性数据结构 基本性质: 先进先出 主要操作 2.1 入队:向队尾插入元素 2.2 出队:从队首移除元素 只允许在队首删 ...
- STM32 IAP(OTA)
一.背景知识 STM32启动流程(从内部flash启动)[1] 正常情况下,程序从Flash启动时的流程如下:(转载自) https://blog.csdn.net/qq_42190402/artic ...
- 第三方供应商不提供API接口?教你四步破解集成难题
API开放需求 在企业数字化转型过程中,异构系统之间的连接是信息化阶段不可或缺的一环.通过应用API,企业能够实现不同系统.平台和应用之间的数据交换与功能调用,从而形成端到端的业务流程协同.然而,很多 ...
- 使用RestCloud ETL轻松解决WebService数据同步
当前许多企业的业务系统甚至是SAAS系统只能提供WebService接口,如SAP.Workday等. 如何才能将众多的WebService接口同步到本地或数据中心呢? 传统的做法是通过编写代码实现, ...
- 应用集成(iPaaS)和数据集成(ETL)高效协同的最佳实践
随着企业数字化的步伐加快,企业IT工程师和数据工程师在应用和数据集成方面的工作变得日益密切.IT工程师通常利用iPaaS(Integration Platform as a Service)来进行异构 ...