9第六章-数据库的查询和视图-条件查询及分组.ppt
文本预览下载声明
* HAVING子句一般跟在GROUP BY子句之后,其作用是限定分组检索条件,条件中一般都包含聚集函数。 (在WHERE子句里不能直接用聚集函数作为条件表达式) 例:分别找出借书人次超1人的单位及人次数。 SELECT 单位,COUNT(*) AS 超过1人次 FROM 借阅,读者 WHERE 读者.借书证号=借阅.借书证号 GROUP BY 读者.单位 HAVING COUNT(*)=2 * * 关系数据库与SQL语言 陈晓艳 Monica QQ:804903410 804903410@ 目 录 第1章 数据库基础 第2章 关系库的基本理论 第3章 数据库设计 第4章 Transact-SQL语言和SQL SERVER 2008 第5章 数据库和表的创建 第6章 数据库的查询和视图 第7章 存储过程和触发器 第8章 数据库应用实战 上堂重要知识点回顾 6.1 数据查询 6.1.1单表查询 SELECT 子句选择列 From子句选择表 使用WHERE子句设置查询条件 本堂内容 6.1 数据查询 6.1.1单表查询 对查询结果排序 使用集函数 对查询结果分组 §6.1 数据查询 SELECT 语句的语法结构 基本结构 SELECT 目标表达式[,目标表达式] FROM 表名或者视图名[, 表名或者视图名] [WHERE 条件表达式] 含义 根据WHERE子句的条件表达式,从FROM子句指定的表或视图找出满足条件的元组,再按SELECT子句中的目标列表达式,选出元组中的属性值形成结果表。 §6.1.1 单表查询 约定:讲课中常用的表结构 学生表:Student(Sno,Sname,Ssex,Sage,Sphone,Dno) 课程表: Course(Cno,Cname,Cpno,Ccredit) 学生选课表: SC(Sno,Cno,Score) 使用ORDER BY对查询结果排序 通常对查询结果,希望按照某种顺序进行排序,以方便用户阅读和使用。 这时,可以使用ORDER BY子句,对查询结果按照一个或多个属性列的升序(ASC)或降序(DESC)排列,默认为升序。 例: 查询选修了C03号课程的学生的学号及其成绩,查询结果按分数的降序排列 SELECT Sno, Score FROM SC WHERE Cno=‘C03’ ORDER BY Score DESC 排序的时候对空值的处理(NULL被视为最小值) 若按升序排,空值的元组最先显示; 若按降序排,空值的元组最后显示 Sno Score 30 99 25 98 27 98 15 96 52 93 48 NULL 思考:分数相同的学生怎么排序? 多重排序 ORDER BY后面若跟多个排序项,则用逗号分隔。 排序时首先按第一个表达式的值升序或降序排列,在值相同时再按第二个表达式的值升序或降序进行排列,依此类推直至整个排列完成。 例 :查询全体学生情况,查询结果按所在系的系号升序排列,同一系中的学生按年龄降序排列,年龄相同的学生按学号升序排列。 SELECT * FROM Student ORDER BY Sdept ,Sage DESC ,Sno 思考: 若 不加 “DESC” 结果如何? 使用ORDER BY对查询结果排序 ORDER BY 与 TOP 让用户指定只返回一定数量行的数据 SELECT [ TOP n | TOP n percent ] 列名FROM 表名[ORDER BY列名 [ASC|DESC]]例:查询年龄最小的三位学生的学号,姓名和年龄 SELECT TOP 3 Sno,Sname,Sage FROM Student ORDER BY Sage 思考:若有学生和第三条记录的学生同岁,怎么办? 使用ORDER BY对查询结果排序 ORDER BY 与 TOP WITH TIES关键字,显示 TOP N结果中最后一行相同的值 SELECT [TOP n | TOP n percent ] [WITH TIES] 列名FROM 表名[ORDER BY列名 [ASC|DESC]]例:查询年龄最小的三位学生的学号,姓名和年龄 SELECT TOP 3 WITH TIES Sno,Sname,Sage FROM Student ORDER BY Sage
显示全部