数据库应用技术第六章20078.pptVIP

  • 2
  • 0
  • 约3.35万字
  • 约 118页
  • 2017-12-23 发布于上海
  • 举报
数据库应用技术第六章20078

* 天津大学计算机基础教学部 * 二、使用EXISTS的子查询 使用EXISTS的子查询总是返回TRUE或FALSE值. EXISTS关键字前面不能有任何列名、常量或其它表达 式,而且其SELECT清单是一个星号(*)。 例6-67:有两种方法可以找到与出版商住在同一城市中的作者。 代码如下: SELECT au_lname, au_fname FROM Authors WHERE city =ANY (SELECT city FROM Publishers) 或者 SELECT au_lname, au_fname FROM Authors WHERE EXISTS (SELECT * FROM Publishers     WHERE Authors.city = Publishers.city) * 天津大学计算机基础教学部 * 三、子查询的限制 在使用子查询时,SQL Server限制使用某些方法和技 巧,并强制实现一定的标准。通常,子查询有以下的几项 限制: (1)用比较操作符引入的子查询的选择列清单只能含 有一个列。 (2)外层查询的WHERE子句所用的列必须与内层查询 的选择列清单中的列(类型)相容。 (3)DISTINCT关键字不能用于带有GROUP BY子句的 子查询中。 (4)ORDER BY、GROUP BY子句和INTO关键字不能 用于子查询,因为子查询不能内部处理其结果。 (5)由子查询产生的视图不能更新。 * 天津大学计算机基础教学部 * 四、嵌套子查询 包含一个或一个以上子查询的SELECT语句称为嵌套查询。SQL Server并不限制在SELECT、INSERT、UPDATE或DELETE语句里可以有多少个子查询。 例6-68:显示出Net Etiquette这本书的作者的名字。 代码如下: SELECT Author Name =SUBSTRING (AuFname,1,1) + . +AuLname FROM Authors WHERE AuId IN (SELECT AuId FROM TitleAuthor     WHERE TitleId = (SELECT TitleId   FROM Titles     WHERE Title =Net Etiquette)) * 天津大学计算机基础教学部 * 例6-69:返回所有写过business书的作者的名字。 代码如下: SELECT ‘Author ID’ =AuId, Name= SUBSTRING (AuFname,1,1) +. +AuLname FROM Authors WHERE AuId IN (SELECT AuId   FROM TitleAuthor     WHERE TitleId IN (SELECT TitleId   FROM Titles     WHERE Type =business)) * 天津大学计算机基础教学部 * 五、相关子查询 相关子查询的计算依赖于外层查询。在相关子查询中, WHERE子句引用外层查询的FROM子句中的一个表。这时,系统将外层查询指定的表里的每一行计算一次内层查询。如果相关子查询与主查询是同一个表上实现的,SQL Server会要求使用表的别名。 例6-70:显示出Titles表的Advance值大于同类书的Advance平均值的所有书的名字及类型。 代码如下: SELECT Title, Type FROM Titles t1 WHERE t1.Advance (SELECT AVG(Advance) FROM Titles t2 JOIN t1ON t1.Type = t2.Type) * 天津大学计算机基础教学部 * 例6-71:利用比较操作符查询销量小于同一本书

文档评论(0)

1亿VIP精品文档

相关文档