子查询
SELECT * FROM T 中就可以用子查询来代替表T,比如SELECT * FROM(SELECT * FROM T2 where FAge<30)
SELECT语句可以嵌套在其他语句中,比如SELECT,INSERT,UPDATE以及DELETE等,这些被嵌套的SELECT语句就称为子查询,可以这么说当一个查询依赖于另外一个查询结果时就可以使用子查询。
单值子查询(标量子查询)
单值子查询的语法和普通的SELECT语句没有什么不同,唯一的限制就是子查询的返回值必须只有一行记录,而且只能有一个列。列值子查询
与标量子查询不同,列值子查询可以返回一个多行多列的结果集。这样的子查询又被称为表子查询,表子查询可以看作一个临时的表,表子查询可以用在SELECT语句的FROM子句中、INSERT语句、连接、IN 子句等很多场合。
SELECT FId,FName, ( SELECT MAX(FYearPublished) FROM T_Book WHERE T_Book. FCategoryId= T_Category.FId ) FROM T_Category
这个SELECT语句首先检索FId、FName两个字段,而第三个字段不是一个列二是一个子查询。这个子查询位于主查询的内部,它返回一类图书的最新出版年份。因为聚合函数仅返回一行记录,所以这满足标量子查询的条件。通过WHERE语句,这个子查询也被连接到外部的SELECT查询语句中,因为这个连接,MAX(FYearPublished)将返回每类图书的最新出版年份。
需要注意的是这里的子查询与前边讲的有所不同,前面用到的子查询没有依赖于外部查询中的字段,也就是可以直接单独执行。SELECT FReaderId FROM T_ReaderFavorite WHERE FCategoryId= ( SELECT FId FROM T_Category WHERE FName='Story' )