SQL 查詢方式比較:子查詢與自連接

在 SQL 中,子查詢和自連接是兩種常見的查詢方式,它們的功能雖然可以相同,但實現的方式不同。本文通過具體示例,深入探討這兩種查詢方式,并配合數據展示,幫助大家理解它們的使用場景和差異。

數據示例

假設我們有以下的 Customers 表,更新后的數據如下:

cust_id

cust_name

cust_contact

1

Alice

123-456-7890

2

Bob

234-567-8901

3

Charlie

345-678-9012

4

Alice

456-789-0123

5

Jim Jones

567-890-1234

6

Jim Jones

678-901-2345

7

Alice

678-901-2345

在這個表中,cust_name 表示顧客的名字,cust_contact 表示顧客的聯系電話。

查詢目標

我們要找出所有與顧客 "Jim Jones" 同名的其他顧客信息,即找出名字為 "Jim Jones" 的所有記錄。

1. 使用子查詢

SELECT cust_id, cust_name, cust_contact
FROM Customers
WHERE cust_name = (SELECT cust_nameFROM CustomersWHERE cust_contact = '567-890-1234');

  • 執行步驟
    • 內層子查詢:SELECT cust_name FROM Customers WHERE cust_contact = '567-890-1234'?返回?cust_name?為 "Jim Jones"。
    • 外層查詢:通過?cust_name = 'Jim Jones'?來查找所有名字為 "Jim Jones" 的顧客記錄。
  • 輸出結果

cust_id

cust_name

cust_contact

5

Jim Jones

567-890-1234

6

Jim Jones

678-901-2345

查詢結果返回了兩條記錄,分別是 cust_id = 5 和 cust_id = 6。

2. 使用自連接

SELECT c1.cust_id, c1.cust_name, c1.cust_contact
FROM Customers AS c1, Customers AS c2
WHERE c1.cust_name = c2.cust_name
AND c2.cust_contact = '567-890-1234';

  • 執行步驟
    • c1?和?c2?都是?Customers?表的別名。
    • 通過?c1.cust_name = c2.cust_name?確保名字相同。
    • 通過?c2.cust_contact = '567-890-1234'?找到?cust_contact?為?'567-890-1234'?的顧客(即 "Jim Jones")。
    • 返回所有名字為 "Jim Jones" 的顧客記錄。
  • 輸出結果

cust_id

cust_name

cust_contact

5

Jim Jones

567-890-1234

6

Jim Jones

678-901-2345

同樣地,查詢結果返回了兩條記錄,分別是 cust_id = 5 和 cust_id = 6。

3. 子查詢與自連接的比較

  • 子查詢:使用子查詢時,內層查詢先找出 "Jim Jones" 的名字,然后外層查詢通過這個名字查找所有相同名字的顧客。適合結構簡單的查詢。
  • 自連接:使用自連接時,通過將同一個表連接到自己,可以更靈活地進行數據比較和匹配。適合需要在同一表中查找多條相關數據的場景。

結論

無論是使用子查詢還是自連接,都能夠得到相同的結果,且 Jim Jones 有兩條記錄。通過這個案例,我們可以看出:

  • 子查詢?更加簡潔,適合查詢簡單的單一條件。
  • 自連接?更適合處理復雜的關系,尤其是同一表中的多條記錄之間的比較。

在實際應用中,可以根據查詢的復雜度和性能需求選擇合適的方式。

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

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

相關文章

html基礎-認識html

1.什么是html html是瀏覽器可以識別的的標記語言&#xff0c;我們在瀏覽器瀏覽的網頁就是一個個的html文檔 <!DOCTYPE html> <html> <head> <meta charset"utf-8"> <title>認識html</title> </head> <body><h1…

linux 無網絡安裝mysql

下載地址 通過網盤分享的文件&#xff1a;mysql-5.7.33-linux-glibc2.12-x86_64.tar.gz 鏈接: https://pan.baidu.com/s/1qm48pNfGYMqBGfoqT3hxPw?pwd0012 提取碼: 0012 安裝 解壓 tar -zxvf mysql-5.7.33-linux-glibc2.12-x86_64.tar.gz mv /usr/mysql-5.7.33-linux-glibc2.1…

利用高德API獲取整個城市的公交路線并可視化(七)

本篇文章是對我們從高德拿到的公交/地鐵的json文件的精細化處理的一個深入解析&#xff0c;通過對這些原始數據進行詳細的清洗、轉換和分析&#xff0c;我們通過對數據的質量和可用性的提升&#xff0c;來為后續的數據精細化處理和研究做基礎數據的支撐&#xff0c;從而為后續的…

OGV格式如何轉換成MP4格式?五款視頻格式轉換工具

在數字時代&#xff0c;視頻已成為我們日常生活、工作和學習中不可或缺的一部分。而不同的設備和平臺往往支持不同的視頻格式&#xff0c;這就需要對視頻進行格式轉換。 OGV&#xff08;Ogg Video File&#xff09;是一種使用OGG開源格式的容器&#xff0c;用于存儲帶或不帶音頻…

番外篇 | Hyper-YOLO:超圖計算與YOLO架構相結合成為目標檢測新的SOTA !

前言:Hello大家好,我是小哥談。Hyper-YOLO,該方法融合了超圖計算以捕捉視覺特征之間復雜的高階關聯。傳統的YOLO模型雖然功能強大,但其頸部設計存在局限性,限制了跨層特征的融合以及高階特征關系的利用。Hyper-YOLO在骨干和頸部的聯合增強下,成為一個突破性的架構。在COC…

C語言小練習-打印字母倒三角

