什麼是SQL 語句中相關子查詢與非相關子查詢

来源:https://www.cnblogs.com/lubians/p/18164001
-Advertisement-
Play Games

要理解相關子查詢和非相關子查詢,我們得首先理解什麼是子查詢,子查詢是指在一個查詢語句中嵌套的另一個查詢語句。 ...


1.什麼是SQL子查詢

要理解相關子查詢和非相關子查詢,我們得首先理解什麼是子查詢,子查詢是指在一個查詢語句中嵌套的另一個查詢語句。 子查詢可以嵌套在其他查詢語句中,如 SELECTINSERTUPDATEDELETE 等,它作為一個獨立的查詢單元,其結果可以被外部查詢所使用。 子查詢可以幫助我們更靈活地處理數據和執行複雜的查詢操作。

2.sql子查詢分類

子查詢主要有以下幾類:

  1. 標量子查詢:子查詢返回的是單個值,如一個數字、字元串等。
  2. 行子查詢:子查詢返回的是一行數據。
  3. 列子查詢:子查詢返回的是一列數據。
  4. 表子查詢:子查詢返回的是一個表的結果。

3.子查詢執行過程解析

子查詢的執行過程遵循“由里及外”的原則,總是先執行最內層的子查詢語句,執行完畢後將執行結果與外層的語句進行合併,依次逐層向外擴展並最終形成完整的 SQL 語句。

具體來說,子查詢的執行過程可以分為以下幾種情況:

  1. 子查詢作為 WHERE 子句的一部分:首先執行子查詢,得到結果集。然後,將結果集與外層查詢的表進行比較,只有符合條件的行才會被返回。
  2. 子查詢作為 HAVING 子句的一部分:先對 GROUP BY 子句指定的列進行分組,然後執行子查詢。子查詢的結果集將作為條件與分組後的每個組進行比較,只有符合條件的組才會被返回。
  3. 子查詢作為 SELECT 子句的一部分:執行子查詢,得到結果集。然後,將結果集作為列值添加到外層查詢的結果集中。

需要註意的是,在實際應用中,子查詢的執行順序可能會受到資料庫系統的優化和查詢計劃的影響,但總體上仍然遵循“由里及外”的原則。同時,為了提高查詢效率,在編寫子查詢時,需要註意子查詢的可讀性和可維護性,避免過度嵌套和複雜的查詢邏輯。

4.什麼是SQL 語句中相關子查詢與非相關子查詢

3.1釋義

非相關子查詢

  • 子查詢可以獨立於外部查詢進行執行和評估。
  • 子查詢在外部查詢執行之前被執行一次。
  • 子查詢的結果不依賴於外部查詢的具體行數據。

相關子查詢

  • 子查詢的執行與外部查詢的每一行相關聯。
  • 子查詢需要根據外部查詢的每一行數據進行多次評估。
  • 子查詢中通常會引用外部查詢中的某些列。

3.2區別

相關子查詢和非相關子查詢主要有以下區別:

非相關子查詢

  1. 獨立執行:子查詢可以單獨執行,不依賴於外部查詢。
  2. 執行一次:子查詢在外部查詢處理之前執行一次。

相關子查詢

  1. 依賴外部查詢:子查詢的執行與外部查詢的每一行相關聯。
  2. 多次執行:子查詢會針對外部查詢的每一行都執行一次。

3.3判斷

可以通過以下幾個方面來判斷一個查詢是相關子查詢還是非相關子查詢:

  1. 子查詢是否依賴外部查詢的結果:相關子查詢的執行需要依賴外部查詢的每一行數據,而非相關子查詢則不依賴。
  2. 執行順序:非相關子查詢通常先執行子查詢,然後再執行外部查詢;相關子查詢則與外部查詢的執行過程交織在一起,子查詢會針對外部查詢的每一行多次執行。
  3. 子查詢中是否引用外部查詢的列:相關子查詢中通常會引用外部查詢的列,而非相關子查詢一般不會。

3.4示例

以下是相關子查詢和非相關子查詢的例子:

非相關子查詢:

  1. 獲取所有員工中工資大於平均工資的員工信息:
SELECT * FROM employees
WHERE salary > (SELECT AVG(salary) FROM employees);

相關子查詢:

  1. 獲取每個部門中工資最高的員工信息:
SELECT * FROM employees e1
WHERE salary = (SELECT MAX(salary) FROM employees e2 WHERE e2.department_id = e1.department_id);

以上,本期全部內容。

感謝閱讀。

按例,歡迎點擊此處關註我的個人公眾號,交流更多知識。


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

