【解惑】介绍三大数据库的with语句的写法及使用场景

解惑,介绍,数据库,with,语句,写法,使用,场景 · 浏览次数 : 115

小编点评

**MySQL** ```sql WITH max_price AS ( SELECT item_type, MAX(s_price) AS m_price FROM table1 GROUP BY item_type ) SELECT a.col1, a.col2 FROM table1 a INNER JOIN max_price ON a.item_type = max_price.item_type WHERE a.s_price = (SELECT m_price FROM max_price t1 WHERE t1.item_type = a.item_type); ``` **Microsoft SQL Server (MSSQL)** ```sql WITH max_price AS ( SELECT item_type, MAX(s_price) AS m_price FROM table1 GROUP BY item_type ) SELECT a.col1, a.col2 FROM table1 a WHERE a.s_price = (SELECT m_price FROM max_price t1 WHERE t1.item_type = a.item_type); ``` **Oracle** ```sql WITH max_price AS ( SELECT item_type, MAX(s_price) AS m_price FROM table1 GROUP BY item_type ) SELECT a.col1, a.col2 FROM table1 a WHERE a.s_price = (SELECT m_price FROM max_price t1 WHERE t1.item_type = a.item_type); ```

正文

WITH 子句通常被称为 "Common Table Expressions"(CTE),俗称内存临时表,当使用 WITH 语句时,应注意具体的数据库版本和支持情况。以下是对 MySQL、Microsoft SQL Server(MSSQL)和 Oracle 数据库的 WITH 语句用法示例,以及在 WHERE 子句中添加分组关联条件实现对比最大聚合值:

MySQL

在 MySQL5.7 中,可以使用子查询和连接操作来实现 WITH 语句的效果,并结合 GROUP BY 子句实现分组关联条件,但是性能较低,因为每行a.s_price都需要与子查询max(s_price)聚合对比,结果集超过1万行就慢了。以下是示例代码:

SELECT a.col1, a.col2
FROM table1 a
INNER JOIN (
    SELECT item_type, MAX(s_price) AS m_price
    FROM table1
    GROUP BY item_type
) AS max_price ON a.item_type = max_price.item_type
WHERE a.s_price = max_price.m_price;

在MySQL8.0及以上版本,可以使用with语法实现上述功能,且性能较高:

WITH max_price AS (
    SELECT item_type, MAX(s_price) AS m_price
    FROM table1
    GROUP BY item_type
)
SELECT a.col1, a.col2
FROM table1 a
WHERE a.s_price = (SELECT m_price FROM max_price t1 WHERE t1.item_type = a.item_type);

Microsoft SQL Server (MSSQL)

在 MSSQL 中,可以使用 WITH 语句(也称为公共表表达式)来在查询中定义临时的命名结果集,并在 WHERE 子句中添加分组关联条件。以下是示例代码:

WITH max_price AS (
    SELECT item_type, MAX(s_price) AS m_price
    FROM table1
    GROUP BY item_type
)
SELECT a.col1, a.col2
FROM table1 a
WHERE a.s_price = (SELECT m_price FROM max_price t1 WHERE t1.item_type = a.item_type);

此 WITH 语句在 MSSQL 2005 及以上版本中可用。

Oracle

在 Oracle 中,WITH 语句通常被称为子查询块或子查询事务,它使用 WITH 子句为查询定义临时命名的数据块,并在 WHERE 子句中添加分组关联条件。以下是示例代码:

WITH max_price AS (
    SELECT item_type, MAX(s_price) AS m_price
    FROM table1
    GROUP BY item_type
)
SELECT a.col1, a.col2
FROM table1 a
WHERE a.s_price = (SELECT m_price FROM max_price t1 WHERE t1.item_type = a.item_type);

此 WITH 语句在 Oracle 9i 及以上版本中可用。

需要注意的是,这些示例是通用的语法示例,不能适用于所有情况。具体使用和限制还需要参考各个数据库的官方文档或进一步研究各个数据库管理系统的特定语法和功能。

