数据库的查询和视图.ppt
《数据库的查询和视图.ppt》由会员分享,可在线阅读,更多相关《数据库的查询和视图.ppt(126页珍藏版)》请在三一办公上搜索。
1、第4章 数据库的查询和视图,劳东青信息工程学院2011年4月,主要内容,4.1 关系运算,4.2 数据库的查询,4.3 视图,4.4 游标,4.1 关系运算,什么是关系运算?教材P2中提到有种数据模型为关系模型。其特点为:以二维表格(即关系表)的形式组织数据库中的数据。因此,可将关系运算理解为表的运算。关系运算的特点:运算的对象和结果都是表。关系运算的分类:传统的集合运算:并、差、交等专门的关系运算:选择、投影、连接等,4.1 关系运算,选 择(selection)又称限制,是一种单目运算。选择运算用于按给定的条件,从表中选出满足条件的行(即记录),形成一个新表作为运算结果。记为:F(R),只
2、涉及到单个操作数的运算,选择运算符,条件表达式,被操作的表,4.1 关系运算,例,假设存在表T,例:假设要在T表中找出T120的行(或记录)形成一个新表,则运算式为?T120(T),4.1 关系运算,投 影(Projection)单目运算。用于从表中选出指定的属性值组成一个新表。投影操作主要是从列的角度进行运算。记为:A(R),投影运算符,属性名(即列名),被操作的表,4.1 关系运算,例,假设存在表T,例:假设要查询T表中T1、T2、T5的值,即要求在T表中对T1、T2、T5进行投影,则运算式为?T1,T2,T5(T),4.1 关系运算,连 接(JOIN)也称为连接,是一种双目运算。用于把两
3、个表中的行按照给定的条件进行拼接而形成新表。记为:RS,F是条件,R、S是被操作的表,F,4.1 关系运算,两类常用连接运算等值连接:要求两个表的某些列值相等的连接,记为:RS自然连接:特殊的等值连接,要求连接的两个表必须具有共同的属性(列),并且必须在结果中把重复的属性列去掉。记为:RS,A=B,4.1 关系运算,例,假设存在关系R,关系S,一般连接、等值连接、自然连接,4.1 关系运算,一般连接将关系R与S连接起来,要求关系R中C列的值小于关系S中E列的值。,4.1 关系运算,等值连接将关系R与S连接起来,要求关系R中B列的值等于关系S中B列的值。,4.1 关系运算,自然连接将关系R与S连
4、接起来,要求关系R中B列的值等于关系S中B列的值。,RS,主要内容,4.1 关系运算,4.2 数据库的查询,4.3 视图,4.4 游标,4.2 数据库的查询,Select的语法格式:SELECT,INTO FROM,WHERE GROUP BY HAVING ORDER BY ASC|DESC;,4.2 数据库的查询,SELECT子句:指定要显示的属性列FROM子句:指定查询对象(基本表或视图)WHERE子句:指定查询条件GROUP BY子句:对查询结果按指定列的值分组,该属性列值相等的元组为一个组。通常会在每组中作用集函数。HAVING短语:筛选出只有满足指定条件的组,只能跟在GROUP B
5、Y子句后。ORDER BY子句:对查询结果表按指定列值的升序或降序排序。INTO子句:创建新表,并将查询结果插入新表。,4.2 数据库的查询,(一)简单单表查询,简单单表查询语句只包括SELECT子句和FROM子句。1.选择表中的若干列。不同列之间要用英文逗号隔开。【例1】查询数据库XSCJ的学生表中所有学生的学号、姓名、出生日期。Use xscjSelect 学号,姓名,出生日期From 学生表,(一)简单单表查询,2.选择表中所有列。在SELECT关键字后面列出所有列名 使用“*”表示选择所有列【例2】查询数据库XSCJ的成绩表中所有数据。法一:use xscjselect 学号,课程号,
6、成绩,备注from 成绩表法二:use xscjselect*from 成绩表,(一)简单单表查询,【例3】查询数据库xscj的学生表中涉及的学院有哪些?Use xscjSelect 学院编号From 学生表存在问题:太多重复的行。3.消除结果集中的重复行(P81)通过在select后面增加关键字 Distinct 来消除重复行。Use xscjSelect distinct 学院编号From 学生表,(一)简单单表查询,【例4】查询数据库XSCJ的学生表中学生的姓名及性别。Use xscj select 姓名,性别 from 学生表存在问题:“1”、“0”分别代表什么?有没有办法让显示的结果
7、用“男”、“女”来代替“1”或“0”?4.替换查询结果中数据(P80)通过 CASE 表达式替换数据。其语法格式如下:CaseWhen 条件1 then 表达式1When 条件2 then 表达式2Else 表达式end,(一)简单单表查询,【例4】查询数据库XSCJ的学生表中学生的姓名及性别。Use xscjSelect 姓名,性别=CaseWhen 性别=1 then 男When 性别=0 then 女EndFrom 学生表,(一)简单单表查询,【例5】查询学生表中所有学生的学号、姓名和总学分,对其总学分按以下规则进行替换:若总学分为空值,则替换为“尚未选课”;若总学分小于50,则替换为“
8、不及格”;若总学分在50与52之间,则替换为“合格”;若总学分大于52,则替换为“优秀”。列标题更改为“等级”。,USE XSCJSELECT 学号,姓名,等级=CASE WHEN 总学分 IS NULL THEN 尚未选课WHEN 总学分=50 and 总学分=52 THEN 合格ELSE 优秀ENDFROM 学生表,(一)简单单表查询,【例6】查询数据库XSCJ的学生表中学生的姓名及年龄。存在问题:学生表中仅有出生日期列,没有年龄列。5.计算列值(P81)Use xscjSelect 姓名,year(2011-1-1)-year(出生日期)From 学生表可使用的算术运算符:+(加)、-(
9、减)、*(乘)、/(除)、%(取余)。除%不适用与money和smallmoney之外,其他运算符皆适用于数值数据类型(int、float等)、money和smallmoney数据类型。(P81),Year函数用于提取日期数据中的年份。见P94。,(一)简单单表查询,例6中存在问题:结果集中产生的新列的列标题不直观。6.定义列别名(P78)通过 AS 关键字指定列标题名:列名 AS 别名计算列中,通过赋值号=来指定列标题名:别名=表达式【例7】查询数据库XSCJ的学生表中学生的姓名及年龄,并指定年龄列的列标题为“年龄”。法一:Select 姓名,2011-year(出生日期)AS 年龄 fro
10、m 学生表法二:Select 姓名,年龄=2011-year(出生日期)from 学生表,(一)简单单表查询,7.聚合函数(P82)目标列表达式中,除了可以进行加减乘除等运算之外,还可以包含所谓的聚合函数。,(一)简单单表查询,(1)SUM和AVG函数SUM总和;AVG平均值语法格式:SUM/AVG(expression)Expression:常量、列、函数或表达式。数据类型:数值数据类型、货币数据类型。SUM/AVG忽略NULL值。【例8】求数据库XSCJ的成绩表中学生的成绩总和以及平均值。Use xscjSelect sum(成绩)总和,avg(成绩)平均值From 成绩表,(一)简单单表
11、查询,(2)MAX和MIN函数MAX最大值;MIN最小值语法格式:max/min(expression)Expression:常量、列、函数或表达式。数据类型:数值、时间、字符数据类型。MIN/MAX忽略NULL值。【例8】求数据库XSCJ的成绩表中学生成绩的最高分以及最低分。Use xscjSelect max(成绩)最大值,min(成绩)最小值From 成绩表,(一)简单单表查询,(3)COUNT函数用于统计满足条件的行(记录)数或总行(记录)数。语法格式:COUNT(ALL|DISTINCT expression|*)Expression:表达式。数据类型是除text、image或nte
12、xt之外的任何类型。COUNT忽略NULL值。【例8】求数据库XSCJ的学生表中学生的总人数。Use xscjSelect count(*)总人数,count(学号)总数From 成绩表,(一)简单单表查询,【例9】统计备注不为空的学生数。SELECT COUNT(备注)AS 备注不为空的学生数 FROM 学生表;【例10】统计总学分在50分以上的人数。SELECT COUNT(总学分)AS 总学分在50分以上的人数 FROM 学生表 WHERE 总学分50【例11】求选修了课程的学生总数。SELECT COUNT(DISTINCT 学号)FROM 成绩表,(一)简单单表查询,8.限制结果集返
13、回函数当返回的结果集行数很多时,可用top语句限制返回的行数。其语法格式如下:TOP n percent返回 N 行或 n%行记录。【例12】查询数据库xscj的学生表中的学生信息,分别返回前5个和前5%个学生的信息。Use xscj Select top 5*from 学生表Use xscj Select top 5 percent*from 学生表,(二)复杂查询,(二)复杂查询条件查询,WHERE子句用于指定查询条件,因而进行条件查询,实际上就是在简单单表查询的基础上,增加where子句,限制返回的行的搜索条件。(1)比较两个表达式的值的查询9个比较运算符:=(等于)、(大于)、=(大于
14、等于)、(不等于)、!=(不等于)、!(不大于)【例13】查询数据库xscj的学生表中总学分不大于50的学生信息。Use xscj select*from 学生表 where 总学分!50,(二)复杂查询条件查询,(2)空值比较查询Is null,用于指定一个表达式的值为空值。Is not null,用于指定一个表达式的值不为空值。【例14】查询数据库xscj的学生表中备注不为空的学生信息。Use xscj select*from 学生表Where 备注 is not null,(二)复杂查询条件查询,(3)模糊查询Like,用于查询与给定字符串匹配的记录。Not like,用于查询与给定字符
15、串不匹配的记录。notlike表达式中的给定字符串通常带通配符。,(二)复杂查询条件查询,(3)模糊查询【例15】查询数据库xscj的学生表中姓“王”的学生的学号、姓名、总学分。Use xscj select 学号,姓名,总学分 from 学生表Where 姓名 like 王%【例16】查询数据库xscj的学生表中学号倒数第3个数字为1,且倒数第1个数在15之间的学生信息。Use xscj select*from 学生表Where 学号 like%1_12345/*1-5*/,(二)复杂查询条件查询,(4)使用 AND 和 OR 运算符AND,用于查询同时满足AND连接的两个条件的行。OR,用
16、于查询满足其中任意一个条件的行。共同点:用来联结多个查询条件。【例17】查询学生表中总学分在50以上的女学生的姓名、学分。Select 姓名,学分 from 学生表Where 性别=0 and 总学分50【例18】查询学生表中总学分在50以上或性别为女的学生的姓名、学分。Select 姓名,学分 from 学生表Where 性别=0 or 总学分50,(二)复杂查询条件查询,(5)确定范围Between,在两者之间。多用于数值数据的范围比较。Not Between,不在之间。多用于数值数据类型的范围比较。Not Between 表达式1 and 表达式2【例19】查询学生表中总学分在50到53
17、之间的学生信息。Select*from 学生表 where 总学分 between 50 and 53【例20】查询学生表中总学分大于53或小于50的学生信息。Select*from 学生表 where 总学分 not between 50 and 53,(二)复杂查询条件查询,(6)确定集合In,在集合之内。多用于非数值数据类型的范围比较。In(表达式1,表达式2表达式n)Not In,不在集合之内。用于非数值数据的范围比较。Not In(表达式1,表达式2,表达式n)【例21】查询考生信息表中信息学院、经管学院、生命学院的考生信息。Select*from 学生表 where 学员名 in(
18、信息学院,经管学院,生命学院)【例22】查询考生信息表中学院名不为信息学院、经管学院、生命学院的考生信息信息。Select*from 学生表 where 学院名 not in(信息学院,经管学院,生命学院),(二)复杂查询条件查询,Contains安装全文索引组建的参考资料http:/,(二)复杂查询,(二)复杂查询分组查询,GROUP BY子句:作用对象:查询的中间结果表作用:细化聚集函数的作用对象未对查询结果分组,聚集函数将作用于整个查询结果对查询结果分组后,聚集函数将分别作用于每个组 分组方法:按指定的一列或多列值分组,值相等的为一组使用GROUP BY子句后,SELECT子句的列名列表
19、中只能出现分组属性和聚集函数,(二)复杂查询分组查询,GROUP BY的语法格式:group by 分组表达式 with rollup|cubewith rollup:当按照N列的值分组时,返回N+1个分组列的统计行。cube:当按照N列的值分组时,返回分组列各组合的统计行。,(二)复杂查询分组查询,【例23】分别统计各门课程的选课人数。use xscjselect 课程号,count(*)from 成绩表group by 课程号,(二)复杂查询分组查询,【例24】分别统计数据库xscj的学生表中男学生和女学生的总数。use xscjselect 性别=casewhen 性别=1 then 男
20、else 女end,count(*)from 学生表group by 性别,(二)复杂查询分组查询,【例25】统计数据库xscj的学生表中各个专业的男生人数、女生人数及学生总数use xscjselect 专业,性别,count(*)AS 人数from 学生表group by 专业,性别 with rollup,(二)复杂查询分组查询,【例26】统计数据库xscj的学生表中各个专业的男生人数、女生人数、学生总数,及男生总数、女生总数、学生总人数use xscjselect 专业,性别,count(*)AS 人数from 学生表group by 专业,性别 with cube,(二)复杂查询分组
21、查询,Having子句用于对分组数据进行进一步的筛选,用法与where字句类似HAVING子句与WHERE子句的区别:所处位置不同:having子句必须在group by语句之后,where子句必须在group by语句之前。作用对象不同:WHERE子句作用于基表或视图,从中选择满足条件的行;HAVING子句作用于组,从中选择满足条件的组。Having子句可包含聚合函数,Where子句不可以。,(二)复杂查询分组查询,【例27】统计数据库xscj的学生表中“工商管理”专业的男生人数、女生人数、学生总数。use xscjselect 专业,性别,count(*)AS 人数from 学生表grou
22、p by 专业,性别 with rolluphaving 专业=工商管理,(二)复杂查询,(二)复杂查询排序,ORDER BY语句可以按一个或多个属性列排序Order by 排序表达式 ASC|DESC分组表达式:列名、表达式、正整数(映射表中对应位置上的列)ASC升序;DESC降序;缺省值为升序当排序列含空值时ASC:排序列为空值的元组最后显示DESC:排序列为空值的元组最先显示,(二)复杂查询排序,【例28】将学生表中的学生按出生时间顺序排序。use xscj select*from 学生表 order by 出生时间【例29】将成绩表中的学生按课程及成绩从高到低排序。use xscj s
23、elect*from 成绩表order by 课程号,成绩,4.2 数据库的查询,(三)多表查询,(三)多表查询连接查询,连接查询:同时涉及多个表的查询,结果通常是含有参加连接运算的两个表(或多个表)的指定列的表。连接条件中的各连接字段类型必须是可比的,但名字不必是相同的。连接查询包括:等值连接、自然连接、一般连接、内连接、外连接、左连接、右连接等。连接查询中的连接条件通过WHERE子句表达,连接条件和元组选择条件之间用AND(与)操作符衔接。在连接查询中,用来连接两个表的条件称为连接条件或连接谓词。,(三)多表查询连接查询,1、等值连接和非等值连接 一般格式:.比较运算符有:=、=、=、!=
24、当连接运算符为=时,该连接操作称为等值连接,否则,为非等值连接。,(三)多表查询连接查询,【例30】查询选修了课程的学生信息及其选课信息。SELECT 学生表.*,成绩表.*FROM 学生表,成绩表WHERE 学生表.学号=成绩表.学号【例31】查找数据库xscj中选修了206号课程,并且成绩在80分以上的学生姓名成绩。SELECT 姓名,成绩 FROM 学生表,成绩表WHERE 学生表.学号=成绩表.学号 and 课程号=206 and 成绩80,(三)多表查询连接查询,2、自然连接当等值连接中的连接列相同,并且在SELECT子句中去除了重复列时,则该连接操作为自然连接。【例32】选修了课程
25、的学生信息及其选课信息。SELECT 学号,姓名,性别,出生时间,总学分,备注,课程号,成绩,备注 FROM 学生表,成绩表WHERE 学生表.学号=成绩表.课程号,(三)多表查询连接查询,3、自连接:一个表与其自己进行连接需要给表起别名以示区别由于所有属性名都是同名属性,因此必须使用别名前缀【例33】查询选修了101号课程和102号课程的学生学号 SELECT a.学号 FROM 成绩表 a,成绩表 b WHERE a.学号=b.学号 AND a.课程号=101 AND b.课程号=102,(三)多表查询连接查询,4、内连接用INNER关键字指定的连接。按照ON指定的连接条件,返回满足条件的
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据库 查询 视图
链接地址:https://www.31ppt.com/p-5358460.html