MySQL 衍生表(Derived Tables)

在SQL的查詢語句select …. from …中,跟在from子句后面的通常是一張擁有定義的實體表,而有的時候我們會用子查詢來扮演實體表的角色,這個在from子句中的子查詢會返回一個結果集,這個結果集可以像普通的實體表一樣查詢、連接,這個子查詢的結果集就叫做衍生表。

文章目錄

  • 一、衍生表簡介
    • 1.1 衍生表基本用法
    • 1.2 自定義列名
    • 1.3 衍生表的局限

一、衍生表簡介

衍生表常用在需要對數據進行臨時處理的場景,即對表直接查詢無法得出結果,需要對數據進行加工,然后在加工基礎上與原數據再次進行連接,才能得出結果。

示例數據準備
例如下面一的張考試成績表,subject_id代表不同的科目,score代表分數:

create table exam(
id int not null auto_increment primary key,
subject_id int,
student varchar(12),
score int);insert into exam values(null,1,'小紅',89), (null,1,'小橙',76), (null,1,'小黃',89),(null,1,'小綠',95), (null,2,'小青',77), (null,2,'小藍',83), (null,2,'小紫',99);select * from exam;

在這里插入圖片描述

1.1 衍生表基本用法

現要求:找出每個科目得分最高那條記錄,這個問題需要拆分成2步完成:

第一步:找出每個科目的最高分

select subject_id, max(score) score from exam group by subject_id;

在這里插入圖片描述
第二步:將上一步的結果與exam表進行連接,找出具體的記錄:

select e.* from exam e, (select subject_id, max(score) score from exam group by subject_id) d 
where d.subject_id=e.subject_id and d.score=e.score;

在這里插入圖片描述
? 這里將第一步的查詢放在括號中,并取一個別名d。
? 通過別名d,MySQL可以像引用實體表一樣引用子查詢的結果集(衍生表)。

1.2 自定義列名

在給衍生表定義別名時,可以同時定義列名,方法是在別名后的括號內列出列名,要注意列名的數量要和子查詢返回的列數量相同:

select a, b, d from (select 1,2,3,4) d(a,b,c,d);

在這里插入圖片描述

1.3 衍生表的局限

衍生表目前的局限是它是一個獨立的子查詢,在生成結果集之前無法和from表中的其他表產生關聯,如果產生衍生表的子查詢成本非常高,而最后與其他表連接后只使用了一小部分數據,那么這個性能浪費是非常嚴重的。

例如上面的例子中,如果表中有10萬個科目,而我最終結果只涉及2個科目,那么在衍生表中對10萬個科目進行group by顯然是沒有必要的,這種情況我們需要提前將外層謂語條件(where)傳入衍生表中,避免處理不必要的數據,但這也意味著謂語條件在外層寫了一遍,必須在衍生表中再寫一遍,增加了SQL復雜度。

在MySQL 8.0.14版本后,通過橫向衍生表(lateral關鍵字),可以在衍生表中引用from子句中之前出現的表,可以完美解決上述局限。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/72288.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/72288.shtml
英文地址,請注明出處:http://en.pswp.cn/web/72288.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

STM32配套程序接線圖

1 工程模板 2 LED閃爍 3LED流水燈 4蜂鳴器 5按鍵控制LED 6光敏傳感器控制蜂鳴器 7OLED顯示屏 8對射式紅外傳感器計次 9旋轉編碼器計次 10 定時器定時中斷 11定時器外部時鐘 12PWM驅動LED呼吸燈 13 PWM驅動舵機 14 PWM驅動直流電機 15輸入捕獲模式測頻率 16PWMI模式測頻率占空…

鴻蒙初級考試備忘

