子查询辨析

来源:互联网 发布:西班牙 葡萄牙 知乎 编辑:程序博客网 时间:2024/06/08 04:29
 一好友夜读《数据库查询优化器的艺术》,至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

0 0
原创粉丝点击