列子查询。子查询返回的结果集类型是一条单一元组(return a single row)。
行子查询。子查询返回的结果集类型是一个单一列(return a single column)。
问我,是否这两个概念反了? 心有感念,谢谢提醒,所以特连夜写此短文,以慰好友之善意,不枉真情一片。
说明:从结果集的角度看,书中还写了:标量子查询/表子查询,加上上面2种,共4种。
特别感谢好友反复提醒,辨析至此。此时代,能直言者,善莫大焉,不易。致谢玉辉!
辨析:
1 首先,概念是从结果集的特征角度去说的。
2 其次,如果从面向的对象角度去看,这么分其实不适用。更为适宜(指在SQL中可以出现的方式)的提法,应该是:
从结果集的角度看,子查询分为四类:
标量子查询。子查询返回的结果集类型是一个简单值(return a scalar,a single value)。
单行单列子查询。子查询返回的结果集类型是零条或一条单元组(return a zero or single row,but only a column)。相似于标量子查询,但可能返回零条元组。
多行单列子查询。子查询返回的结果集类型是多条元组但只有一个简单列(return multiple rows,but only a column)。
表子查询。子查询返回的结果集类型是一个表(多行多列)(returna table,one 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