子查询辨析

 一好友夜读《数据库查询优化器的艺术》,至19页,看到原文如下:

列子查询。子查询返回的结果集类型是一条单一元组(return a single row)。

行子查询。子查询返回的结果集类型是一个单一列(return a single column)。

问我,是否这两个概念反了?  心有感念,谢谢提醒,所以特连夜写此短文,以慰好友之善意,不枉真情一片。

说明:从结果集的角度看,书中还写了:标量子查询/表子查询,加上上面2种,共4种。

 

特别感谢好友反复提醒,辨析至此。此时代,能直言者,善莫大焉,不易。致谢玉辉!

 

辨析:

1 首先,概念是从结果集的特征角度去说的。

2 其次,如果从面向的对象角度去看,这么分其实不适用。更为适宜(指在SQL中可以出现的方式)的提法,应该是:

从结果集的角度看,子查询分为四类:

标量子查询。子查询返回的结果集类型是一个简单值(return a scalara single value)。

单行单列子查询。子查询返回的结果集类型是零条或一条单元组(return a zero or single row,but only a column)。相似于标量子查询,但可能返回零条元组。

多行单列子查询。子查询返回的结果集类型是多条元组但只有一个简单列(return multiple rows,but only a column)。

表子查询。子查询返回的结果集类型是一个表(多行多列)(returna tableone or more rows of one or more columns)。


3 如此辨析,原文确实不对。

4 实践中,多用的概念是“标量子查询”,“标量子查询”经常被优化,如MIN/MAX的优化。其他的则不作为特殊情况特别处理,是否优化需要看具体情况。

5 可以参考得资料:

http://dcx.sybase.com/1101/en/dbusage_en11/ug-subquery-s-4318996.html

http://www.comp.nus.edu.sg/~ooibc/courses/sql/dml_query_subquery.htm

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值