资源简介 (共52张PPT)查询与维护学生信息管理数据表任务6-1 简单数据查询目录Contents任务6-2 多表连接查询任务6-3 嵌套查询任务6-4 集合查询任务6-5 学生信息浏览、查询、统计任务6-6 数据更新任务6-7 学生基本信息维护、信息导出任务6-1 简单数据查询PART 1(一)单表无条件查询任务assignments(二)使用WHERE子句实现条件查询(三)使用常用聚集函数查询(四)分组筛选数据(五)对查询结果进行排序简单数据查询任务6-1任务1-1 数据处理【任务分析】数据查询是数据库中最常见的操作,Transact-SQL是通过SELECT语句来实现查询的,接下来就通过简单查询来认识SELECT语句的基本语法结构。【课堂任务】掌握并理解SELECT语句的基本语法结构,并通过其解决实际查询问题。 单表无条件查询 使用WHERE子句实现条件查询 使用常用聚集函数查询 分组筛选数据 对查询结果进行排序简单数据查询任务6-1任务1-1 数据处理简单数据查询任务6-1任务1-1 数据处理功能及说明如下。(1)SELECT子句:指定查询结果中需要返回的值。(2)FROM子句:指定从其中检索行的表或视图。(3)WHERE表达式:指定查询的搜索条件。(4)GROUP BY子句:指定查询结果的分组条件。(5)HAVING表达式:指定分组或集合的查询条件。(6)ORDER BY子句:指定查询结果的排序方法。简单数据查询任务6-1任务1-1 数据处理(一)单表无条件查询1.语法格式SELECT [ALL|DISTINCT] [TOP N[PERCENT]] <选项> [AS <显示列名>][,<选项> [AS <显示列名>][,...]]FROM <表名|视图名>2.说明(1)ALL:表示输出所有记录行,包括重复记录。默认值为ALL。DISTINCT:表示去掉查询结果中的重复行。(2)TOP N:返回查询结果集中的前N行。加[PERCENT]:返回查询结果集中的前N%行。N的取值范围为0~100。简单数据查询任务6-1任务1-1 数据处理(3)选项:查询结果集中的输出列。选项可为字段名、常量、表达式或函数。用“*”表示输出表中的所有字段。(4)显示列名:在输出结果中,设置选项显示的列名。用AS重命名,AS可以省略。显示列名可用引号定界或不定界。未定义显示列名时,若选项为字段名,则系统将自动给出系统的列名为原字段名,若选项为常量、表达式或函数,系统自动给出输出的列名为“无列名”。(5)表名|视图名:要查询的表或视图。表无需打开,到当前路径下寻找表对应的文件。简单数据查询任务6-1任务1-1 数据处理3.例题【例6.1】 查询全体学生的学号和姓名。USE grademanagerSELECT sno,snameFROM student查询结果如图6.1查询学号和姓名的结果所示。【例6.2】 查询全体学生的学号、姓名、性别。SELECT sno,sname,ssexFROM student查询结果如图6.2查询学号、姓名、性别的结果所示。简单数据查询任务6-1任务1-1 数据处理简单数据查询任务6-1任务1-1 数据处理简单数据查询任务6-1任务1-1 数据处理【例6.4】 查询全体学生的详细记录。SELECT *FROM student上面的语句等价于:SELECT sno,sname,ssex,sbirthday,sid,saddress,spostcode,sphone,spstatus,sfloor,sroomno,sbedno,tuixue,xiuxue,smemo,sphoto,classnoFROM student查询结果如图6.4所示。简单数据查询任务6-1任务1-1 数据处理简单数据查询任务6-1任务1-1 数据处理【例6.5】 输出学生表中的前5条记录。SELECT TOP 5 *FROM student【例6.6】 查询全体学生的姓名、出生日期,并为“姓名”列指定别名为“姓名”,为“出生年份”列指定别名为“日期”,在此列前增加一列“出生日期:”,“常量”列的列名为“生日”。SELECT sname 姓名,'出生日期:' AS 生日, sbirthday 日期FROM student查询结果如图6.5所示。简单数据查询任务6-1任务1-1 数据处理简单数据查询任务6-1任务1-1 数据处理简单数据查询任务6-1任务1-1 数据处理简单数据查询任务6-1任务1-1 数据处理(二)使用WHERE子句实现条件查询1.语法格式SELECT [ALL|DISTINCT] [TOP N[PERCENT]] <选项> [AS <显示列名>][,<选项> [AS <显示列名>][,...]]FROM <表名|视图名>WHERE <条件表达式>2.说明(1)条件表达式:定义要返回的行应满足的条件,条件表达式是通过运算符连接起来的逻辑表达式。(2)WHERE条件中的运算符。简单数据查询任务6-1任务1-1 数据处理简单数据查询任务6-1任务1-1 数据处理3.例题(1)比较运算符使用比较运算符限定查询条件,其语法格式如下。WHERE 表达式1 比较运算符 表达式2【例6.10】 查询所有女生的学号、姓名和性别。SELECT sno,sname,ssexFROM studentWHERE ssex='女'查询结果如图6.8所示。简单数据查询任务6-1任务1-1 数据处理【例6.11】 查询所有成绩大于80分的学生的学号和成绩。SELECT sno AS '学号',degree '成绩'FROM scWHERE degree>80【例6.12】 查询全体团员的名单。SELECT snameFROM studentWHERE spstatus='共青团员'【例6.13】 查询1990年9月1日后出生的学生的姓名及出生日期。SELECT sname, sbirthdayFROM studentWHERE sbirthday>'1990-9-1'简单数据查询任务6-1任务1-1 数据处理【例6.14】 查询年满18岁的学生的学号、姓名及出生日期。SELECT sno, sname, sbirthdayFROM studentWHERE DATEPART(year,sbirthday)>=18提示 WHERE子句中比较运算符的两端是表达式,表达式可以由列名、常量、函数等组成,运算符两边表达式的数据类型必须一致。简单数据查询任务6-1任务1-1 数据处理简单数据查询任务6-1任务1-1 数据处理【例6.15】 查询住在3号楼的男生的姓名及班号。SELECT sname,classnoFROM studentWHERE sfloor='3'AND ssex='男'【例6.16】 查询成绩在90分以上或不及格的学生的学号和课程号信息。SELECT sno,cnoFROM scWHERE degree>90 or degree<60【例6.17】 查询非团员的学生的学号、姓名及年龄。SELECT sno,sname,YEAR(GETDATE())-YEAR(sbirthday)FROM studentWHERE NOT spstatus='共青团员'简单数据查询任务6-1任务1-1 数据处理(3)范围运算符在WHERE子句中可以使用BETWEEN关键字查找某一范围内的数据,或使用NOT BETWEEN关键字查找不在某一范围内的数据。其语法格式如下。WHERE 表达式 [NOT] BETWEEN 初始值 AND 终止值提示 初始值表示范围的下限(最小值),终止值表示范围的上限(最大值)。绝对不允许初始值大于终止值。如果表达式的值大于等于初始值的值,并且小于等于终止值的值,则BETWEEN返回TRUE。表达式的数据类型必须与初始值和终止值的数据类型相同。简单数据查询任务6-1任务1-1 数据处理【例6.18】 查询成绩为60~70分的学生的学号及成绩。SELECT sno, degreeFROM scWHERE degree BETWEEN 60 AND 70或SELECT sno, degreeFROM scWHERE degree>=60 AND degree<=70简单数据查询任务6-1任务1-1 数据处理(4)字符匹配符在WHERE子句中使用字符匹配符LIKE或NOT LIKE可以比较表达式与字符串,确定特定字符串是否与指定模式相匹配,模式可以包含常规字符和通配符,从而实现对字符串的模糊查询。其语法格式如下。WHERE 表达式 [NOT] LIKE '字符串' [ESCAPE '换码字符']其中,[NOT]为可选项,表达式为任何有效的字符数据类型的表达式。简单数据查询任务6-1任务1-1 数据处理简单数据查询任务6-1任务1-1 数据处理【例6.19】 查询所有姓李的学生的学号、姓名和性别。SELECTFROM studentWHERE sname LIKE '李%'查询结果如6.8所示。【例6.20】 查询生源地不是山东省的所有学生的信息。SELECT *FROM studentWHERE saddress NOT LIKE '%山东%'【例6.21】 查询名字中第2个字为“小”字的学生的姓名和学号。SELECT sname,snoFROM studentWHERE sname LIKE '_小%'查询结果如图6.9所示。简单数据查询任务6-1任务1-1 数据处理简单数据查询任务6-1任务1-1 数据处理【例6.22】 查询学号为2005010102学生的姓名和性别。SELECT sname,ssexFROM studentWHERE sno LIKE '2005010102'以上语句等价于:SELECT sname,ssexFROM studentWHERE sno= '2005010102'提示 如果LIKE后面的匹配串中不含通配符,则可以用“=”(等于)运算符取代LIKE,用“<>”(不等于)运算符取代NOT LIKE。简单数据查询任务6-1任务1-1 数据处理【例6.23】 查询DB_Design课程的课程号。SELECT cnoFROM courseWHERE cname LIKE 'DB\_Design' ESCAPE'\’提示 其中,ESCAPE'\'短语表示“\”为换码字符,这样匹配串中紧跟在“\”后面的字符“_”不再具有通配符的含义,转义为普通的“_”字符。简单数据查询任务6-1任务1-1 数据处理5)列表运算符在WHERE子句中,如果需要确定表达式的取值是否属于某一列表值之一,就可以使用关键字IN或NOT IN来限定查询条件。其语法格式如下。WHERE 表达式 [NOT] IN 值列表其中,NOT为可选项,当值不止一个时,需要将这些值用括号括起来,各列表值之间使用逗号(,)隔开。简单数据查询任务6-1任务1-1 数据处理【例6.24】 查询计算机文化基础、数据库技术与应用、电子信息技术3门课程的课程名及开课学期。SELECT cname ,ctermFROM courseWHERE cname IN('计算机文化基础', '数据库技术与应用', '电子信息技术')以上语句等价于:SELECTcname ,ctermFROM courseWHERE cname='计算机文化基础' OR cname='数据库技术与应用'OR cname='电子信息技术'简单数据查询任务6-1任务1-1 数据处理6)涉及空值的查询要确定指定的表达式是否为NULL时,可以在WHERE子句中使用IS NULL关键字查询,反之要查询数据表的值不为NULL时,可以使用IS NOT NULL关键字。其基本语法格式如下。WHERE 表达式IS [NOT] NULL【例6.25】 某些学生选修课程后没有参加考试,所以有选修记录,但没有考试成绩。查询缺少成绩的学生的学号和相应的课程号。SELECT sno,cnoFROM scWHERE degree IS NULL简单数据查询任务6-1任务1-1 数据处理(三)使用常用聚集函数查询SQL Server的聚集函数是综合信息的统计函数,也称为聚合函数或集函数,包括计数、求最大值、求最小值、求平均值和求和等。聚集函数可作为列标识符出现在SELECT子句的目标列或HAVING子句的条件中。SQL查询语句中如果有GROUP BY子句,则语句中的函数为分组统计函数;否则,语句中的函数为全部结果集的统计函数。简单数据查询任务6-1任务1-1 数据处理简单数据查询任务6-1任务1-1 数据处理简单数据查询任务6-1任务1-1 数据处理简单数据查询任务6-1任务1-1 数据处理【例6.29】 计算002号课程的平均成绩。SELECT AVG(degree)平均成绩FROM scWHERE cno='002'【例6.30】 查询002号课程的最高分和最低分。SELECT MAX(degree) 最高分,MIN(degree) 最低分FROM scWHERE cno='002'简单数据查询任务6-1任务1-1 数据处理【例6.31】 查询学号为2005010101的学生的总成绩及平均成绩。SELECT SUM(degree) AS 总成绩,AVG(degree) AS 平均成绩FROM scWHERE sno='2005010101'【例6.32】 查询有考试成绩的学生人数。SELECT COUNT(DISTINCTsno)人数FROM scWHERE degreeIS NOT NULL简单数据查询任务6-1任务1-1 数据处理(四)分组筛选数据使用GROUP BY子句可以将查询结果按照某一列或多列数据值进行分类,换句话说,就是对查询结果的信息进行归纳,以汇总相关数据。其语法格式如下。[GROUP BY 列表达式][HAVING 条件表达式]列表达式是指定列或列上的非聚合计算。GROUP BY子句把查询结果集中的各行按列表达式分组,在这些列表达式上,对应值都相同的记录分在一组。若无HAVING子句,则各组分别输出;若有HAVING子句,则只有符合HAVING条件的组才输出。简单数据查询任务6-1任务1-1 数据处理简单数据查询任务6-1任务1-1 数据处理【例6.34】 统计学生表中男、女生人数。SELECT ssex,COUNT(*)人数FROM studentGROUP BY ssex【例6.35】 统计各生源地男、女生人数。SELECT saddress,ssex,COUNT(*)FROM studentGROUP BY saddress,ssex简单数据查询任务6-1任务1-1 数据处理【例6.36】 统计各生源地女生人数。SELECT saddress,COUNT(*)FROM studentWHERE ssex='女'GROUP BY saddress或SELECT saddress,COUNT(*)FROM studentGROUP BY saddress,ssexHAVING ssex='女'简单数据查询任务6-1任务1-1 数据处理【例6.37】 查询选修了两门及以上课程的学生的学号。SELECT snoFROM scGROUP BY snoHAVING COUNT(*)>=2【例6.38】 查询各年份出生的学生人数。select year(sbirthday)AS 年份,count(*) AS 人数from studentgroup by year(sbirthday)简单数据查询任务6-1任务1-1 数据处理(五)对查询结果进行排序用户可以利用ORDER BY子句对查询结果按指定的列列表进行升序(ASC)或降序(DESC)排列,默认值为升序。其语法格式如下。[ORDER BY <列或表达式1> [ASC|DESC][,<列或表达式2> [ASC|DESC][,…]ORDER BY子句对查询结果排序后,SELECT语句的查询结果集中,各记录将按顺序输出。首先按第一列或表达式值排序;前一列或表达式值相同者,再按下一列或表达式值排序,以此类推。若某列或表达式后有DESC,则按该列或表达式值排序时为降序排列,否则,为升序排列。简单数据查询任务6-1任务1-1 数据处理简单数据查询任务6-1任务1-1 数据处理提示 ① 对于空值,如按升序排列,则含空值的元组将最先显示;如按降序排列,则会空值的元组将最后显示。Null值被视为最低的可能值。② 中英文字符按其ASCII码大小进行比较。③ 数值型数据根据其数值大小进行比较。④ 日期型数据按年、月、日的数值大小进行比较。⑤ 逻辑型数据false小于true。简单数据查询任务6-1任务1-1 数据处理简单数据查询任务6-1任务1-1 数据处理 展开更多...... 收起↑ 资源预览