热门标签 | 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");

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


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





































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


推荐阅读
  • 选择适合生产环境的Docker存储驱动
    本文旨在探讨如何在生产环境中选择合适的Docker存储驱动,并详细介绍不同Linux发行版下的配置方法。通过参考官方文档和兼容性矩阵,提供实用的操作指南。 ... [详细]
  • 本文详细介绍如何利用已搭建的LAMP(Linux、Apache、MySQL、PHP)环境,快速创建一个基于WordPress的内容管理系统(CMS)。WordPress是一款流行的开源博客平台,适用于个人或小型团队使用。 ... [详细]
  • 反向投影技术主要用于在大型输入图像中定位特定的小型模板图像。通过直方图对比,它能够识别出最匹配的区域或点,从而确定模板图像在输入图像中的位置。 ... [详细]
  • Python处理Word文档的高效技巧
    本文详细介绍了如何使用Python处理Word文档,涵盖从基础操作到高级功能的各种技巧。我们将探讨如何生成文档、定义样式、提取表格数据以及处理超链接和图片等内容。 ... [详细]
  • 本文详细介绍了如何在 MySQL 中授予和撤销用户权限。包括创建用户、赋予不同级别的权限(如表级、数据库级、服务器级)、使权限生效、查看用户权限以及撤销权限的方法。此外,还提供了常见错误及其解决方法。 ... [详细]
  • 目录一、salt-job管理#job存放数据目录#缓存时间设置#Others二、returns模块配置job数据入库#配置returns返回值信息#mysql安全设置#创建模块相关 ... [详细]
  • 本文详细介绍了优化DB2数据库性能的多种方法,涵盖统计信息更新、缓冲池调整、日志缓冲区配置、应用程序堆大小设置、排序堆参数调整、代理程序管理、锁机制优化、活动应用程序限制、页清除程序配置、I/O服务器数量设定以及编入组提交数调整等方面。通过这些技术手段,可以显著提升数据库的运行效率和响应速度。 ... [详细]
  • 本文深入探讨了SQL数据库中常见的面试问题,包括如何获取自增字段的当前值、防止SQL注入的方法、游标的作用与使用、索引的形式及其优缺点,以及事务和存储过程的概念。通过详细的解答和示例,帮助读者更好地理解和应对这些技术问题。 ... [详细]
  • This pull request introduces the ability to provide comprehensive paragraph configurations directly within the Create Note and Create Paragraph REST endpoints, reducing the need for additional configuration calls. ... [详细]
  • 本文介绍如何在SQL Server中创建动态SQL存储过程,并提供详细的代码实例和解释。通过这种方式,可以更灵活地处理查询条件和参数。 ... [详细]
  • 本文探讨了使用C#在SQL Server和Access数据库中批量插入多条数据的性能差异。通过具体代码示例,详细分析了两种数据库的执行效率,并提供了优化建议。 ... [详细]
  • 本文介绍了一个SQL Server自定义函数,用于从字符串中提取仅包含数字和小数点的子串。该函数通过循环删除非数字字符来实现,并附带创建测试表、存储过程以演示其应用。 ... [详细]
  • 深入解析MySQL中的七种JOIN查询
    本文详细介绍了MySQL中常用的七种JOIN查询方法,包括内连接、左外连接、右外连接、全外连接以及排除连接等,并通过实例进行说明。 ... [详细]
  • 本文探讨了如何在Classic ASP中实现与PHP的hash_hmac('SHA256', $message, pack('H*', $secret))函数等效的哈希生成方法。通过分析不同实现方式及其产生的差异,提供了一种使用Microsoft .NET Framework的解决方案。 ... [详细]
  • Java多线程实现:从1到100分段求和并汇总结果
    本文介绍如何使用Java编写一个程序,通过10个线程分别计算不同区间的和,并最终汇总所有线程的结果。每个线程负责计算一段连续的整数之和,最后将所有线程的结果相加。 ... [详细]
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社区 版权所有