第七章 数据查询基础
- 格式:doc
- 大小:168.50 KB
- 文档页数:13
第七章数据查询基础✓查询学生信息✓查询成绩信息✓理解查询的机制✓使用SELECT语句进行条件查询✓掌握查询排序✓使用表达式、运算符和函数实现查询本章简介前一章学习了什么是SQL,并且介绍了SQL中的运算符,这些运算符除了在约束中使用之外,也经常会在UPDATE和DELETE语句中使用,此外还介绍了对数据库表进行增删改的SQL注意事项。
以及在操作MySQL数据时,经常使用到的一些函数,如字符处理函数,数学函数,以及日期函数等等。
预习作业请按以下步骤预习本章内容:1.带着以下任务,阅读、学习本章的相关资料2.标注出本章看不懂或存在疑惑的部分3.整理、记录学习中的问题4.熟记本章的英文单词请到中心听课前,完成下面的作业。
1.背诵英文单词(1)recordset:(2)order:(3)null:(4)trim:(5)replace:(6)floor:(7)ceiling:(8)round:(9)cast:(10)length:2.预习并回答以下问题阅读本章内容,在作业本上完成以下简答题(1)从学生表中查询全部数据,SQL语句应怎么写?(2)查询排序使用的关键字是什么?3.预习并完成编码题请按照id的倒序排列查询该表全部信息,表结构如图所示。
4.记录预习的问题记录学习中遇到的问题,填写于下面的横线上,以便集中探讨解决——————————————————————————————————————————————————————————————————————————————————————————————————————————————————7.1SQL查询基础7.1.1查询机制简介在讲解查询之前,有必要说明一下查询的机制和查询的结果。
查询是针对表中已经存在的数据行而言的,可以简单的理解为“筛选”,将一定条件的数据抽取出来。
数据表在接收查询请求的时候,可以简单的理解为“它将逐行判断”,判断是否符合查询条件。
如果符合查询条件就提取出来,然后把所有被选中的行组织在一起,形成另外一个类似于表的结构,构成查询的结果,通常叫做记录集(RecordSet)由于记录集类似于表,所以记录集可以再次查询。
7.1.2使用SELECT语句进行查询语法:SELECT <列名> FROM <表名> [WHERE <查询条件>][ORDER BY <排序的列名> [ASC或者DESC]]1.查询所有的行和列,如:以拼接两个列,如:7.2查询排序如果需要按照一定顺序排列语句选中的行,则需要使用ORDER BY子句,并且排序可以是升序(ASC)或者降序(DESC)。
如果不指定ASC或者DESC,记录集按照默认的升序排序。
上述的SQL语句,都可以在其后加上ORDER BY子句进行排序。
例如,查询学生成绩的时候,如果把所有成绩都降低10%后加5分,再查询及格成绩并且按照成绩高低进行排列,SQL语句如下:7.3在查询中使用函数表7-17.3.2表7-2说明:(1)DATE_FORMA T函数中使用到的格式描述符:●%d月的天,数值(00-31)●%e月的天,数值(0-31)●%H小时(00-23)●%h小时(01-12)●%i分钟,数值(00-59)●%j年的天(001-366)●%m月,数值(00-12)●%r时间,12-小时(hh:mm:ss AM 或PM)●%S秒(00-59)●%s秒(00-59)●%T时间, 24-小时(hh:mm:ss)●%W星期名●%w周的天(0=星期日, 6=星期六)●%Y年,4 位(2)DATE_ADD的语法说明DATE_ADD(指定起始时间,INTERV AL 数量单位),如:DA TE_ADD(‘2014-1-1’,INTERV AL 31 DAY)结果是2014-2-1如:DATE_ADD('1982-1-1 12:0:0',interval 2 HOUR)结果是1982-01-01 14:00:00表7-3表7-4说明:CAST或CONVERT转换时类型:●二进制,同带binary前缀的效果: BINARY●字符型,可带参数: CHAR()●日期: DA TE●时间: TIME●日期时间型: DATETIME●浮点数: DECIMAL●整数: SIGNED●无符号整数: UNSIGNED7.4数据查询的案例分析以下给出了两个实际的案例,这些案例都用到了本课程中已经讲述过的内容。
7.4.1 案例1:更新用户卡信息(1) 需求:某公司印了一批充值卡,卡的密码是随机生成的,现在出现这个问题:卡里面的字母“O和数字0”、“字母i和数字1”,用户反映说看不清楚,公司决定,把存储在数据库中的密码中所有的“O”都改成“0”,把所有的“i”都改成“1”;请编写SQL语句实现以上要求(2) 说明:(3) 分析:实现卡密码更新的功能,需要使用UPDATE语句牵涉到字符串的替换,需要使用到MySQL中的函数REPLACE()两条SQL语句也可以使用一条SQL语句7.4.2 案例2:特殊排序(1) 需求:在数据库表中有以下字符数据,如:13-1、13-2、13-3、13-10、13-100、13-108、13-18、13-11、13-15、14-1、14-2现在希望通过SQL语句进行排序,并且首先要按照前半部分的数字进行排序,然后再按照后半部分的数字进行排序,输出要排成这样:13-1、13-2、13-3、13-10、13-11、13-15、13-18、13-100、13-108、14-1、14-2(2) 说明:(3) 分析:排序:ORDER BY在ORDER BY的排序中,需要重新算出排序的数字前半部分的数字,找到“-”符号的位置,然后取其左半部分使用CAST函数将其转换为数字后半部分的数字:找到“-”符号的位置,取其右半部分,再使用CAST函数将其转换为数字7.5技能训练[上机练习1]练习:查询学生相关基本信息需求说明:⏹查询全部S1的学生信息⏹查询全部S2的学生姓名和电话⏹查询全部S1女同学的信息⏹查询课时超过60的科目信息[上机练习2]练习:查询学生相关复杂信息需求说明:⏹查询S2科目名称⏹查询S2男同学的姓名和住址⏹查询无电子邮件的学生姓名和年级信息⏹查询出生日期在1993年之后的S2的学生姓名和年级信息⏹查询参加了日期为2013年2月15日的“HTML和CSS网页技术”科目考试的成绩信息难点分析:注意各个表之间的关系,例如通过查看S1的年级编号在科目表中查询对应科目[上机练习3]练习:使用排序查询学生相关信息需求说明:--按照出生日期查询S1的学生信息。
--按日期由前到后、成绩由高到低的次序查询参加编号为1的科目考试信息。
--查询2013年3月22日参加“面向对象程序设计”考试的前5名学员成绩信息。
--查询y2的课时最多的科目名称及课时。
--查询年龄最小的学生所在的年级及姓名。
--查询2013年3月22日参加考试的最低分出现在哪个科目。
--查询学号为“S1101003”的学生参加过的所有考试信息,并按照时间前后次序显示。
--查询学号为“S1101003”的学生参加过的所有考试中最高分及时间、科目本章总结◆查询将逐行筛选表中的数据,最后将符合要求的记录重新组合成“记录集”,记录集的结构类似于表结构。
◆使用IS NULL 判断一行中的某个列是否为空。
◆使用ORDER BY进行查询记录集的排序,并且可以按照多个列进行排序。
◆在查询中,可以使用常量、表达式、运算符。
◆在查询中使用函数,能够像程序中那样处理数据。
本章作业一.选择题1.Employee表中有三列:EmpId,EmpGrade,EmpsalaryGrade,并且列值都是整型数据类型,则以下()中的语句能正确执行。
A、select EmpId from Employee order by EmpId where EmpId=EmpGradeB、select EmpId from Employee where EmpId=EmpGrade=EmpSalaryGradeC、select EmpId from Employee order by EmpGrade+EmpSalaryGradeD、select EmpId, EmpSalaryGrade from Employee where EmpGrade+EmpSalaryGrad e2.表Employee中,LastName列保存顾客的姓,FirstName列保存顾客的名。
现在需要查询顾客姓名的组合,例如,某行数据中LastName的值为“张”,FirstName的值为“国华”,查询结果应该返回“张国华”,则正确的查询语句为()。
A.select Lastname, Firstname from employeeB.select * from employee order by LastName,FirstNameC.select lastname + firstname from employeeD.select lastname and firstname from employee3.现在Students表中已经储存了数据,Nation列的数据储存了学生的民族信息,默认值应该为“汉族”,可是在设计表的时候没有考虑,现在已经输入了大量的数据。
对于少量民族的学生,民族的信息已经输入;对于“汉族”的学生,数据都为空。
此时,如何解决这个问题()。
A.在表中为该列添加not null的约束B.使用“update students set Nation= ‘汉族’where Nation is null”更新数据C.使用“update students set default = ‘汉族’”更新数据D.手动输入所有的“汉族”信息4.一个小组正在开发大型的银行存款系统,系统中包含上百万条客户信息。
现在正在调试SQL 语句,以进行查询的优化。
可是,他们每次执行查询时,都返回好几百万条数据,显示查询结果非常耗时,此时,比较好的解决办法是()。
A.删除这些数据,只保留几行B.把这些数据转换到文本文件中,再在文本文件中执行查找C.在查询语句中使用它LIMIT子句限制返回行D.在查询语句中使用order by进行排序5.执行以下SQL语句:Select percent SName,SAddress from Students limit 0,40结果返回了20条数据,则()。
A.表中只有40条数据B.表中只有20条数据C.表中大约有50条数据D.表中大约有100条数据6.在Math表中有Ori和Dest两列,要把Ori列的平方根写到Dest列,正确的SQL语句为()A.update Math set Dest = SQRT(Ori)B.update Math set Ori = Ori/2C.select Dest from Math set Dest = Ori.SQRTD.select Ori from Math Set Dest = Ori/27.以下()能够得到今天属于哪个月份。