編寫一個程序&#xff0c;在用戶輸入某個大寫字母后&#xff0c;產生一個金字塔圖案。 #include <stdio.h>int main(int argc,char *argv[]) {char ch; loop:printf("請輸入大寫字母&#xff01;\n");scanf("%c",&ch);getchar();if(ch < A ||…

FutureCompletableFuture實戰

1. Callable&Future&FutureTask介紹 直接繼承Thread或者實現Runnable接口都可以創建線程&#xff0c;但是這兩種方法都有一個問題就是&#xff1a;沒有返回值&#xff0c;也就是不能獲取執行完的結果。因此java1.5就提供了Callable接口來實現這一場景&#xff0c;而Fu…

什么是MyBatis

MyBatis是一款優秀的持久層框架&#xff0c;它支持定制化SQL、存儲過程以及高級映射。以下是關于MyBatis的詳細介紹&#xff1a; 一、MyBatis的起源與發展 MyBatis本是Apache的一個開源項目iBATIS&#xff0c;2010年這個項目由Apache遷移到了Google Code&#xff0c;并且改名…

阿爾茨海默癥數據集,使用yolo,voc,coco格式對2013張原始圖片進行標注,可識別輕微,中等和正常的癥狀

阿爾茨海默癥數據集,使用yolo&#xff0c;voc&#xff0c;coco格式對2013張原始圖片進行標注&#xff0c;可識別輕微&#xff0c;中等&#xff0c;嚴重和正常的癥狀 數據集分割 訓練組100&#xff05; 2013圖片 有效集&#xff05; 0圖片 測試集&#xf…

[代碼隨想錄21二叉樹]二叉樹的修改和改造,修剪二叉樹,將有序數組轉為二叉搜索樹

前言 二叉樹章節最后的題目了&#xff0c;就是對搜索二叉樹的改造&#xff0c; 題目鏈接 669. 修剪二叉搜索樹 - 力扣&#xff08;LeetCode&#xff09; 108. 將有序數組轉換為二叉搜索樹 - 力扣&#xff08;LeetCode&#xff09; 一、修剪二叉搜索樹 思路&#xff1a;等會…

Android 13 Aosp SystemServer功能裁剪(PackageManager.hasSystemFeature())

系統定制,裁剪Wifi,bt等模塊 UI部分可參考: SystemUI 隱藏下拉快捷面板部分模塊(wifi,bt,nfc等)入口 Android系統啟動后Zygote進程會forkSystemServer進程。SystemServer啟動Andorid服務. frameworks/base/services/java/com/android/server/SystemServer.java if (contex…

Scala的惰性求值:深入理解與實踐

在編程中&#xff0c;我們經常需要處理那些計算成本高昂或者可能永遠不會用到的值。在這種情況下&#xff0c;惰性求值&#xff08;Lazy Evaluation&#xff09;是一種非常有用的策略。它允許我們推遲計算&#xff0c;直到這些值真正需要被使用。Scala&#xff0c;作為一種多功…

事務-介紹與操作四大特性

一.數據準備&#xff1a; 1.員工表&#xff1a; -- 員工管理 create table tb_emp (id int unsigned primary key auto_increment comment ID,username varchar(20) not null unique comment 用戶名,password varchar(32) default 123456 comment 密碼,n…

Golang學習歷程【第一篇 入門】

Golang學習歷程【第一篇 入門Hello World】 1. 學習文檔2. Window 本地安裝Go2.1 安裝2.2 驗證 3. 開發環境——VsCode3.1 VsCode 安裝3.2 安裝插件3.2.1 language 語言漢化插件安裝3.2.2 Go插件安裝 4. Hello World 入門4.1 建工程4.2 創建項目文件4.3 編寫Hello World程序4.4…

微積分復習筆記 Calculus Volume 2 - 4.3 Separable Equations

4.3 Separable Equations - Calculus Volume 2 | OpenStax

Day43 動態規劃part10

300.最長遞增子序列 今天開始正式子序列系列,本題是比較簡單的,感受感受一下子序列題目的思路。 視頻講解:動態規劃之子序列問題,元素不連續!| LeetCode:300.最長遞增子序列_嗶哩嗶哩_bilibili 代碼隨想錄 class Solution {public int lengthOfLIS(int[] nums) {int[] …

Doris SQL 特技

group_concat description Syntax VARCHAR GROUP_CONCAT([DISTINCT] VARCHAR str[, VARCHAR sep] [ORDER BY { col_name | expr} [ASC | DESC]) 該函數是類似于 sum() 的聚合函數&#xff0c;group_concat 將結果集中的多行結果連接成一個字符串。第二個參數 sep 為字符串之…

Metaploit-永恒之藍漏洞利用

1&#xff1a;Metaploit介紹   本次測試主要是利用永恒之藍漏洞對windows7進行控制利用&#xff0c;掌握Metaploit工具的使用&#xff0c;知道永恒之藍的漏洞利用原理。永恒之藍是在Windows的SMB服務處理SMB v1請求時發生的漏洞&#xff0c;這個漏洞導致攻擊者在目標系統上可…

電容Q值、損耗角、應用

電容發熱的主要原因&#xff1a;紋波電壓 當電容兩端施加紋波電壓時&#xff0c;電容承受的是變化的電壓&#xff0c;由于電容內部存在寄生電阻&#xff08;ESR&#xff09;和寄生電感&#xff08;ESL&#xff09;.因此電容會有能量損耗&#xff0c;從而產生熱量&#xff0c;這…

css三角形源碼

效果圖 如下圖所示&#xff0c;讓一個 div 變成三角形&#xff0c;并且可隨意更改大小&#xff0c; 本文提供了可運行示例源碼&#xff0c;直接復制即可。 實現源碼 建議創建一個 demo.html 文件&#xff0c;一鍵復制代碼運行。 <style> .div{width: 0px;height: 0p…