与【解惑】介绍三大数据库的with语句的写法及使用场景相似的内容:

【解惑】介绍三大数据库的with语句的写法及使用场景

WITH 子句通常被称为 "Common Table Expressions"(CTE),俗称内存临时表,当使用 WITH 语句时,应注意具体的数据库版本和支持情况。以下是对 MySQL、Microsoft SQL Server(MSSQL)和 Oracle 数据库的 WITH 语句用法示例,以及在

Vitess全局唯一ID生成的实现方案

为了标识一段数据,通常我们会为其指定一个唯一id,比如利用MySQL数据库中的自增主键。 但是当数据量非常大时,仅靠数据库的自增主键是远远不够的,并且对于分布式数据库只依赖MySQL的自增id无法满足全局唯一的需求。因此,产生了多种解决方案,如UUID,SnowFlake等。下文将介绍Vitess是如何解决这个问题的。

京东云开发者|京东云RDS数据迁移常见场景攻略

云时代已经来临,云上很多场景下都需要数据的迁移、备份和流转,各大云厂商也大都提供了自己的迁移工具。本文主要介绍京东云数据库为解决用户数据迁移的常见场景所提供的解决方案。

解密IP分片与重组:数据传输中的关键技术

本文介绍了IP分片与重组的工作原理及其在数据传输中的重要性。IP分片将大数据包分割为小分片进行传输,重组则将其重新组合为完整数据包。这种技术能适应不同网络链路的传输单元限制,提高传输效率和可靠性。随着IPv4地址枯竭,IPv6的采用越来越普遍,了解IP分片与重组对于网络优化和IPv6部署至关重要。

揭露 FileSystem 引起的线上 JVM 内存溢出问题

作者:来自 vivo 互联网大数据团队-Ye Jidong 本文主要介绍了由FileSystem类引起的一次线上内存泄漏导致内存溢出的问题分析解决全过程。 内存泄漏定义(memory leak):一个不再被程序使用的对象或变量还在内存中占有存储空间,JVM不能正常回收改对象或者变量。一次内存泄漏似乎

开源分布式任务调度系统就选:DolphinScheduler

分布式任务调度这个话题是每个后端开发和大数据开发都会接触的话题。因为应用场景的广泛,所以有很多开源项目专注于解决这类问题,比如我们熟知的xxl-job。 那么今天要给大家推荐的则是另一个更为强大的开源项目:DolphinScheduler 介绍 DolphinScheduler是一款开源的分布式任务

3大主流分布式事务框架详解(图文总结)

1 简要介绍 随着微服务架构的不断发展,分布式系统逐渐普及到后端领域的每一个角落。 在分布式系统中,跨多个服务的数据一致性一直是一个重大挑战,为解决这一挑战,分布式事务应运而生。 作者在之前的文章《五种分布式事务解决方案》和《4大主流分布式算法介绍》中,详细介绍了分布式事物的解决方案以及实现原理。接

使用单调队列解决 “滑动窗口最大值” 问题

本文已收录到 GitHub · AndroidFamily,有 Android 进阶知识体系,欢迎 Star。技术和职场问题,请关注公众号 [彭旭锐] 私信我提问。 前言 大家好,我是小彭。 在上一篇文章中,我们介绍了单调栈这种特殊的栈结构,单调栈是一种非常适合处理 “下一个更大元素问题” 的数据结

解密Prompt系列32. LLM之表格理解任务-文本模态

这一章我们聊聊大模型表格理解任务,在大模型时代主要出现在包含表格的RAG任务,以及表格操作数据抽取文本对比等任务中。这一章先聊单一的文本模态,我们分别介绍微调和基于Prompt的两种方案。

解决大模型“开发难”,昇思MindSpore自动并行技术应用实践

本文介绍MindSpore常用的分布式并行训练技术,以及如何将并行技术应用到大模型预训练中。