的,那么用一般的条件查询就可以,但有时条件的值并没有明确给出,而需要进一步查询才可得到,这时就可用sql提供的嵌套查询,嵌套查询是指在select命令语句中包含另一个select命令语句,基本形式如下: Select <表1列名表> from <表名1> where <表1的关联字段><比较运算符>(selec <表2列名表> from <表名2> where <表2的查询条件>)
1、 一般的嵌套查询
嵌套查询:
? 嵌套查询是一类基于多个关系的查询 ? 最终的结果出自一个关系 ? 但相关的条件却涉及多个关系 [例5.18]根据表bookinfo查询与《水的好
处》同一类别的图书名称。
[练习5.181]根据表bookinfo查询与《数学趣谈》同一类别的图书名称。 [练习5.182]根据表readerinfo查询与于丹同一院系的读者姓名。 [例
5.19]根据
readerinfo
表和
borrowreturninfo表查询借过书的读者编号和姓名。
注:由于内层查询会得到多个结果,所以外层的条件中,比较运算符不能用“=”只能用“in”
思考:能用查询设计器设计这个嵌套查询吗? 能browse命令! 2、内外层互相关的嵌套查询(了解)
〓*〓*〓*〓*〓*〓
5.2.5排序
在select命令中,使用order by 短语可以使查询结果按指定要求排序。
说明:
1.ASC是指按升序排序;DESC是指按降序排序。
2.ORDER BY允许按一列或多列排序。 3.只能对最终的查询结果排序,不能对中间结果进行排序。
4.当ASC和DESC都省略时,系统默认为按升序排序。
注意:
? HAVING 子句总是跟在GROUP BY子句之后,不可以单独使用。
? HAVING子句与WHERE子句不矛盾,在
查询中先用WHERE子句限定元组,然后进行分组,最后再用HAVING 子句限定分组。
讨论:
嵌套查询:都是外层查询依赖于内层查询的结果,而内层查询与外层查询无关。
内、外层互相关的查询:内层查询的条件需要外层查询提供值,而外层查询的条件需要内层查询的结果
基本格式:
Select <列名表> from <表名> [where <条件>]order by <排序项> [asc|desc] 注:
1 排序项可以是字段名、由as子句命名的列标题和列序号
2不能依据备注型字段和通用型字段进行排序
3如果有多个排序项,之间用逗号分隔。
[例子5.21] 根据readerinfo表中查询所有读者的姓名、性别和年龄,并按年龄由小到大排序。
[例子5.22] 在bookinfo表中,先按出版日期降序显示,出版日期相同的再按定价升序显示图书的信息。
[例子5.23] 在bookinfo表中,查询价格最高的三本图书的信息。
Top选项一定于order by短语配套使用。
5.2.6统计和分组统计