嵌套子查询、关联子查询和连接操作的区别
admin
2023-07-30 20:15:43
0

连接操作

连接操作是一种二进制操作,用于根据两个或多个表之间的共同字段来合并数据或行。INNER JOIN, LEFT JOIN, RIGHT JOIN, FULL JOIN是不同类型的联接。

例子 –

tb_orders (OrderID, CustomerID, OrderDate);
tb_customers (CustomerID, CustomerName, ContactName, Country);

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

SELECT * FROM tb_customers JOIN tb_orders 
ON tb_orders.CustomerID=tb_customers.CustomerID;

子查询

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

嵌套查询 –
在嵌套查询中,内部查询首先运行,而且只运行一次。外层查询用内层查询的结果来执行。因此,内层查询被用于执行外层查询。
例子 –

tb_customers (OrderID, CustomerID, OrderDate);
tb_orders (CustomerID, CustomerName, ContactName, Country);

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

SELECT * FROM tb_customers WHERE 
CustomerID IN (SELECT CustomerID FROM tb_orders);

关联查询
在关联查询中,首先执行外层查询,对于每一个外层查询行,都执行内层查询。因此,内部查询使用外部查询的值。
例子 –

SELECT * FROM tb_customers where 
EXISTS (SELECT CustomerID FROM tb_orders 
WHERE tb_orders.CustomerID=tb_customers.CustomerID);

联合操作和子查询的应用

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

当我们想从多个表中获取数据时,那么可以使用连接操作。
例子。让我们考虑两个关系,即 –

tb_employee (eid, ename, esalary, did);
tb_department (did, dname, city);

现在,需要找到在上海工作的雇员姓名和部门名称。这里,从 tb_employee 表中显示eName,从tb_department表中显示dName。因此,使用Join操作。

SELECT e.eName, d.dName from tb_employee e, 
tb_department d 
where e.dId=d.dId and d.city="上海";

当想从一个表中获取数据,而条件是基于另一个表的时候,可以使用Join或Subquery。假设要找出在上海工作的雇员姓名。在这里,从tb_employee 表中只显示eName,因此可以使用Join操作或Subquery。
使用连接操作

SELECT e.eName from tb_employee e, tb_department d 
where e.dId=d.dId and d.city="上海";

使用子查询

SELECT eName from tb_employee 
where dId=(SELECT dId from tb_department where city="上海");

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

嵌套查询、相关查询和连接操作之间的区别 –

参数 嵌套查询 相关查询 联合操作
定义 在嵌套查询中,一个查询被写入另一个查询中,内部查询的结果被用于执行外部查询。 在关联查询中,一个查询被嵌套在另一个查询中,内部查询使用外部查询的值。 联接操作用于根据两个或多个表之间的共同字段将数据或行结合起来。INNER JOIN, LEFT JOIN, RIGHT JOIN, FULL JOIN是不同类型的联接。
方法 自下而上的方法,即首先运行内部查询,而且只运行一次。外层查询用内层查询的结果来执行。 从上到下的方法,即先执行外层查询,对于每一个外层查询行都执行内层查询。 这基本上是满足一个条件的交叉乘积。
依赖性 内部查询的执行不依赖于外部查询。 内部查询依赖于外部查询。 不存在内查询或外查询。因此,不存在依赖性。
性能 表现比关联查询好,但比联合操作慢。 比嵌套查询和连接操作都慢,因为每一个外部查询都要执行内部查询。 通过使用连接操作,我们最大限度地减轻了数据库的计算负担,但是连接操作被服务器优化得更好,所以使用连接操作的查询的检索时间几乎总是比子查询的检索时间快。

相关内容

热门资讯

Mobi、epub格式电子书如... 在wps里全局设置里有一个文件关联,打开,勾选电子书文件选项就可以了。
定时清理删除C:\Progra... C:\Program Files (x86)下面很多scoped_dir开头的文件夹 写个批处理 定...
scoped_dir32_70... 一台虚拟机C盘总是莫名奇妙的空间用完,导致很多软件没法再运行。经过仔细检查发现是C:\Program...
500 行 Python 代码... 语法分析器描述了一个句子的语法结构,用来帮助其他的应用进行推理。自然语言引入了很多意外的歧义,以我们...
小程序支付时提示:appid和... [Q]小程序支付时提示:appid和mch_id不匹配 [A]小程序和微信支付没有进行关联,访问“小...
pycparser 是一个用... `pycparser` 是一个用 Python 编写的 C 语言解析器。它可以用来解析 C 代码并构...
微信小程序使用slider实现... 众所周知哈,微信小程序里面的音频播放是没有进度条的,但最近有个项目呢,客户要求音频要有进度条控制,所...
65536是2的几次方 计算2... 65536是2的16次方:65536=2⁶ 65536是256的2次方:65536=256 6553...
Apache Doris 2.... 亲爱的社区小伙伴们,我们很高兴地向大家宣布,Apache Doris 2.0.0 版本已于...
项目管理和工程管理的区别 项目管理 项目管理,顾名思义就是专注于开发和完成项目的管理,以实现目标并满足成功标准和项目要求。 工...