一、相关运算符 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 子查询的更多相关文章

  1. 使用with语句来写一个稍微复杂sql语句,附加和子查询的性能对比

    今天偶尔看到sql中也有with关键字,好歹也写了几年的sql语句,居然第一次接触,无知啊.看了一位博主的文章,自己添加了一些内容,做了简单的总结,这个语句还是第一次见到,学习了.我从简单到复杂地写, ...

  2. postgresql子查询优化(提升子查询)

    问题背景 在开发项目过程中,客户要求使用gbase8s数据库(基于informix),简单的分页页面响应很慢.排查发现分页sql是先查询出数据在外面套一层后再取多少条,如果去掉嵌套的一层,直接获取则很 ...

  3. 2016年11月17日--SQL主、外键,子查询

    主键 数据库主键是指表中一个列或列的组合,其值能唯一地标识表中的每一行.这样的一列或多列称为表的主键,通过它可强制表的实体完整性.当创建或更改表时可通过定义 PRIMARY KEY约束来创建主键.一个 ...

  4. 详细讲述MySQL中的子查询操作 (来自脚本之家)

    继续做以下的前期准备工作: 新建一个测试数据库TestDB: ? 1 create database TestDB; 创建测试表table1和table2: ? 1 2 3 4 5 6 7 8 9 1 ...

  5. SQL Server 数据库子查询基本语法

    一.SQL子查询语句 1.单行子查询        select ename,deptno,sal        from emp        where deptno=(select deptno ...

  6. 关系数据库SQL之基本数据查询:子查询、分组查询、模糊查询

    前言 上一篇关系数据库常用SQL语句语法大全主要是关系型数据库大体结构,本文细说一下关系型数据库查询的SQL语法. 语法回顾 SELECT [ALL|DISTINCT] <目标列表达式>[ ...

  7. PostgreSQL-join多表连接查询和子查询

    一.多表连接查询 1.连接方式概览 [inner] join 内连接:表A和表B以元组为单位做一个笛卡尔积,记为表C,然后在C中挑选出满足符合on 语句后边的限制条件的内容. left [outer] ...

  8. sql子查询 嵌套SELECT语句

    嵌套SELECT语句也叫子查询,一个 SELECT 语句的查询结果能够作为另一个语句的输入值.子查询不但能够出现在Where子句中,也能够出现在from子句中,作为一个临时表使用,也能够出现在sele ...

  9. left join 改写标量子查询

    数据库环境:SQL SERVER 2005 有一博彩的赔率是1:20,它有2张业务表:smuchs(投注表),lottery(开奖表). smuchs表有3个字段,分别是sno(投注号码).smuch ...

  10. 子查询有OR无法展开,改写成union

    SELECT A.*   FROM (SELECT CD.*,                nvl(CV.SUM_CI_BALANCE, 0) as SUM_CI_BALANCE,         ...

随机推荐

  1. 基于CentOS Stream 8的物联网平台深度优化方案

    系统架构全景图 图表 一.系统平台优化(CentOS Stream 8) 1. 系统基础配置 bash # 1. 系统更新与加固 sudo dnf update -y sudo dnf install ...

  2. [2024.12.29 鲜花] 你怎么知道海伊出AI声库了

    [2024.12.29 鲜花] 你怎么知道海伊出AI声库了 你好,这是咕咕咕了一周的鲜花 感觉日漫真的香啊,好看爱看,就是为什么现代人对于深桎的感情只会用爱情来描写吗,虽然描写的是很感人,但还是想吐槽 ...

  3. 新人如何入门学习 STM32?

    作为一个在嵌入式领域摸爬滚打了近10年的老兵,看到这个问题时我的思绪瞬间回到了当年那个懵懂的自己.说实话,2014年那个夏天,24岁的我刚从机械专业毕业却被调剂到了厦门某马的电子部门,第一次听到&qu ...

  4. C# HttpWebRequest 请求返回 The remote server returned an error: (400) Bad Request.

    可以看下他的响应Body catch (WebException ex)            {                if (ex.Status == WebExceptionStatus ...

  5. visual studio 推送项目上自己的github账户报错

    https://blog.csdn.net/weixin_43129574/article/details/104753639?utm_medium=distribute.pc_aggpage_sea ...

  6. Java中的队列与参数传递

    Java中的队列数据结构 定义: 队列(Queue)是一种先进先出(FIFQ)的线性数据结构 基本性质: 先进先出 主要操作 2.1 入队:向队尾插入元素 2.2 出队:从队首移除元素 只允许在队首删 ...

  7. STM32 IAP(OTA)

    一.背景知识 STM32启动流程(从内部flash启动)[1] 正常情况下,程序从Flash启动时的流程如下:(转载自) https://blog.csdn.net/qq_42190402/artic ...

  8. 第三方供应商不提供API接口?教你四步破解集成难题

    API开放需求 在企业数字化转型过程中,异构系统之间的连接是信息化阶段不可或缺的一环.通过应用API,企业能够实现不同系统.平台和应用之间的数据交换与功能调用,从而形成端到端的业务流程协同.然而,很多 ...

  9. 使用RestCloud ETL轻松解决WebService数据同步

    当前许多企业的业务系统甚至是SAAS系统只能提供WebService接口,如SAP.Workday等. 如何才能将众多的WebService接口同步到本地或数据中心呢? 传统的做法是通过编写代码实现, ...

  10. 应用集成(iPaaS)和数据集成(ETL)高效协同的最佳实践

    随着企业数字化的步伐加快,企业IT工程师和数据工程师在应用和数据集成方面的工作变得日益密切.IT工程师通常利用iPaaS(Integration Platform as a Service)来进行异构 ...