Module類型 Module按照使用場景可以分為兩種類型: Ability類型的Module: 用于實現應用的功能和特性。每一個Ability類型的Module編譯后,會生成一個以.hap為后綴的文件,我們稱其為HAP(Harmony Ability Package&#x…

語音識別踩坑記錄

本來想在原來的語音識別的基礎上增加本地擴展本地詞典, 采用的語音識別是Vosk識別器,模型是 vosk-model-small-cn-0.22 // 初始化Vosk識別器 if (recognizer null) {using (Model model new Model(modelPath)){string grammar "{""…

SpringCloud 學習筆記1(Spring概述、工程搭建、注冊中心、負載均衡、 SpringCloud LoadBalancer)

文章目錄 SpringCloudSpringCloud 概述集群和分布式集群和分布式的區別和聯系 微服務什么是微服務?分布式架構和微服務架構的區別微服務的優缺點?拆分微服務原則 什么是 SpringCloud ?核心功能與組件 工程搭建父項目的 pom 文件 注冊中心Rest…

計算機網絡-網絡規劃與設計

基本流程 需求分析—》通信規范分析—》邏輯網絡設計—》物理網絡設計—》實施階段 需求分析: 確定需求,包括:業務需求、用戶需求、應用需求、計算機平臺需求、網絡通信需求等。 產物:需求規范 通信規范分析: 現有…

《AI浪潮中的璀璨新星:Meta Llama、Ollama與DeepSeek的深度剖析》:此文為AI自動生成

《AI浪潮中的璀璨新星:Meta Llama、Ollama與DeepSeek的深度剖析》:此文為AI自動生成 引言:AI 大模型的群雄逐鹿時代 在科技飛速發展的當下,AI 大模型領域已成為全球矚目的焦點,競爭激烈程度堪稱白熱化。從 OpenAI 推出…

基礎知識《HTTP字段與狀態碼詳細說明》

HTTP 協議字段與狀態碼完整指南 一、HTTP 字段(請求頭與響應頭) HTTP 頭字段用于傳遞客戶端和服務器之間的元數據,分為 請求頭(Request Headers) 和 響應頭(Response Headers)。 1. 常見請求頭…

DeepSeek linux服務器(CentOS)部署命令筆記

Linux(CentOS)FinalShellOllama遠程訪問,本地部署deepseek 自備CentOS服務器,并且已經使用FinalShell連接到服務器 一、準備工作 1.更新服務器 apt-get update-y 2.下載Ollama curl -fsSL https://ollama.com/install.sh | …

C#通過API接口返回流式響應內容---分塊編碼方式

1、背景 上一篇文章《C#通過API接口返回流式響應內容—SSE方式》闡述了通過SSE(Server Send Event)方式,由服務器端推送數據到瀏覽器。本篇是通過分塊編碼的方式實現 2、效果 3、具體代碼 3.1 API端實現 [HttpGet] public async Task Chu…

SSL 原理及實驗

引言 為了實現遠程辦公或者遠程客戶訪問內網的資源 (1)回顧歷史: 起初先出現SSL(Secure Sockets Layer)-安全套接層協議。 美國網景Netscape公司1994年研發,介于傳輸層TCP協議和應用層協議之間的一種協議…

C++ 布爾類型(bool)深度解析

引言 在 C 編程里,布爾類型(bool)是一種基礎且極為關鍵的數據類型。它專門用于表達邏輯值,在程序的條件判斷、循環控制等諸多方面都發揮著重要作用。接下來,我們將對 C 中的布爾類型展開全面且深入的探討。 一、布爾…

UE5.5 Niagara發射器更新屬性

發射器屬性 在 Niagara 里,Emitter 負責控制粒子生成的規則和行為。不同的 Emitter 屬性決定了如何發射粒子、粒子如何模擬、計算方式等。 發射器 本地空間(Local Space) 控制粒子是否跟隨發射器(Emitter)移動。 ?…

各省水資源平臺 水資源遙測終端機都用什么協議

各個省水資源平臺 水資源遙測終端機 的建設大部分從2012年開始啟動,經過多年建設,基本都已經形成了穩定的通訊要求;河北瑾航科技 遙測終端機,兼容了大部分省市的通訊協議,如果需要,可以咨詢和互相學習&…

使用OpenCV和MediaPipe庫——抽煙檢測(姿態監控)

目錄 抽煙檢測的運用 1. 安全監控 (1) 公共場所禁煙監管 (2) 工業安全 2. 智能城市與執法 (1) 城市違章吸煙檢測 (2) 無人值守管理 3. 健康管理與醫療 (1) 吸煙習慣分析 (2) 遠程監護 4. AI 監控與商業分析 (1) 保險行業 (2) 商場營銷 5. 技術實現 (1) 計算機視…

WPF窗口讀取、顯示、修改、另存excel文件——CAD c#二次開發

效果如下: using System.Data; using System.IO; using System.Windows; using Microsoft.Win32; using ExcelDataReader; using System.Text; using ClosedXML.Excel;namespace IfoxDemo {public partial class SimpleWindow : Window{public SimpleWindow(){Initi…

HarmonyOS NEXT - 電商App實例三( 網絡請求axios)

使用axios開發網絡請求是一個非常常見的任務,尤其是Web前端開發者,對它非常熟悉。axios是一個基于Promise的HTTP客戶端,支持瀏覽器和Node.js環境,使用簡單且功能強大。 在harmonyOS中,如果想使用axios,可以…

生成省市區JSON

省市區 學習記錄 https://xiangyuecn.github.io/AreaCity-JsSpider-StatsGov/ package cn.serverx.sx.your;import cn.hutool.core.io.FileUtil; import cn.serverx.sx.your.vo.DistrictNode; import com.alibaba.fastjson2.JSON; import com.google.common.collect.Lists; i…

醫療APP開發如何實現跨機構數據互通

醫療APP開發如何實現跨機構數據互通 在數字化醫療時代,醫療APP開發已成為連接醫療機構、患者和醫療資源的重要橋梁。然而,如何實現跨機構的數據互通,成為醫療APP開發中的一大挑戰。本文將探討如何通過醫療APP開發實現跨機構數據互通,提升醫療服務效率和患者體驗。我們將涵…

自定義Linux網絡協議的開發與測試

在當今快速發展的技術領域中,定制化網絡協議可以為特定的應用場景提供靈活而強大的解決方案。本文將詳細介紹如何在Linux系統上開發一個自定義網絡協議,并編寫相應的用戶空間程序進行測試。所有步驟基于2025年3月11日的時間點完成。 開發自定義協議內核模塊 定義協議和實現…

PySide(PyQT)的mouseMoveEvent()和hoverMoveEvent()的區別

在 PySide中,mouseMoveEvent 和 hoverMoveEvent 都是用于處理鼠標移動相關操作的事件,但它們之間存在明顯的區別: 事件觸發條件 ? mouseMoveEvent: 當鼠標在對應的圖形項(如 QGraphicsPixmapItem&#xff09…