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.mzph.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…