《关系型数据库基础》由会员分享,可在线阅读,更多相关《关系型数据库基础(35页珍藏版)》请在金锄头文库上搜索。
1、书名:关系型数据库基础ISBN: 978-7-111-43036-0出版社:机械工业出版社本书配有电子课件1关系型数据库基础项目一:“学生成绩管理系统”数据库设计和应用任务四:数据查询2任务四 数据查询知识目标知识目标了解数据查询的方法。了解对查询结果进行筛选的方法。了解对查询结果进行排序的方法。了解对查询结果进行分组和统计的方法。了解从多个表中查询关联数据的方法。能力目标能力目标能够根据要求,从数据表中查询满足检索条件的记录。能够根据要求,对查询的结果排序。能够根据要求,对查询结果进行分组筛选和统计。能够根据要求,从不同的数据表中检索相关联的记录。能够根据实际业务中对数据查询的要求,综合运用
2、各种查询方法,编写相应的查询语句。34.1 任务描述根据“学生成绩管理系统”的客户需求,完成与数据查询相关的功能44.2 任务实施无论采用何种类型的查询,对数据的查询都是采用SELECT语句进行。SELECT语句的完整语法较复杂,但是其主要的子句可归纳如下:SELECT列名列表FROM表名WHERE查询条件GROUPBY分组表达式HAVING统计条件ORDERBY排序表达式54.2.1 步骤一:选择列的查询(1)指定列)指定列任务描述:查询所有学生的学号、姓名和班级信息。分析:将需要的列依次在SELECT之后的“列名列表”中列出,列与列之间用逗号间隔开SELECTstuNo,name,clas
3、sNameFROMtb_student6提示:SELECT语句的“列名列表”中,各个列的先后顺序可以与表中的顺序不一致。良好的查询习惯是在Select语句中指定出所需要查询的列,而不是“Select*from表名”的形式。这样,不需要的列中的数据就不会出现在查询结果中,节约了系统的开销,提高了运行效率。7(2 2)给列取别名)给列取别名任务描述:如图所示,要求查询班级的信息,列名分别显示:“班级名”,“班主任”和“所在系”。8给列取别名给列取别名在显示结果集时,可以指定显示的名字(通常也叫别名)来代替原来的列名。有3种方法指定别名:1.通过“列名AS别名”形式2.通过“列名别名”形式3.通过“
4、别名=列名”形式9(3 3)计算列)计算列任务描述:如图所示,要求查询学生的信息,期中一个列显示“在学号后面紧接着姓名”的形式。10计算列计算列任务分析:该显示结果的中的第一列项不是通常的列名和结果信息,而是通过计算产生的。这里的计算表达式为:stuNo+name。任务实施:SELECTstuNo+name,sex,classNameFROMtb_student114.2.2 步骤二:选择行的查询1. 1. 满足条件的行满足条件的行查询满足条件的记录可以通过在WHERE子句后面构造条件表达式来实现。12(1 1)比较条件查询)比较条件查询任务描述:查询籍贯是“广东深圳”的学生信息。13(2 2
5、)指定范围查询)指定范围查询任务描述:查询成绩优秀(80100分)的信息。任务分析:成绩在80100之间的查询条件可以使用BETWEENAND,即在某一范围。14(3 3)指定列表查询)指定列表查询任务描述:查询01软件-1、02文秘-1和03文秘-1三个班的学生信息。任务分析:IN谓词用于查找属于指定列表中的记录。15(4 4)模糊查询)模糊查询任务描述:查询学校所有01级的班级信息。任务分析:所有01级的班级的共同特点是className都是以“01”开头,因此查询条件为className的内容为“01”开头,其后为任意字符即可。谓词LIKE可以用来进行字符串的匹配。其一般语句格式为:NO
6、TLIKE可以是一个完整的字符串,也可以含有“%”和“_”等通配符。16(5 5)空值判断查询)空值判断查询任务描述:由于学生还没有参加某个科目的考试,因此该学生的该科目在成绩表(tb_stuToCourse)的对应字段中还是空值,查询成绩表中分数为空的记录,如图所示。任务分析:在SQL语句中,判断是否空值不能使用等号(=),而应该使用“IS”。ISNULL表示空,ISNOTNULL表示非空。17(6 6)查询条件中的逻辑运算)查询条件中的逻辑运算任务描述:查询02文秘-1班的所有女同学的信息。任务分析:本任务的查询条件中实际包含两个条件:className=02文秘-1班和sex=女,可以使
7、用逻辑运算符将这两个条件连接起来。这里的两个条件是“并且”的逻辑关系,可使用“AND”运算符。182. 2. 消除重复的行消除重复的行任务描述:通过班级表(tb_class)查询总共有几个系部,每个系部只需要显示一次。任务分析:查询的结果中包含了重复的数据,如果需要去除重复显示,则可以指定DISTINCT关键字。193. 3. 前前N N行行任务描述:查看学生表中前3个学生的信息。任务分析:在SELECT语句中,可以使用TOP子句限制查询结果的行数,一般形式为:TOPnPERCENTn指定返回的行数,如果有PERCENT指定返回的结果行的百分比。204.2.3 步骤三:查询结果排序任务描述:按
8、照由小到大的顺序,查询学生的成绩信息。任务分析:ORDERBY子句用于对查询结果进行排序。它可以按照一个或多个字段对查询结果进行升序(ASC)或降序(DESC)排序。其中,升序(ASC)为默认设置。如果有WHERE子句,ORDERBY子句必须放在WHERE子句后面。21任务拓展任务拓展任务描述:查询分数最高的5个成绩信息224.2.4 步骤四:查询结果分组统计1 1、GROUP BY子句子句任务描述:分别查询统计全校男老师和女老师的人任务分析:要分别统计男女老师的人数,首先需要对老师按照性别分组,然后再分别统计男老师和女老师的记录数。GROUPBY子句进行分组,聚合函数对记录组进行统计。23查
9、询结果分组统计2、HAVING子句子句任务描述:查询平均成绩在75分以上的各个科目的平均成绩任务分析:平均成绩75的条件子句“AVG(score)75”必须写在HAVING子句中。24提示同样属于查询条件,WHERE子句设置的查询条件在GROUPBY子句之前发生,而HAVING子句是在分组统计之后,对统计的结果进行条件筛选,所以WHERE子句写在GROUPBY子句之前,而HAVING子句写在GROUPBY子句之后。HAVING子句可以包含聚合函数,而WHERE子句不能包含聚合函数。254.2.5 步骤五:连接查询任务描述:学生处的李老师和教务处的刘老师经常要查询班级的基本情况和学生的课程成绩,
10、通过下述5个子任务完成相关的信息查询与统计。1、查询学院所有班级的基本情况,要求显示班级名称和班主任的姓名;2、查询显示所有学生信息及其所在的班级和系部名称;3、查询某学生(如学号为200100001)的课程成绩,以及课程的编号、名称和学分信息;4、查询某个班级(如01软件-1班)的所有学生考试成绩。5、查询某个班级(如01软件-1班)的所有学生考试成绩(显示学号、姓名、班级、学期、课程代码和分数),如果学生的学号只在班级中出现,没有在成绩表中出现,则该学生信息部分依旧显示,但其考试信息部分全部显示为NULL。每个查询所每个查询所需要的数据需要的数据并并不是不是都在都在同同一个表中一个表中26
11、连接查询 相关知识相关知识连接查询主要包括:交叉连接、内连接和外连接三种情况。1.1.交叉连接交叉连接。交叉连接查询是指返回两个表的笛卡尔积作为查询结果的连接方式,一般形式为:SELECT字段列表FROM表1CROSS JOIN表2272、内连接内连接内连接是用比较运算符比较要连接字段的值,通过对两个表之间共性的字段进行等值比较,实现两个表之间的连接操作,而两个表中任何不匹配的数据行将不会出现在结果集中。一般形式为:SELECT字段列表FROM表1INNERJOIN表2ON表1.共性字段=表2.共性字段或者SELECT字段列表FROM表1,表2WHERE表1.共性字段=表2.共性字段283 3
12、、外连接外连接在内连接操作中,只有满足连接条件的记录才能出现在结果集中,但是如果想显示一个表中与另一个表不匹配的行,就需要借助于外连接来实现。左外连接左外连接右外连接右外连接全外连接29任务实施1 1. 查询学院所有班级的基本情况,要求查询学院所有班级的基本情况,要求显示班级名称和班主任的姓名。显示班级名称和班主任的姓名。30任务实施(续)2. 查询显示所有学生信息及其所在的班级查询显示所有学生信息及其所在的班级和系部名称。和系部名称。31任务实施(续)3. 查询某学生(如学号为查询某学生(如学号为200100001)的)的课程成绩,以及课程的编号、名称和学分课程成绩,以及课程的编号、名称和学
13、分信息。信息。32任务实施(续)4. 查询某个班级(如查询某个班级(如01软件软件-1班)的所有班)的所有学生课程成绩。学生课程成绩。33任务实施(续)5.查询某个班级(如查询某个班级(如01软软件件-1班)的所有学生考试成班)的所有学生考试成绩绩(显示学号、姓名、班级、显示学号、姓名、班级、学期、课程代码和分数学期、课程代码和分数),如果学生的学号只在班级中如果学生的学号只在班级中出现,没有在成绩表中出现,出现,没有在成绩表中出现,则该学生信息部分依旧显示,则该学生信息部分依旧显示,但其考试信息部分全部显示但其考试信息部分全部显示为为NULL。342.3小结关系型数据库的数据查询都要用到SELECT语句。一般的查询只包括选择列、FROM子句和WHERE子句,它们也是最常用的查询语句。使用ORDERBY子句可以对查询结果排序。使用聚合函数和分组汇总子句(GROUPBY和HAVING)对查询结果进行分组和统计。使用连接可以从两个或者更多的表中查询数据。35