数据库的查询和视图.ppt
《数据库的查询和视图.ppt》由会员分享,可在线阅读,更多相关《数据库的查询和视图.ppt(126页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、数据库的查询和视图 Still waters run deep.流静水深流静水深,人静心深人静心深 Where there is life,there is hope。有生命必有希望。有生命必有希望2011劳东青主要内容主要内容4.1 关系运算关系运算4.2 数据库的查询数据库的查询4.3 视图视图4.4 游标游标2011劳东青4.1 关系运算p什么是关系运算?什么是关系运算?教材P2中提到有种数据模型为关系模型。其特点为:以二维表格(即关系表)的形式组织数据库中的数据。因此,可将关系运算理解为表的运算。p关系运算的特点特点:运算的对象和结果都是表。p关系运算的分类关系运算的分类:传统的集合运
2、算传统的集合运算:并、差、交等专门的关系运算专门的关系运算:选择、投影、连接等2011劳东青4.1 关系运算p选选 择(择(selectionselection)又称限制,是一种单目运算。选择运算用于按给定的条件,从表中选出满足条件的从表中选出满足条件的行行(即记录),形成一个新表作为运算结果。记为:F F(R)(R)只涉及到单个只涉及到单个操作数的运算操作数的运算选择运算符选择运算符条件表达式条件表达式被操作的表被操作的表2011劳东青4.1 关系运算p例,假设存在表Tp例:例:假设要在假设要在T T表中找出表中找出T120T120的行(或记录)形成一个新的行(或记录)形成一个新表,则运算式
3、为表,则运算式为?T120T120(T)(T)2011劳东青4.1 关系运算p投投 影(影(ProjectionProjection)单目运算。用于从表中选出指定的属性值组成一个新表。投影操作主要是从列的角度进行运算。记为:A(R)投影运算符投影运算符属性名(即属性名(即列名)列名)被操作的表被操作的表2011劳东青4.1 关系运算p例,假设存在表Tp例:假设要查询例:假设要查询T T表中表中T1T1、T2T2、T5T5的值,即要求在的值,即要求在T T表中对表中对T1T1、T2T2、T5T5进行投影,则运算式为进行投影,则运算式为?T1,T2,T5(T)T1T2T51A1M2B1N3A2O5
4、DP20FQ100A3N2011劳东青4.1 关系运算p连连 接(接(JOIN)也称为连接,是一种双目运算。用于把两个表中的行按照给定的条件进行拼接而形成新表。记为:RSF是条件是条件R、S是被操是被操作的表作的表F2011劳东青4.1 关系运算p两类常用连接运算两类常用连接运算等值连接等值连接:要求两个表的某些列值相等的连接,记为:RS自然连接自然连接:特殊的等值连接特殊的等值连接,要求连接的两个表必须具有共同的属性(列),并且必须在结果中把重复的属性列去掉。记为:RSA=B2011劳东青4.1 关系运算p例,假设存在关系R,关系S一般连接一般连接、等值连接等值连接、自然连接自然连接2011
5、劳东青4.1 关系运算p一般连接一般连接将关系R与S连接起来,要求关系R中C列的值小于小于关系S中E列的值。CERS2011劳东青4.1 关系运算p等值连接等值连接将关系R与S连接起来,要求关系R中B列的值等于等于关系S中B列的值。R.B=S.BRS2011劳东青4.1 关系运算p自然连接自然连接将关系R与S连接起来,要求关系R中B列的值等于等于关系S中B列的值。RS2011劳东青2022/11/1314主要内容主要内容4.1 关系运算关系运算4.2 数据库的查询数据库的查询4.3 视图视图4.4 游标游标2011劳东青4.2 数据库的查询pSelectSelect的语法格式:的语法格式:SE
6、LECT,INTO FROM,WHERE GROUP BY HAVING ORDER BY ASC|DESC ;2011劳东青4.2 数据库的查询pSELECTSELECT子句子句:指定要显示的属性列pFROMFROM子句子句:指定查询对象(基本表或视图)pWHEREWHERE子句子句:指定查询条件pGROUP BYGROUP BY子句子句:对查询结果按指定列的值分组,该属性列值相等的元组为一个组。通常会在每组中作用集函数。pHAVINGHAVING短语短语:筛选出只有满足指定条件的组,只能跟在GROUP BY子句后。pORDER BYORDER BY子句子句:对查询结果表按指定列值的升序或降
7、序排序。pINTOINTO子句子句:创建新表,并将查询结果插入新表。2011劳东青4.2 数据库的查询2011劳东青(一)简单单表查询p简单单表查询语句只包括SELECT子句和FROM子句。1.1.选择表中的若干列选择表中的若干列。不同列之间要用英文逗号隔开。【例1】查询数据库XSCJ的学生表中所有学生的学号、姓名、出生日期。Use xscjSelect 学号学号,姓名姓名,出生日期出生日期From 学生表2011劳东青(一)简单单表查询2.2.选择表中所有列。选择表中所有列。在SELECT关键字后面列出所有列名 使用“*”表示选择所有列【例2】查询数据库XSCJ的成绩表中所有数据。法一法一:
8、use xscjselect 学号,课程号,成绩,备注from 成绩表法二法二:use xscjselect*from 成绩表2011劳东青(一)简单单表查询【例3】查询数据库xscj的学生表中涉及的学院有哪些?Use xscjSelect 学院编号From 学生表p存在问题存在问题:太多重复的行。3.3.消除结果集中的重复行(消除结果集中的重复行(P81P81)通过在select后面增加关键字 Distinct Distinct 来消除重复行。Use xscjSelect distinct 学院编号From 学生表2011劳东青(一)简单单表查询【例4】查询数据库XSCJ的学生表中学生的姓名
9、及性别。Use xscj select 姓名,性别 from 学生表p存在问题存在问题:“1”、“0”分别代表什么?有没有办法让显示的结果用“男”、“女”来代替“1”或“0”?4.4.替换查询结果中数据(替换查询结果中数据(P80P80)通过 CASE 表达式替换数据。其语法格式如下:CaseWhen 条件1 then 表达式1When 条件2 then 表达式2Else 表达式end2011劳东青(一)简单单表查询【例4】查询数据库XSCJ的学生表中学生的姓名及性别。Use xscjSelect 姓名,性别=CaseWhen 性别=1 then 男When 性别=0 then 女EndFro
10、m 学生表2011劳东青(一)简单单表查询【例5】查询学生表中所有学生的学号、姓名和总学分,对其总学分按以下规则进行替换:若总学分为空值,则替换为“尚未选课”;若总学分小于50,则替换为“不及格”;若总学分在50与52之间,则替换为“合格”;若总学分大于52,则替换为“优秀”。列标题更改为“等级”。USE XSCJSELECT 学号学号,姓名姓名,等级等级=CASE WHEN 总学分总学分 IS NULL THEN 尚未选课尚未选课WHEN 总学分总学分=50 and 总学分总学分50【例11】求选修了课程的学生总数。SELECT COUNT(DISTINCT 学号学号)FROM 成绩表201
11、1劳东青(一)简单单表查询8.8.限制结果集返回函数限制结果集返回函数p当返回的结果集行数很多时,可用top语句限制返回的行数。其语法格式如下:TOP TOP n n percent percentp返回 N 行或 n%行记录。【例12】查询数据库xscj的学生表中的学生信息,分别返回前5个和前5%个学生的信息。Use xscj Select top 5*from 学生表Use xscj Select top 5 percent*from 学生表2011劳东青(二)复杂查询2011劳东青(二)复杂查询条件查询pWHEREWHERE子句子句用于指定查询条件,用于指定查询条件,因而进行条件查询,实
12、际上就是在简单单表查询的基础上,增加where子句,限制返回的行的搜索条件。(1 1)比较两个表达式的值的查询)比较两个表达式的值的查询p9个比较运算符:=(等于)、(等于)、(小于)、(小于)、=(大于)、(大于)、=(大于等于)、(大于等于)、(不等于)、(不等于)、!=!=(不等(不等于)、于)、!(不大于)(不大于)【例13】查询数据库xscj的学生表中总学分不大于50的学生信息。Use xscj select*from 学生表 where 总学分!502011劳东青(二)复杂查询条件查询(2 2)空值比较查询)空值比较查询pIs nullIs null,用于指定一个表达式的值为空值。
13、pIs not nullIs not null,用于指定一个表达式的值不为空值。【例14】查询数据库xscj的学生表中备注不为空的学生信息。Use xscj select*from 学生表Where 备注 is not null2011劳东青(二)复杂查询条件查询(3 3)模糊查询)模糊查询pLikeLike,用于查询与给定字符串用于查询与给定字符串匹配匹配的记录。的记录。pNot likeNot like,用于查询与给定字符串用于查询与给定字符串不匹配不匹配的记录。的记录。pnotlike表达式中的给定字符串通常带通配符。通配符说明%代表0个或多个字符_(下划线)代表单个字符指定范围(如a-
14、f、0-9、09、012345)或集合(如abcdef、赵钱孙李)中的任何单个字符指定不属于范围(如a-f、0-9)或集合(如abcdef)的任何单个字符2011劳东青(二)复杂查询条件查询(3 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*/20
15、11劳东青(二)复杂查询条件查询(4 4)使用)使用 AND AND 和和 OR OR 运算符运算符pANDAND,用于查询同时满足AND连接的两个条件的行。pOROR,用于查询满足其中任意一个条件的行。p共同点共同点:用来联结多个查询条件。【例17】查询学生表中总学分在50以上的女学生的姓名、学分。Select 姓名,学分 from 学生表Where 性别=0 and 总学分50【例18】查询学生表中总学分在50以上或性别为女的学生的姓名、学分。Select 姓名,学分 from 学生表Where 性别=0 or 总学分502011劳东青(二)复杂查询条件查询(5 5)确定范围)确定范围pB
16、etweenBetween,在两者之间。多用于数值数据的范围比较。pNot BetweenNot Between,不在之间。多用于数值数据类型的范围比较。Not Between Not Between 表达式表达式1 and 1 and 表达式表达式2 2【例19】查询学生表中总学分在50到53之间的学生信息。Select*from 学生表 where 总学分 between 50 and 53【例20】查询学生表中总学分大于53或小于50的学生信息。Select*from 学生表 where 总学分 not between 50 and 532011劳东青(二)复杂查询条件查询(6 6)确定
17、集合)确定集合pInIn,在集合之内。多用于非数值数据类型的范围比较。In(In(表达式表达式1,1,表达式表达式22表达式表达式n n)pNot InNot In,不在集合之内。用于非数值数据的范围比较。Not In(Not In(表达式表达式1,1,表达式表达式2,2,表达式表达式n)n)【例21】查询考生信息表中信息学院、经管学院、生命学院的考生信息。Select*from 学生表 where 学员名 in(信息学院,经管学院,生命学院)【例22】查询考生信息表中学院名不为信息学院、经管学院、生命学院的考生信息信息。Select*from 学生表 where 学院名 not in(信息学
18、院,经管学院,生命学院)2011劳东青(二)复杂查询条件查询pContainsContains安装全文索引组建的参考资料http:/ BYGROUP BY子句:子句:作用对象:查询的中间结果表作用:细化聚集函数的作用对象未对查询结果分组,聚集函数将作用于整个查询结果对查询结果分组后,聚集函数将分别作用于每个组 分组方法:按指定的一列或多列一列或多列值分组,值相等的为一组使用GROUP BY子句后,SELECT子句的列名列表中只能出现分组属性和聚集函数2011劳东青(二)复杂查询分组查询pGROUP GROUP BYBY的语法格式的语法格式:group bygroup by 分组表达式 with
19、 with rolluprollup|cubecubewith rollup:当按照N列的值分组时,返回N+1个分组列的统计行。cube:当按照N列的值分组时,返回分组列各组合的统计行。2011劳东青(二)复杂查询分组查询【例23】分别统计各门课程的选课人数。use xscjselect 课程号,count(*)from 成绩表group by 课程号2011劳东青(二)复杂查询分组查询【例24】分别统计数据库xscj的学生表中男学生和女学生的总数。use xscjselect 性别=casewhen 性别=1 then 男else 女end,count(*)from 学生表group by
20、性别2011劳东青(二)复杂查询分组查询【例25】统计数据库xscj的学生表中各个专业的男生人数、女生人数及学生总数use xscjselect 专业,性别,count(*)AS 人数from 学生表group by 专业,性别 with rollup2011劳东青(二)复杂查询分组查询【例26】统计数据库xscj的学生表中各个专业的男生人数、女生人数、学生总数,及男生总数、女生总数、学生总人数use xscjselect 专业,性别,count(*)AS 人数from 学生表group by 专业,性别 with cube2011劳东青(二)复杂查询分组查询pHavingHaving子句子句
21、用于对分组数据进行进一步的筛选,用法与where字句类似HAVING子句与WHERE子句的区别:所处位置不同:所处位置不同:having子句必须在group by语句之后,where子句必须在group by语句之前。作用对象不同作用对象不同:WHERE子句作用于基表或视图,从中选择满足条件的行;HAVING子句作用于组,从中选择满足条件的组。Having子句可包含聚合函数聚合函数,Where子句不可以。2011劳东青(二)复杂查询分组查询【例27】统计数据库xscj的学生表中“工商管理”专业的男生人数、女生人数、学生总数。use xscjselect 专业,性别,count(*)AS 人数f
22、rom 学生表group by 专业,性别 with rolluphaving 专业=工商管理2011劳东青(二)复杂查询2011劳东青(二)复杂查询排序pORDER BYORDER BY语句语句可以按一个或多个属性列排序Order by 排序表达式 ASC|DESC分组表达式:列名、表达式、正整数(映射表中对应位置上的列)ASC升序;DESC降序;缺省值为升序当排序列含空值时ASCASC:排序列为空值的元组最后显示DESCDESC:排序列为空值的元组最先显示2011劳东青(二)复杂查询排序【例28】将学生表中的学生按出生时间顺序排序。use xscj select*from 学生表 orde
23、r by 出生时间【例29】将成绩表中的学生按课程及成绩从高到低排序。use xscj select*from 成绩表order by 课程号,成绩2011劳东青4.2 数据库的查询2011劳东青(三)多表查询2011劳东青(三)多表查询连接查询p连接查询连接查询:同时涉及多个表的查询,结果通常是含有参加连接运算的两个表(或多个表)的指定列的表。p连接条件中的各连接字段类型必须是可比的,但名字不必是相同的。p连接查询包括连接查询包括:等值连接、自然连接、一般连接、内连接、外连接、左连接、右连接等。p连接查询中的连接条件通过WHERE子句表达,连接条件和元组选择条件之间用AND(与)操作符衔接。
24、p在连接查询中,用来连接两个表的条件称为连接条件连接条件或连连接谓词接谓词。2011劳东青(三)多表查询连接查询1 1、等值连接和非等值连接、等值连接和非等值连接 一般格式:.p比较运算符有:=、=、=802011劳东青(三)多表查询连接查询2 2、自然连接、自然连接当等值连接中的连接列相同,并且在SELECT子句中去除了重复列时,则该连接操作为自然连接自然连接。【例32】选修了课程的学生信息及其选课信息。SELECT 学号学号,姓名姓名,性别性别,出生时间出生时间,总学分总学分,备注备注,课程号课程号,成绩成绩,备注备注 FROM 学生表,成绩表WHERE 学生表.学号=成绩表.课程号201
25、1劳东青(三)多表查询连接查询3 3、自连接、自连接:一个表与其自己进行连接需要给表起别名以示区别由于所有属性名都是同名属性,因此必须使用别名前缀【例33】查询选修了101号课程和102号课程的学生学号 SELECT a.学号 FROM 成绩表 a,成绩表 b WHERE a.学号=b.学号 AND a.课程号=101 AND b.课程号=1022011劳东青(三)多表查询连接查询4 4、内连接、内连接用INNER关键字指定的连接。按照ON指定的连接条件,返回满足条件的行返回满足条件的行。SELECT SELECT FROM FROM 1 InnerInner JOINJOIN 2 ON ON
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据库 查询 视图
限制150内