热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

深入解析嵌套子查询、关联子查询与连接操作的差异及应用场景

嵌套子查询、相关子查询和连接操作的区别原文:https://www . geesforgeks . org/嵌套子查询相关子查询

嵌套子查询、相关子查询和连接操作的区别

原文:https://www . geesforgeks . org/嵌套子查询相关子查询和连接操作之间的差异/

Join 操作:
Join 操作是一种二进制操作,用于根据两个或多个表之间的公共字段来组合它们的数据或行。内部连接、左连接、右连接、完全连接是不同类型的连接。

示例–

Orders (OrderID, CustomerID, OrderDate);
Customers (CustomerID, CustomerName, ContactName, Country);

查找已订购客户的详细信息。

SELECT * from Customers JOIN Orders
ON Orders.CustomerID=Customers.CustomerID;

子查询
当一个查询包含在另一个查询中时,外部查询称为主查询,内部查询称为子查询。


  • Nested Query –
    In Nested Query,  Inner query runs first, and only once. Outer query is executed with result from Inner query.Hence, Inner query is used in execution of Outer query.
    Example –

    sql
    Orders (OrderID, CustomerID, OrderDate);
    Customers (CustomerID, CustomerName, ContactName, Country);

    查找已订购客户的详细信息。

    sql
    SELECT * FROM Customers WHERE
    CustomerID IN (SELECT CustomerID FROM Orders);


  • Correlated Query –
    In Correlated Query,  Outer query executes first and for every Outer query row Inner query is executed. Hence, Inner query uses values from Outer query.
    Example –

    sql
    Orders (OrderID, CustomerID, OrderDate);
    Customers (CustomerID, CustomerName, ContactName, Country);

    查找已订购客户的详细信息。

    sql
    SELECT * FROM Customers where
    EXISTS (SELECT CustomerID FROM Orders
    WHERE Orders.CustomerID=Customers.CustomerID);


连接操作和子查询的应用:
要了解嵌套子查询、相关子查询和连接操作之间的区别,首先我们必须了解在哪里使用子查询以及在哪里使用连接。


  • When we want to get data from multiple tables we use join operation.
    Example: Let’s consider two relations as:

    sql
    Employee (eId, eName, eSalary, dId);
    Department (dId, dName, dLocation);

    现在,我们必须找到在伦敦工作的员工姓名和部门名称。在这里,我们必须显示员工表中的姓名和部门表中的姓名。因此,我们必须使用连接操作。

    sql
    SELECT e.eName, d.dName from Employee e,
    Department d
    where e.dId=d.dId and d.dLocation="London";


  • When we want to get data from one table and condition is based on another table we can either use Join or Subquery. Now, we have to find employee names working at London Location.

    这里,我们必须只显示雇员表中的 eName,因此我们可以使用连接操作或子查询
    使用连接操作–

    sql
    SELECT e.eName from Employee e, Department d
    where e.dId=d.dId and d.dLocation="London";

    使用子查询–

    sql
    SELECT eName from Employee
    where dId=(SELECT dId from Department where dLocation="London");

    了解了联接与子查询的基本区别之后,现在我们将了解嵌套子查询、相关子查询和联接操作之间的区别。


嵌套查询、关联查询和连接操作的区别:





































因素嵌套查询相关查询加入操作
定义在嵌套查询中,一个查询写在另一个查询中,内部查询的结果用于外部查询的执行。在相关查询中,一个查询嵌套在另一个查询中,内部查询使用外部查询的值。联接操作用于根据两个或多个表之间的公共字段组合它们的数据或行。内部连接、左连接、右连接、完全连接是不同类型的连接。
方法自下而上的方法,即内部查询首先运行,并且只运行一次。使用内部查询的结果执行外部查询。自上而下的方法,即首先执行外部查询,对于每个外部查询行,执行内部查询。它基本上是满足一个条件的叉积。
属国内部查询的执行不依赖于外部查询。内部查询依赖于外部查询。没有内部查询或外部查询。因此,不存在依赖性。
表演性能优于相关查询,但慢于连接操作。对于每个外部查询,执行嵌套查询和连接操作的速度都比执行内部查询的速度慢。通过使用联接,我们最大限度地增加了数据库的计算负担,但是服务器更好地优化了联接,因此使用联接的查询检索时间几乎总是比子查询快。


