提取表和子查询的区别(derived table vs subqueries)

本文介绍了SQL中子查询与提取表(derived table)的区别及其使用场景。子查询常用于WHERE语句中进行条件筛选,也可用于从一个表中查询数据并插入另一个表。而提取表则主要用于FROM语句中,通过先创建临时表来简化查询过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

子查询,大家再熟悉不过了,例如

select employee_name
from employee
where employee_salary >

(select avg(employee_salary)
from employee
)

下面这也是一个子查询,没用到where语句。

INSERT INTO math_study_group(id, name)
SELECT id, name
FROM student_details WHERE subject= 'Math'


下面粗体部分是提取表(derived table)

delete from id  where Id not in

 (select min(id)

from

(select id,peopleId from people)as a 

GROUP by peopleId );

两者的区别就是

- derived tables are used in the FROM clause
- subqueries are used in the WHERE clause, but can also
be used to select from one table and insert into
another as we showed above

翻译过来就是

提取表是用在 from 语句中的。

子查询是用在 where语句中的,但是也可以用在从一张表中查询,然后插入到另一张表,就像上面展示的那个例子一样。



子查询子查询SQL查询中常见的两种形式,它们的主要区别在于返回的结果集结构以及用途的不同。 ### **子查询** - 子查询是一种嵌套在外部查询中的SELECT语句,其结果是一个**格型的数据集合**,即可以包含多行或多列。 - 结果通常用于与其他进行比较、联结或作为临时数据源参与进一步的操作。 - 使用场景包括创建派生Derived Table),将子查询的结果作为一个虚拟供外层查询引用。 例如: ```sql SELECT * FROM (SELECT column_name FROM table_name WHERE condition) AS derived_table; ``` --- ### **行子查询** - 行子查询也是一种嵌套的SELECT语句,但它只返回单一行或者单一值(标量子查询的一种特殊情况)。如果返回了不止一条记录,则可能会导致错误。 - 常见于需要从数据库中提取特定字段的一个唯一值,并将其直接用于条件判断的情况,如`WHERE`子句中的IN操作符等场合。 示例代码片段如下所示: ```sql SELECT employee_id, salary FROM employees WHERE department_id = ( SELECT department_id FROM departments WHERE location_id = 1700); ``` 在这个例子当中 `(SELECT ...)` 就构成了一个典型的行子查询部分 。它只会选取对应location下的某个部门编号 ,然后依据该编号继续在外围查找符合条件的所有雇员信息列出来 。 ### 总结对比 | 特性 | 子查询 | 行子查询 | |------------------|-----------------------------------|----------------------------------| | 返回内容 | 多行多列 | 单一数值 或者 单独的一行 | | 应用范围 | 可充当衍生 | 主要在where 子句内做条件限制 |
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值