资源简介 (共28张PPT)项目5 查询【能力目标】学会使用SELECT语句。能使用SELECT语句进行简单查询。能使用SELECT语句进行分组筛选和汇总计算。能使用SELECT语句进行连接查询。能使用SELECT语句进行子查询。【思政目标】“古之立大事者,不惟有超出之才,亦必有坚忍不拔之志”,青年学生应努力学习,成人成才,为祖国服务。项目5 查询【项目描述】按照要求对xs数据库中各表进行查询和统计。【项目分析】将数据库xs的数据表建立好后,就可以进行数据库的各种操作了。在数据库应用中,最常用的操作是查询,它是数据库的其他操作(统计、插入、修改、删除)的基础。在SQL Server 2019中,使用SELECT语句实现数据查询。SELECT语句功能强大,使用灵活。用户通过SELECT语句可以从数据库中查找需要的数据,也可以进行数据的统计汇总。本项目主要介绍利用SELECT语句对数据库进行各种查询的方法。项目5 查询【思政导入】主要矛盾和次要矛盾解决问题要抓主要矛盾,认真细致是做好每一项工作的关键。在数据库应用中,最常用的操作是查询,那么掌握查询的用法就必不可少。我们要掌握解决问题的关键因素,抓主要矛盾,认真细致地完成工作。项目5 查询【任务设置】任务1简单查询任务2分类汇总任务3连接查询任务4子查询项目5 查询【任务目标】学会使用聚合函数。能使用SELECT语句进行分组筛选、汇总和计算。【任务分析】对表数据进行查询时,经常需要对查询结果进行分类、汇总或计算。例如,在xs数据库中求某门课程的平均分、统计各分数段的人数等。可使用聚合函数SUM、AVG、MAX、MIN、COUNT进行汇总查询,使用GROUP BY子句和HAVING子句进行分组筛选。任务2 分类和汇总项目5 查询1.SUM和AVGSUM和AVG分别用于求表达式中所有值项的总和与平均值。语法格式:SUM/AVG ([ALL | DISTINCT]expression )【例5-19】 求学号为202102的学生选修课程的平均成绩:USE xsSELECT AVG(成绩) AS '202102号学生的平均分'FROM XSCJWHERE 学号='202102'GO任务2-1 使用常用的聚合函数项目5 查询2.MAX和MINMAX和MIN分别用于求表达式中所有值项的最大值与最小值。语法格式:MAX/MIN ([ALL | DISTINCT]expression )3.COUNTCOUNT用于统计组中满足条件的行数或总行数。语法格式:COUNT ({[ALL | DISTINCT]expression}|*)任务2-1 使用常用的聚合函数项目5 查询分组是按照某一列数据的值或某个列组合的值将查询出的行分成若干组,每组在指定列或列组合上具有相同的值。分组可通过使用GROUP BY子句来实现。语法格式:[GROUP BY group_by_expression[,…n] ]1.简单分组【例5-23】 求XSDA表中男、女生的人数:USE xsSELECT性别,COUNT(*) AS '人数'FROM XSDAGROUP BY性别GO任务2-2 分组筛选数据项目5 查询2.使用HAVING子句筛选结果使用GROUP BY子句和聚合函数对数据进行分组后,还可以使用HAVING子句对分组数据做进一步筛选。语法格式:[HAVING <search_condition>]【例5-25】 查询XSCJ表中平均成绩在90分及以上的学生的学号和平均分:USE xsSELECT 学号, AVG(成绩) AS '平均分'FROM XSCJGROUP BY 学号HAVING AVG(成绩)>=90GO任务2-2 分组筛选数据项目5 查询【任务目标】学会使用连接查询实现多表查询。【任务分析】连接查询是关系数据库中最主要的查询方式,连接查询的目的是通过加载连接字段条件将多个表连接起来,以便从多个表中检索用户需要的数据。例如,在xs数据库中需要查找选修了“数据结构”课程的学生的姓名和成绩,就需要将XSDA、KCXX、XSCJ这3个表进行连接,才能查找到结果。在SQL Server 2019中,连接查询分为内连接、外连接、交叉连接和自连接。任务3 连接查询项目5 查询内连接是将两个表中满足连接条件的行组合起来,返回满足条件的行。语法格式:FROM <table_source> [INNER]JOIN <table_source> ON <search_condition>参数说明如下。(1)<table_source>为需要连接的表。(2)ON用于指定连接条件。(3)<search_condition>为连接条件。(4)INNER表示内连接。任务3-1 内连接项目5 查询【例5-27】 查询xs数据库中每个学生的情况以及选修课程的情况:USE xsSELECT *FROM XSDA INNER JOIN XSCJ ON XSDA.学号=XSCJ.学号GO连接条件中的两个字段称为连接字段,它们必须是可比的。例如,【例5-27】的连接条件中的两个字段是XSDA表和XSCJ表中的“学号”字段。连接条件中的比较运算符可以是<、<=、=、>、>=、!= 、<>、!<、!>,当比较运算符是“=”时,就是等值连接。如果在等值连接结果的目标列中去除相同的字段名,就为自然连接。任务3-1 内连接项目5 查询任务3-1 内连接项目5 查询图5-17 等值连接的查询结果外连接的结果表中不仅包含满足连接条件的行,还包括相应表中的所有行。外连接包括以下3种。1.左外连接左外连接的结果表中除了包括满足连接条件的行外,还包括左表的所有行。语法格式:FROM <table_source> LEFT[OUTER]JOIN <table_source> ON <search_condition>【例5-32】 查询所有被录取考生的录取情况,所有未被录取的考生也要显示其考号和姓名,并在LQXX表的相应列中显示NULL:任务3-2 外连接项目5 查询USE xsSELECT KSMD.*,LQXX.*FROM KSMD LEFT JOIN LQXX ON KSMD.考号=LQXX.考号GOKSMD表与LQXX表左外连接的查询结果如图5-22所示。任务3-2 外连接项目5 查询图5-22KSMD表与LQXX表左外连接的查询结果交叉连接实际上是将两个表进行笛卡儿积运算,结果表是由第一个表的每一行与第二个表的每一行拼接后形成的表,因此结果表的行数等于两个表的行数之积。语法格式:FROM <table_source> CROSS JOIN <table_source>【例5-37】 列出所有考生所有可能的录取情况:USE xsSELECT KSMD.*,LQXX.*FROM KSMD CROSS JOIN LQXXGOKSMD表LQXX表交叉连接的查询结果如图5-25所示。任务3-3 交叉连接项目5 查询图5-25 KSMD表与LQXX表交叉连接的查询结果连接操作不仅可以在不同的表上进行,也可以在同一张表内进行自身连接,即将同一个表的不同行连接起来。自连接可以看作一张表的两个副本之间的连接。如果要在一个表中查找具有相同列值的行,就可以使用自连接。使用自连接时需要为表指定两个别名,使之在逻辑上成为两张表。对所有列的引用均要用别名限定。任务3-4 自连接项目5 查询【例5-39】 在XSDA表中查找同名学生的学号、姓名:USE xsSELECT XSDA1.姓名, XSDA1.学号, XSDA2.学号FROM XSDA AS XSDA1 JOIN XSDA AS XSDA2 ON XSDA1.姓名= XSDA2.姓名WHERE XSDA1.学号<> XSDA2.学号GO任务3-4 自连接项目5 查询图5-26 XSDA表的自连接的查询结果【任务目标】学会使用子查询。学会根据要求保存查询结果。【任务分析】子查询是指在SELECT语句的WHERE或HAVING子句中嵌套另一条SELECT语句。外层的SELECT语句称为外查询,内层的SELECT语句称为内查询(或子查询)。子查询必须使用括号括起来。子查询通常结合IN、EXIST谓词及比较运算符使用。任务4 子查询和保存查询结果项目5 查询1.IN子查询IN子查询用于判断一个给定值是否在子查询结果表中。语法格式:Expression[NOT]IN (subquery)【例5-40】 查询选修了108号课程的学生的学号、姓名、性别、系名:任务4-1 使用子查询项目5 查询USE xsSELECT学号,姓名,性别,系名FROM XSDAWHERE学号IN(SELECT学号FROM XSCJWHERE课程编号='108')GO任务4-1 使用子查询项目5 查询图5-27 IN子查询的查询结果2.比较子查询比较子查询可以认为是IN子查询的扩展,它使表达式的值与子查询的结果进行比较运算。语法格式:expression{<|<=|=|>|>=|!=|<>||!<|!>}{ALL|SOME|ANY}(subquery)任务4-1 使用子查询项目5 查询SELECT语句提供了两个子句来保存、处理查询结果,分别是INTO子句和UNION子句,下面分别介绍。1.INTO子句使用INTO子句可以将SELECT查询所得的结果保存到一个新建的表中。语法格式:[INTO new_table]任务4-2 保存查询结果项目5 查询【例5-44】 由XSDA表创建“信息系学生表”,包含学号、姓名、系名、总学分:USE xsSELECT 学号,姓名,系名,总学分INTO 信息系学生表FROM XSDAWHERE系名='信息'GO【例5-44】创建的“信息系学生表”包含4个字段:学号、姓名、系名、总学分。其数据类型与XSDA表中的同名字段相同。任务4-2 保存查询结果项目5 查询本项目主要介绍利用SELECT语句对数据库进行各种查询的方法。用户通过SELECT语句可以从数据库中查找需要的数据,也可以进行数据的统计和汇总。(1)简单查询:包括用SELECT子句选取字段,用WHERE子句选取记录并进行简单的条件查询,用ORDER BY子句对查询结果进行排序。(2)分类汇总:包括5个聚合函数(SUM、AVG、MAX、MIN和COUNT)的使用,用GROUP BY子句和HAVING子句进行分组筛选。小结项目5 查询(3)连接查询:连接查询包括4种类型:内连接、外连接、交叉连接、自连接。① 内连接:将两个表中满足连接条件的行组合起来,返回满足条件的行。② 外连接:包括左外连接、右外连接、完全外连接。左外连接的结果表中除了包括满足连接条件的行外,还包括左表的所有行。右外连接的结果表中除了包括满足连接条件的行外,还包括右表的所有行。完全外连接的结果表中除了包括满足连接条件的行外,还包括两个表的所有行。③ 交叉连接:将两个表进行笛卡儿积运算,结果表是由第一个表的每行与第二个表的每一行拼接后形成的表,因此结果表的行数等于两个表的行数之积。交叉连接不能有条件,且不能包含WHERE子句。④ 自连接:将同一个表的不同行连接起来。自连接可以看作一张表的两个副本之间的连接。如果要在一个表中查找具有相同列值的行,就可以使用自连接。使用自连接时需要为表指定两个别名,使之在逻辑上成为两张表。对所有列的引用均要用别名限定。小结项目5 查询(4)子查询:包括IN子查询和比较子查询。IN子查询用于判断一个给定值是否在子查询结果表中,IN和NOT IN子查询只能返回一列数据。对于较复杂的查询,可以使用嵌套的子查询。比较子查询可以认为是IN子查询的扩展,它使表达式的值与子查询的结果进行比较运算。其中语法格式中的ALL指定表达式要与子查询结果表中的每个值都进行比较,只有表达式与每个值都满足比较的关系时,才返回TRUE,否则返回FALSE;SOME或ANY表示表达式只要与子查询结果表中的某个值满足比较的关系,就返回TRUE,否则返回FALSE。(5)查询结果的保存。使用INTO子句可以将SELECT查询所得的结果保存到一个新建的表中,使用UNION子句可以将两个或多个SELECT查询的结果合并成一个结果表。小结项目5 查询 展开更多...... 收起↑ 资源预览