推荐阅读
  • 本文深入探讨 MyBatis 中动态 SQL 的使用方法,包括 if/where、trim 自定义字符串截取规则、choose 分支选择、封装查询和修改条件的 where/set 标签、批量处理的 foreach 标签以及内置参数和 bind 的用法。 ... [详细]
  • 深入理解 SQL 视图、存储过程与事务
    本文详细介绍了SQL中的视图、存储过程和事务的概念及应用。视图为用户提供了一种灵活的数据查询方式,存储过程则封装了复杂的SQL逻辑,而事务确保了数据库操作的完整性和一致性。 ... [详细]
  • 本文介绍了如何通过 Maven 依赖引入 SQLiteJDBC 和 HikariCP 包,从而在 Java 应用中高效地连接和操作 SQLite 数据库。文章提供了详细的代码示例,并解释了每个步骤的实现细节。 ... [详细]
  • Explore how Matterverse is redefining the metaverse experience, creating immersive and meaningful virtual environments that foster genuine connections and economic opportunities. ... [详细]
  • 技术分享:从动态网站提取站点密钥的解决方案
    本文探讨了如何从动态网站中提取站点密钥,特别是针对验证码(reCAPTCHA)的处理方法。通过结合Selenium和requests库,提供了详细的代码示例和优化建议。 ... [详细]
  • 1:有如下一段程序:packagea.b.c;publicclassTest{privatestaticinti0;publicintgetNext(){return ... [详细]
  • 本文详细介绍了如何在Linux系统上安装和配置Smokeping,以实现对网络链路质量的实时监控。通过详细的步骤和必要的依赖包安装,确保用户能够顺利完成部署并优化其网络性能监控。 ... [详细]
  • 本文介绍了如何在具备多个IP地址的FTP服务器环境中,通过动态地址端口复用和地址转换技术优化网络配置。重点讨论了2Mb/s DDN专线连接、Cisco 2611路由器及内部网络地址规划。 ... [详细]
  • 数据库内核开发入门 | 搭建研发环境的初步指南
    本课程将带你从零开始,逐步掌握数据库内核开发的基础知识和实践技能,重点介绍如何搭建OceanBase的开发环境。 ... [详细]
  • 本文详细介绍了Akka中的BackoffSupervisor机制,探讨其在处理持久化失败和Actor重启时的应用。通过具体示例,展示了如何配置和使用BackoffSupervisor以实现更细粒度的异常处理。 ... [详细]
  • DNN Community 和 Professional 版本的主要差异
    本文详细解析了 DotNetNuke (DNN) 的两种主要版本:Community 和 Professional。通过对比两者的功能和附加组件,帮助用户选择最适合其需求的版本。 ... [详细]
  • 在使用 DataGridView 时,如果在当前单元格中输入内容但光标未移开,点击保存按钮后,输入的内容可能无法保存。只有当光标离开单元格后,才能成功保存数据。本文将探讨如何通过调用 DataGridView 的内置方法解决此问题。 ... [详细]
  • 本文详细记录了在基于Debian的Deepin 20操作系统上安装MySQL 5.7的具体步骤,包括软件包的选择、依赖项的处理及远程访问权限的配置。 ... [详细]
  • 解决Element UI中Select组件创建条目为空时报错的问题
    本文介绍如何在Element UI的Select组件中使用allow-create属性创建新条目,并处理创建条目为空时出现的错误。我们将详细说明filterable属性的必要性,以及default-first-option属性的作用。 ... [详细]
  • 本文介绍如何使用Python进行文本处理,包括分词和生成词云图。通过整合多个文本文件、去除停用词并生成词云图,展示文本数据的可视化分析方法。 ... [详细]
author-avatar
瑶2012瑶_881
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有