您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 销售管理 > SQLServer教案第08周-简单数据查询
数据库原理与应用——SQLServer2005邹竞授课日期年月日第6周授课形式讲课授课时数4章节名称第08章简单查询教学目的与要求①掌握Select语句的基本语法结构②掌握在表中查询全部字段和部分字段的方法③掌握在查询结果中插入计算列、常量值,以及改变列标题的方法④掌握将查询结果的重复行只显示一次的Distinct关键字⑤掌握条件的查询和多重条件查询。⑥掌握在查询结果中使用聚合函数以及GroupBy子句⑦掌握以使用聚合函数为查询条件的GroupBy…Having…子句⑧掌握使用OrderBy子句为查询结果进行排序教学重点分组统计查询的GroupBy子句教学难点以使用聚合函数为查询条件的GroupBy…Having…子句教学方法和手段讲授法结合课堂实例分析讨论教学过程与组织导入新课我们已经学习了DML语句的Insert、Update、Delete语句,对数据库的表进行更新。从这节课开始我们学习DML语句中最复杂的操作——数据查询。讲授新课第08章简单查询第01节投影查询8.1.1Select语句的语法结构Select语句的语法结构为:SELECT[ALL|DISTINCT][TOPexpression[PERCENT][WITHTIES]]select_list[INTOnew_table][FROM{table_source}[,...n]][WHEREsearch_condition][GROUPBY[ALL]group_by_expression[,...n][WITH{CUBE|ROLLUP}][HAVINGsearch_condition][ORDERBYorder_expression[ASC|DESC]][COMPUTE{{AVG|COUNT|MAX|MIN|SUM}(expression)}[,...n][BYexpression[,...n]]参数说明如下:SELECT子句用于指定所选择的要查询的特定表中的列,它可以是星号(*)、表达式、列表、变量等。INTO子句用于指定所要生成的新表的名称。FROM子句用于指定要查询的表或者视图,最多可以指定16个表或者视图,用逗号相互隔开。WHERE子句用来限定查询的范围和条件。GROUPBY子句是分组查询子句。数据库原理与应用——SQLServer2005邹竞HAVING子句用于指定分组子句的条件。GROUPBY子句、HAVING子句和集合函数一起可以实现对每个组生成一行和一个汇总值。ORDERBY子句可以根据一个列或者多个列来排序查询结果,在该子句中,既可以使用列名,也可以使用相对列号。ASC表示升序排列,DESC表示降序排列。COMPUTE子句使用集合函数在查询的结果集中生成汇总行。COMPUTEBY子句用于增加各列汇总行。8.1.2查询一个表中指定的列在很多情形下,用户只对一个表中的部分列的数据感兴趣。这时可以在“查询结果列表”中,按用户需要的顺序指定所要的列来实现。例:查询全体学生的学号、姓名selectSNo,SNamefromStudent例:查询全体学生的姓名、学号、所在系编号selectSName,SNo,DepartfromStudent8.1.3查询一个表中全部的列系统为了用户快速查询,给查询全部列的语句一个简单的输入“结果列名列表”的省略方法,不必全部写出列名列表,而以“*”来代替即可。当然,这个方法不能改变结果列的顺序。例:查询Student表中的全部信息Select*fromStudent等价于:selectSNo,SName,SSex,Birth,Depart,AddfromStudent例:查询Course表中的全部信息select*fromCourse8.1.4查询计算列有时,需要查询的结果,不一定是表中的原有数据值,而是要通过与原有数据进行某种计算获得。但凡与基本表中的数据存在公式转换的数据,都可以使用计算的方法查询到。例:查询全体学生的姓名和年龄selectSName,DateDiff(yy,Birth,GetDate())fromStudent例:查询SC表中的全体学生全部课程的总平均分selectAvg(Grade)fromSC8.1.5在查询结果中插入常量值的列按用户的需要,可以在查询结果中,插入需要的某些常量值,使用户的结果更符合需要。例如,用户想要将结果保存为一个外观适用的表。例:查询全体学生的姓名、年龄,并在其年龄前加入'的实际年龄是'字符串SelectSName,'的实际年龄是',DateDiff(yy,Birth,GetDate())fromStudent8.1.6改变查询结果中的列标题要改变结果集中的列标题,只要对SELECT之后的结果列名列表适当修改即可。其语法规则如下:列名表达式[AS]列标题数据库原理与应用——SQLServer2005邹竞或列标题=列名表达式例:SelectSName学生姓名,DateDiff(yy,Birth,GetDate())年龄fromStudent8.1.7Distinct关键字的使用在基表中,本来不会存在完全相同的行,但查询语句进行了列的筛选后,可能在结果集中出现完全相同的行,如果我们需要完全消除重复的行,使重复的行只显示一次,需要在Select保留字之后加上保留字Distinct。请对比下列两个查询:SelectSNoFromSC--不去除重复行SelectDistinctSNoFromSC--去除重复行第02节条件查询数据库用户常常需要查找符合一定条件的结果,这种查询称作条件查询,是通过Where语句实现的。条件查询的应用很广,是在简单查询的基础上,再加上条件子句来实现的。而条件子句中的查询条件,由简单到复杂,形式多样。SQL中提供的查询条件有六类,如表所示条件类型运算符或逻辑谓词比较运算=、、=、、=、(或!=)、NOT+比较运算确定范围BETWEEN…AND、NOTBETWEEN…AND确定集合IN、NOTIN字符匹配LIKE、NOTLIKE空值ISNULL、ISNOTNULL多重条件AND、OR、()8.2.1比较查询例:查询计算机系全体学生的姓名、系编号(已知计算机系的系编号为g001)SelectSName,DepartFromStudentWhereDepart='g001'例:查询年龄不足22岁的学生的姓名和年龄SelectSName,DateDiff(yy,Birth,GetDate())FromStudentWhereDateDiff(yy,Birth,GetDate())22或者SelectSName,DateDiff(yy,Birth,GetDate())FromStudentWhereNotDateDiff(yy,Birth,GetDate())=22例:查询存在不及格课程的学生的学号、课程号、成绩SelectSNo,CNo,GradeFromSCWhereGrade608.2.2用确定范围为条件1.确定连续范围内的条件[NOT]BETWEENAND是一个条件子句,它的语句格式和语法规则如下:列名表达式[NOT]BETWEEN下限值AND上限值如果子句前部带否定词NOT,其语义正好相反。产生的逻辑值也恰好相反。数据库原理与应用——SQLServer2005邹竞此条件所表达的逻辑值等价于以下的逻辑表达式的逻辑值:列名表达式=下限值AND列名表达式=上限值例:查询年龄在20~22岁之间的学生姓名、系编号和实际年龄SelectSName,Depart,DateDiff(yy,Birth,GetDate())FromStudentWhereDateDiff(yy,Birth,GetDate())Between20And22以上查询语句与下列语句等价:SelectSName,Depart,DateDiff(yy,Birth,GetDate())FromStudentWhereDateDiff(yy,Birth,GetDate())=20AndDateDiff(yy,Birth,GetDate())=22例:查询年龄不在20~22岁之间的学生姓名、系编号和实际年龄SelectSName,Depart,DateDiff(yy,Birth,GetDate())FromStudentWhereDateDiff(yy,Birth,GetDate())NotBetween20And22注意:在查询条件(Where子句)中,不要出现逻辑矛盾式(永假式),这样查询不到任何结果2.确定离散范围内的条件IN也是一个逻辑运算符,可以用于查找列值属于确定集合的记录。IN的语法格式为:列名[NOT]IN(常量1,常量2,…,常量n)NOTIN的结果正好与上述语义相反。列名NOTIN(常量1,常量2,…,常量n)等价于列名!=常量1AND列名!=常量2AND…AND列名!=常量n所表达的逻辑语义。例:查询系编号为'g022'、'g005'的学生姓名、性别和系编号SelectSName,SSex,DepartFromStudentWhereDepartIn('g022','g005')等价于SelectSName,SSex,DepartFromStudentWhereDepart='g002'OrDepart='g005'例:查询系编号不为'g022'、'g005'、'g001'的学生姓名、性别和系编号SelectSName,SSex,DepartFromStudentWhereDepartNotIn('g022','g005','g001')等价于SelectSName,SSex,DepartFromStudentWhereDepart'g022',AndDepart'g005'AndDepart'g001')8.2.3模糊查询LIKE短语的语法格式和语法规则如下:列名[NOT]LIKE匹配字符串其匹配字符串中,除通常的字符外,可以包含如下四个通配符:下划线——与任意单个字符相匹配。百分号%——与零个或多个任意字符相匹配。方括号[一个或多个字符]——匹配其中任何一个字符。如[abcde],表示匹配a、b、c、d、e中的任何一个。[^一个或多个字符]——不匹配其中任何一个字符。例:查询姓张的学生的所有信息Select*FromStudentWhereSNameLike'张%'例:查询姓'牛'和姓'马'的学生的全部信息Select*FromStudentWhereSNameLike'[牛马]%'例:查询不姓牛、马、刘、张、王、李的学生的所有信息数据库原理与应用——SQLServer2005邹竞Select*FromStudentWhereSNameLike'[^牛马刘张王李]%'例:查询姓名当中第二个字为'小'或'晓'的学生的所有信息Select*FromStudentWhereSNameLike'_[小晓]%'例:查询2006年入学的全部学生名单,学号左边4位数字是入学年份Select*FromStudentWhereSNoLike'2006%'或者Select*FromStudentWhereLeft(SNo,4)='2006'8.2.4涉及空值的查询空值(NULL)在数据库中有特殊的定义,它表示其值暂不确定。在查询语句中,判断某列的值是否为空值,不能使用比较运算符等于号(=)或不等号(、!=),而只能使用专门用于判断空值的子句来实现。专门用于判断空值的语句格式和语法如下:列名IS[NOT]NULL例:查询选修了课程但还没参加考试的学生的学号和相应的课程号SelectSNo,CNoFromSCWhereGradeIsNULL例:查询选修了课程并且有考试成绩的学生的学号和相应的课程号SelectSNo,CNoFromSCWhereGradeIsNotNULL8.2.5多重条件查询如果有需要,可以由上述的条件复合,使用逻辑运算符NOT、AND、OR组成多重条件,还可以加括号“()”组成非常复杂的条件表达式。只要条件表达式的
本文标题:SQLServer教案第08周-简单数据查询
链接地址:https://www.777doc.com/doc-1815364 .html