-Advertisement-
Play Games
更多相關文章
  • 痞子衡嵌入式半月刊: 第 98 期 這裡分享嵌入式領域有用有趣的項目/工具以及一些熱點新聞,農曆年分二十四節氣,希望在每個交節之日準時發佈一期。 本期刊是開源項目(GitHub: JayHeng/pzh-mcu-bi-weekly),歡迎提交 issue,投稿或推薦你知道的嵌入式那些事兒。 上期回顧 ...
  • 目錄Linux學習大綱命令提示符命令的格式路徑的分類文件的分類目錄的結構一些快捷鍵 Linux學習大綱 命令提示符 通常情況下,我們使用Linux都是在命令行環境下, 所以學習 Linux 的第一步需要瞭解 Linux 的命令提示符。 Linux命令提示符通常由用戶名、主機名和當前工作目錄組成。 [ ...
  • 1、下載必備安裝包 make、gcc(debian中可用build-essential包)、bc、linux-headers-$(uname -r)、dkms sudo apt install build-essential bc sudo apt install linux-headers-$(u ...
  • 目錄一、什麼是MongoDB的副本集二、副本集的架構三、副本集的成員四、部署副本集1、節點劃分2、安裝MongoDB2.1、下載解壓安裝包3、創建主節點3.1、創建存儲數據和日誌的目錄3.2、新建配置文件3.3、啟動節點服務4、創建副本節點4.1、創建存儲數據和日誌的目錄4.2、新建配置文件4.3、 ...
  • 0、首先確認是否安裝過MySQL yum list installed | grep mysql rpm -qa | grep mysql 若果有安裝,需要先刪除舊版本。yum remove mysql 一、通過官網下載tar壓縮包(或者直接下載RPM安裝包) 1.打開MySQL官網下載地址,選擇適 ...
  • 本文介紹基於Microsoft SQL Server軟體,實現資料庫表完整性約束、索引與視圖的創建、編輯與刪除等操作的方法~ ...
  • 前言 序列都是用create sequence命令創建的單行表,常用於為表的行生成唯一的標識符。 相關函數 函數 作用 nextval() 遞增序列並返回新值 currval() 返回最近一次用nextval()函數獲取的指定序列的值 lastval() 返回最近一次用nextval()函數獲取的任 ...
  • 1. 問題背景 2.27號凌晨生產環境MySQL備庫在執行備份期間出現因FLUSH TABLES WITH READ LOCK未釋放導致備庫複製延時拉大,慢日誌內看持鎖接近25分鐘未釋放。 版本: MySQL 5.7.21 PXB 2.4.18 慢查詢日誌: 備份腳本中的備份命令: mysql_ki ...
一周排行
    -Advertisement-
    Play Games
  • .Net8.0 Blazor Hybird 桌面端 (WPF/Winform) 實測可以完整運行在 win7sp1/win10/win11. 如果用其他工具打包,還可以運行在mac/linux下, 傳送門BlazorHybrid 發佈為無依賴包方式 安裝 WebView2Runtime 1.57 M ...
  • 目錄前言PostgreSql安裝測試額外Nuget安裝Person.cs模擬運行Navicate連postgresql解決方案Garnet為什麼要選擇Garnet而不是RedisRedis不再開源Windows版的Redis是由微軟維護的Windows Redis版本老舊,後續可能不再更新Garne ...
  • C#TMS系統代碼-聯表報表學習 領導被裁了之後很快就有人上任了,幾乎是無縫銜接,很難讓我不想到這早就決定好了。我的職責沒有任何變化。感受下來這個系統封裝程度很高,我只要會調用方法就行。這個系統交付之後不會有太多問題,更多應該是做小需求,有大的開發任務應該也是第二期的事,嗯?怎麼感覺我變成運維了?而 ...
  • 我在隨筆《EAV模型(實體-屬性-值)的設計和低代碼的處理方案(1)》中介紹了一些基本的EAV模型設計知識和基於Winform場景下低代碼(或者說無代碼)的一些實現思路,在本篇隨筆中,我們來分析一下這種針對通用業務,且只需定義就能構建業務模塊存儲和界面的解決方案,其中的數據查詢處理的操作。 ...
  • 對某個遠程伺服器啟用和設置NTP服務(Windows系統) 打開註冊表 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W32Time\TimeProviders\NtpServer 將 Enabled 的值設置為 1,這將啟用NTP伺服器功 ...
  • title: Django信號與擴展:深入理解與實踐 date: 2024/5/15 22:40:52 updated: 2024/5/15 22:40:52 categories: 後端開發 tags: Django 信號 松耦合 觀察者 擴展 安全 性能 第一部分:Django信號基礎 Djan ...
  • 使用xadmin2遇到的問題&解決 環境配置: 使用的模塊版本: 關聯的包 Django 3.2.15 mysqlclient 2.2.4 xadmin 2.0.1 django-crispy-forms >= 1.6.0 django-import-export >= 0.5.1 django-r ...
  • 今天我打算整點兒不一樣的內容,通過之前學習的TransformerMap和LazyMap鏈,想搞點不一樣的,所以我關註了另外一條鏈DefaultedMap鏈,主要調用鏈為: 調用鏈詳細描述: ObjectInputStream.readObject() DefaultedMap.readObject ...
  • 後端應用級開發者該如何擁抱 AI GC?就是在這樣的一個大的浪潮下,我們的傳統的應用級開發者。我們該如何選擇職業或者是如何去快速轉型,跟上這樣的一個行業的一個浪潮? 0 AI金字塔模型 越往上它的整個難度就是職業機會也好,或者說是整個的這個運作也好,它的難度會越大,然後越往下機會就會越多,所以這是一 ...
  • @Autowired是Spring框架提供的註解,@Resource是Java EE 5規範提供的註解。 @Autowired預設按照類型自動裝配,而@Resource預設按照名稱自動裝配。 @Autowired支持@Qualifier註解來指定裝配哪一個具有相同類型的bean,而@Resourc... ...