【解惑】介紹三大資料庫的with語句的寫法及使用場景

来源:https://www.cnblogs.com/lan80/archive/2023/08/04/17604960.html
-Advertisement-
Play Games

# Unity Shader編輯器工具類ShaderUtil 常用函數和用法 ![Unity Shader](https://cdn.pixabay.com/photo/2017/08/30/01/05/milky-way-2695569_960_720.jpg) Unity的Shader編輯器工具 ...


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 及以上版本中可用。

需要註意的是,這些示例是通用的語法示例,不能適用於所有情況。具體使用和限制還需要參考各個資料庫的官方文檔或進一步研究各個資料庫管理系統的特定語法和功能。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 作為一名開發者,有很多場景需要用到內網穿透,比如:我們在接入一些大平臺做第三方應用時,在本地開發微信公眾號工具的時候需要讓微信平臺能否訪問到本地提供的介面。除此之外,還有很多其他場景,也會用到,比如:把放在家裡的NAS或伺服器暴露到公網上,這樣在外面的時候也可以隨時隨地的訪問。 說到內網傳統,TJ君 ...
  • #### win10 環境搭建 ##### 1.簡易安裝參考菜鳥教程,鏈接: ##### 2.詳細安裝 1. ##### Apache 伺服器安裝:Apache 是C語言實現的,專門用來提供HTTP服務;特性:簡單、速度快、性能穩定、可配置(代理) 2.1.1、主要用於解析靜態文本,併發性能高,側重 ...
  • ### application.yml文件中開啟mybatis自動駝峰映射 ```java configuration: #是否開啟自動駝峰命名規則映射:從資料庫列名到Java屬性駝峰命名的類似映射 map-underscore-to-camel-case: true ``` - 如果不開啟映射 在 ...
  • 本文探討了三種常見的加密演算法:MD5、DES和RAS的工作原理與特點。首先,MD5是一種不可逆的加密演算法,它將任意長度的數據轉化為固定長度的摘要,用於數據完整性校驗。然而,由於其存在碰撞攻擊的漏洞,MD5已經不再被推薦作為安全加密演算法。其次,DES是一種對稱可逆的加密演算法,它使用相同的密鑰進行加密和... ...
  • 本文將介紹ASP.NET Core SignalR,這是一個強大的實時通信庫,用於構建實時、雙向通信應用程式。我們將探討SignalR的基本概念、架構和工作原理,並提供一些示例代碼來幫助讀者更好地理解和使用SignalR。ASP.NET Core SignalR提供了一種簡單而強大的方式來構建實時通 ...
  • # Unity IPreprocessShaders Unity IPreprocessShaders是Unity引擎中的一個非常有用的功能,它可以讓開發者在編譯Shader時自定義哪些操作需要被執行。這個可以幫助開發者更好地控制Shader的編譯過程,確保在編譯Shader時執行必要的操作。在本文 ...
  • ## 引言 今天同事問了我一個問題,`System.Windows.Forms.Timer`是前臺線程還是後臺線程,我當時想的是它是跟著UI線程一起結束的,應該是前臺線程吧? 我確實沒有仔細研究過他們的異同,所以帶著這個疑問探究一下`System.Windows.Forms.Timer`。 ## S ...
  • # DXP TreeList 目錄樹 ## 1.需求背景 需要一個支持`勾選`,`拖動節點`,`保存各節點順序`的目錄樹。 ![image](https://jsd.cdn.zzko.cn/gh/YuanjunXu/Images@main/src/image.3wqa9fpk8xo0.jpg) ## ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...