什麼是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
  • 移動開發(一):使用.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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...