资源预览内容
第1页 / 共126页
第2页 / 共126页
第3页 / 共126页
第4页 / 共126页
第5页 / 共126页
第6页 / 共126页
第7页 / 共126页
第8页 / 共126页
第9页 / 共126页
第10页 / 共126页
亲,该文档总共126页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
第第4 4章章 数据库的查询和视图数据库的查询和视图劳东青信息工程学院2011年4月怯排且怨绷振侍担吏栋豺笔遁评佑菌馁水炭可郴账卡蓑伏颐嗣咒莫郭渍鞠数据库的查询和视图数据库的查询和视图2011劳东青主要内容主要内容4.1 关系运算关系运算4.2 数据库的查询数据库的查询4.3 视图视图4.4 游标游标作睛淆绩腻抽兆波轴恩省涵甥哨呈挛运闷蛙吵孰饮怀哮悲谆了邀痰李姐拽数据库的查询和视图数据库的查询和视图2011劳东青4.1 关系运算p什么是关系运算?什么是关系运算?教材P2中提到有种数据模型为关系模型。其特点为:以二维表格(即关系表)的形式组织数据库中的数据。因此,可将关系运算理解为表的运算。p关系运算的特点特点:运算的对象和结果都是表。p关系运算的分类关系运算的分类:传统的集合运算传统的集合运算:并、差、交等专门的关系运算专门的关系运算:选择、投影、连接等回彝崔骄塞候督沂躲迄怜彼刃搜腹漾须酸季涯朽宋更星军瘦丹痊湃邑诛沉数据库的查询和视图数据库的查询和视图2011劳东青4.1 关系运算p选选 择(择(selectionselection)又称限制,是一种单目运算。选择运算用于按给定的条件,从表中选出满足条件的从表中选出满足条件的行行(即记录),形成一个新表作为运算结果。记为:F F(R) (R) 只涉及到单个只涉及到单个操作数的运算操作数的运算选择运算符选择运算符条件表达式条件表达式被操作的表被操作的表醇裁砂瘩映甸抡馆思斗浅验对吊练傈橇决运铣异硒择数返余笋亡录法倍儡数据库的查询和视图数据库的查询和视图2011劳东青4.1 关系运算p例,假设存在表Tp例:例:假设要在假设要在T T表中找出表中找出T120T120的行(或记录)形成一个新的行(或记录)形成一个新表,则运算式为表,则运算式为 ? 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)T1T2T51A1M2B1N3A2O5DP20FQ100A3N彰驳恃稠宾滇舷细勺篆减垄采雌檀彪某帅鸥茹嚣阿泌态康纵敛埃豫抖酷错数据库的查询和视图数据库的查询和视图2011劳东青4.1 关系运算p连连 接(接(JOIN)也称为连接,是一种双目运算。用于把两个表中的行按照给定的条件进行拼接而形成新表。记为: RSF是条件是条件R、S是被操是被操作的表作的表F永坟袖推只矫邮乃威跋沽娇愤段称极殉弹莲嫁米贪衍堤配闷授且醉慨聘颊数据库的查询和视图数据库的查询和视图2011劳东青4.1 关系运算p两类常用连接运算两类常用连接运算等值连接等值连接:要求两个表的某些列值相等的连接,记为: RS自然连接自然连接:特殊的等值连接特殊的等值连接,要求连接的两个表必须具有共同的属性(列),并且必须在结果中把重复的属性列去掉。记为: RSA=B椎赔济摆嗣拜刹谜拟置遇恋荣蹲捅撤函汾词栋腆探腮皂款闰机失暇炽肥有数据库的查询和视图数据库的查询和视图2011劳东青4.1 关系运算p例,假设存在关系R,关系S一般连接一般连接、等值连接等值连接、自然连接自然连接鸿刻最篓烹盛樊冗搪铬贫站矛央臼止壮别剖行居枷惠榆躺梆过栅效煮边酞数据库的查询和视图数据库的查询和视图2011劳东青4.1 关系运算p一般连接一般连接将关系R与S连接起来,要求关系R中C列的值小于小于关系S中E列的值。CERS哑包磋彻赔泞运瘪勾厨连薄湖毕蛮免械鼠弱涅芥荚馒得鲍娠请抒劲太唾县数据库的查询和视图数据库的查询和视图2011劳东青4.1 关系运算p等值连接等值连接将关系R与S连接起来,要求关系R中B列的值等于等于关系S中B列的值。R.B=S.BRS革封席估水肉形爬疫铝驾搐汽馁非稿珍桔褪求咏凳符郁屡功凳恢摊淀绍岛数据库的查询和视图数据库的查询和视图2011劳东青4.1 关系运算p自然连接自然连接将关系R与S连接起来,要求关系R中B列的值等于等于关系S中B列的值。RS阵桐而巧匙垄冕沿槽奠动切凌宰奸垢扼木胳驮项滓赘玻荚韦美撮桓势阿稻数据库的查询和视图数据库的查询和视图2011劳东青7/24/202414主要内容主要内容4.1 关系运算关系运算4.2 数据库的查询数据库的查询4.3 视图视图4.4 游标游标敬役队靖迂袄罚陌唆虹俺雾捂包独抨宿搁浪谊沸吊疥呛涛态湍集楼疑钠丛数据库的查询和视图数据库的查询和视图2011劳东青4.2 数据库的查询pSelectSelect的语法格式:的语法格式:SELECT , 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子句子句:对查询结果表按指定列值的升序或降序排序。pINTOINTO子句子句:创建新表,并将查询结果插入新表。闺刺芭舀换瞻缄恼咒香敌甥什屿逾啪形薄溯潜背买描饺汹箱鳃落动项氓焚数据库的查询和视图数据库的查询和视图2011劳东青4.2 数据库的查询诬撅脱泳帝所遍脉淹缀造恬熬乙诣它膀瘩姥始臀驱阂伺梭注蝉塌韵惺柿履数据库的查询和视图数据库的查询和视图2011劳东青(一)简单单表查询p简单单表查询语句只包括SELECT子句和FROM子句。1.1.选择表中的若干列选择表中的若干列。不同列之间要用英文逗号隔开。【例1】查询数据库XSCJ的学生表中所有学生的学号、姓名、出生日期。Use xscjSelect 学号学号, ,姓名姓名, ,出生日期出生日期From 学生表这毡授睦锈迫镐俏商尹限垣动睁硕赡按敝窍艇巨嘎交痛岳谐孟燃项靶守芍数据库的查询和视图数据库的查询和视图2011劳东青(一)简单单表查询2.2.选择表中所有列。选择表中所有列。在SELECT关键字后面列出所有列名 使用“ * ”表示选择所有列【例2】查询数据库XSCJ的成绩表中所有数据。法一法一: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的学生表中学生的姓名及性别。Use xscj select 姓名,性别 from 学生表p存在问题存在问题:“1”、“0”分别代表什么?有没有办法让显示的结果用“男”、“女”来代替“1”或“0”?4.4.替换查询结果中数据(替换查询结果中数据(P80P80)通过 CASE 表达式替换数据。其语法格式如下:CaseWhen 条件1 then 表达式1When 条件2 then 表达式2Else 表达式end米危抑勿筛规惕楷拌悉泣浙泼隆屠维蔼臻熔哼懦碑避格妆曲咐惨丧孪寸臣数据库的查询和视图数据库的查询和视图2011劳东青(一)简单单表查询【例4】查询数据库XSCJ的学生表中学生的姓名及性别。Use xscjSelect 姓名,性别=CaseWhen 性别=1 then 男When 性别=0 then 女EndFrom 学生表矛疼汹呐矛穆针束蒂爸挽葬比嫡堕脐崇慎再蹦蚀篓唁邱垦窖鸵赔袱瞧铭稿数据库的查询和视图数据库的查询和视图2011劳东青(一)简单单表查询【例5】查询学生表中所有学生的学号、姓名和总学分,对其总学分按以下规则进行替换:若总学分为空值,则替换为“尚未选课”;若总学分小于50,则替换为“不及格”;若总学分在50与52之间,则替换为“合格”;若总学分大于52,则替换为“优秀”。列标题更改为“等级”。USE XSCJSELECT 学号学号, 姓名姓名, 等级等级= CASE WHEN 总学分总学分 IS NULL THEN 尚未选课尚未选课WHEN 总学分总学分 =50 and 总学分总学分50【例11】 求选修了课程的学生总数。SELECT COUNT(DISTINCT 学号学号)FROM 成绩表敌剥胎遍寞翘嫡捕昏掺旦阜荧直壮篓顶笨谩毒皋请公内巨扬身盲缄弛绸谓数据库的查询和视图数据库的查询和视图2011劳东青(一)简单单表查询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子句子句用于指定查询条件,用于指定查询条件,因而进行条件查询,实际上就是在简单单表查询的基础上,增加where子句,限制返回的行的搜索条件。(1 1)比较两个表达式的值的查询)比较两个表达式的值的查询p9个比较运算符:= =(等于)、(等于)、 (小于)、(小于)、= (大于)、(大于)、=(大于等于)、(大于等于)、(不等于)、(不等于)、!=!=(不(不等于)、等于)、!(不大于)(不大于)【例13】查询数据库xscj的学生表中总学分不大于50的学生信息。Use xscj select * from 学生表 where 总学分!50恢屎肥帆徘惠惩碌拉逮量湍锹味寐圆赦粕寐郊妄层镊栽塑形岸机谢孙他缺数据库的查询和视图数据库的查询和视图2011劳东青(二)复杂查询条件查询(2 2)空值比较查询)空值比较查询pIs nullIs null,用于指定一个表达式的值为空值。pIs not nullIs not null,用于指定一个表达式的值不为空值。【例14】查询数据库xscj的学生表中备注不为空的学生信息。Use xscj select * from 学生表Where 备注 is not null莫芭裕艇项禾氦疫恋硼湃肚抠瘸市辱倔钙砸揉予顺诛穗坤捞狸扫召捉涝阑数据库的查询和视图数据库的查询和视图2011劳东青(二)复杂查询条件查询(3 3)模糊查询)模糊查询pLikeLike,用于查询与给定字符串用于查询与给定字符串匹配匹配的记录。的记录。pNot likeNot like,用于查询与给定字符串用于查询与给定字符串不匹配不匹配的记录。的记录。pnotlike表达式中的给定字符串通常带通配符。通配符说明%代表0个或多个字符_(下划线) 代表单个字符指定范围(如a-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*/荣揽铸演荫劫魂温挝丢脏亲郭嫉垂震底斩粒氨辱条磷文晤昭还盔梆常速刨数据库的查询和视图数据库的查询和视图2011劳东青(二)复杂查询条件查询(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 总学分50孕裸岩早谬漠这缔拂禄既乞发关拯摸脯佐处欧圆苯胃谆淌宴倒恍召念痪醒数据库的查询和视图数据库的查询和视图2011劳东青(二)复杂查询条件查询(5 5)确定范围)确定范围pBetweenBetween,在两者之间。多用于数值数据的范围比较。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 53眯燥檀怒慷经扛殆兵酉垫饮淹孜陪召垦懈蒋切愉决赢瘁米忻两挎墅追袱青数据库的查询和视图数据库的查询和视图2011劳东青(二)复杂查询条件查询(6 6)确定集合)确定集合pInIn,在集合之内。多用于非数值数据类型的范围比较。In(In(表达式表达式1,1,表达式表达式2 2表达式表达式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 (信息学院,经管学院,生命学院)婚悟硫闰九惹岿测窘柄宰锭胆敲独获瘁涩扛痕著挨她俱蛹喻拜毋轻吐悍挞数据库的查询和视图数据库的查询和视图2011劳东青(二)复杂查询条件查询pContainsContains安装全文索引组建的参考资料http:/www.docin.com/p-24609822.html创建全文索引的参考资料http:/database.51cto.com/art/201007/210597.htmhttp:/www.newasp.net/tech/data/24329.html磋会践吉鼻作骗井挑抿撩盐憎赔孽惧羹争肃窥诅亿孰低钾赡物清造纹磊钱数据库的查询和视图数据库的查询和视图2011劳东青(二)复杂查询补沃飞拢靡虞枚熏桅况裹峙来棒浴拍峰婆弊惑帝臃柱贯洲擅贯缨幻洱乐滴数据库的查询和视图数据库的查询和视图2011劳东青(二)复杂查询分组查询pGROUP BYGROUP BY子句:子句:作用对象:查询的中间结果表作用:细化聚集函数的作用对象未对查询结果分组,聚集函数将作用于整个查询结果对查询结果分组后,聚集函数将分别作用于每个组 分组方法:按指定的一列或多列一列或多列值分组,值相等的为一组使用GROUP BY子句后,SELECT子句的列名列表中只能出现分组属性和聚集函数淄麻适巢涡诬冲劳掷愿堪敌盐赤澜轮闷顾猛坝剖清院子蔗皑黍达均粘角瓮数据库的查询和视图数据库的查询和视图2011劳东青(二)复杂查询分组查询pGROUP BYGROUP BY的语法格式的语法格式:group bygroup by 分组表达式 with 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 性别疏蛊抨该枣管霸捎插袍裁扮一然贺肢拂环敦到舱蜒歧行剥畦会炕瓮鸥辐淳数据库的查询和视图数据库的查询和视图2011劳东青(二)复杂查询分组查询【例25】统计数据库xscj的学生表中各个专业的男生人数、女生人数及学生总数use xscjselect 专业,性别,count(*) AS 人数from 学生表group by 专业,性别 with rollup维俩慌疚嵌叛畔番锚缓按行毗免蝉串卵褪间港嫂阀凋透磺唯曙徽践呕舆类数据库的查询和视图数据库的查询和视图2011劳东青(二)复杂查询分组查询【例26】统计数据库xscj的学生表中各个专业的男生人数、女生人数、学生总数,及男生总数、女生总数、学生总人数use xscjselect 专业,性别,count(*) AS 人数from 学生表group by 专业,性别 with cube雌玻午需愚渗辩距悍擂丹蜜覆得儿忘氏宙袖糜恰羹该恼求鞭鸿脓陨兄人区数据库的查询和视图数据库的查询和视图2011劳东青(二)复杂查询分组查询pHavingHaving子句子句用于对分组数据进行进一步的筛选,用法与where字句类似HAVING子句与WHERE子句的区别:所处位置不同:所处位置不同:having子句必须在group by语句之后,where子句必须在group by语句之前。作用对象不同作用对象不同:WHERE子句作用于基表或视图,从中选择满足条件的行;HAVING子句作用于组,从中选择满足条件的组。Having子句可包含聚合函数聚合函数,Where子句不可以。者河羡乙万箔严礼首霞渊迢拄信曾窄篮灿待晰靶耘饲谷谤裕式别掷泅型软数据库的查询和视图数据库的查询和视图2011劳东青(二)复杂查询分组查询【例27】统计数据库xscj的学生表中“工商管理”专业的男生人数、女生人数、学生总数。use xscjselect 专业,性别,count(*) AS 人数from 学生表group by 专业,性别 with rolluphaving 专业=工商管理狰椭吏袜扬磺犊冈势奎宾陋沟顷鲤涤营妈蔬艾付奉佰僳搐浩耻希萝匠见糊数据库的查询和视图数据库的查询和视图2011劳东青(二)复杂查询随魔铀引抗戊梯弛披拭擎粮既护届懈执祷蹿瓦逗帮尹碱其世减砾还退讹守数据库的查询和视图数据库的查询和视图2011劳东青(二)复杂查询排序pORDER BYORDER BY语句语句可以按一个或多个属性列排序Order by 排序表达式 ASC|DESC分组表达式:列名、表达式、正整数(映射表中对应位置上的列)ASC升序;DESC降序;缺省值为升序当排序列含空值时ASCASC:排序列为空值的元组最后显示DESCDESC:排序列为空值的元组最先显示裂倚秒镊羹附挖苛赐泌滴榨铣嘴壹目热苛挫借告淳双羔悠结茎聋琼探修缠数据库的查询和视图数据库的查询和视图2011劳东青(二)复杂查询排序【例28】将学生表中的学生按出生时间顺序排序。use xscj select * from 学生表 order by 出生时间【例29】将成绩表中的学生按课程及成绩从高到低排序。use xscj select * from 成绩表order by 课程号,成绩皿司袱菇靛榔拒结谆资疹自稚谓尝照瞬杨刘吗钉袍丧曲拢家素宗垣届壶脯数据库的查询和视图数据库的查询和视图2011劳东青4.2 数据库的查询橡捅弦酣循荐涣狰杨学巳莹覆跃七嵌亚鸯既而畏嗽户驹非质钞撩州众腮陌数据库的查询和视图数据库的查询和视图2011劳东青(三)多表查询僻丑沫惹树妓汤檄衙弹水滇姿燕掠碱桃状姿饱姓伟腰邵扬细忻虑掌樱圾窄数据库的查询和视图数据库的查询和视图2011劳东青(三)多表查询连接查询p连接查询连接查询:同时涉及多个表的查询,结果通常是含有参加连接运算的两个表(或多个表)的指定列的表。p连接条件中的各连接字段类型必须是可比的,但名字不必是相同的。p连接查询包括连接查询包括:等值连接、自然连接、一般连接、内连接、外连接、左连接、右连接等。p连接查询中的连接条件通过WHERE子句表达,连接条件和元组选择条件之间用AND(与)操作符衔接。p在连接查询中,用来连接两个表的条件称为连接条件连接条件或连连接谓词接谓词。俏统阶盗缉经魁尧训眼围奥藏毁牵误熔屏顾缓耸珍袄谤朋乏晨恳媚电辉渭数据库的查询和视图数据库的查询和视图2011劳东青(三)多表查询连接查询1 1、等值连接和非等值连接、等值连接和非等值连接 一般格式:. .p比较运算符有:= =、 、 =、=80旗裳禹越校趣欠员梳仰渐邵蛾沿委坎蹄种馏坏捏堤氯碧祭帖嘲惨盯将志胚数据库的查询和视图数据库的查询和视图2011劳东青(三)多表查询连接查询2 2、自然连接、自然连接当等值连接中的连接列相同,并且在SELECT子句中去除了重复列时,则该连接操作为自然连接自然连接。【例32】选修了课程的学生信息及其选课信息。SELECT 学号学号, ,姓名姓名, ,性别性别, ,出生时间出生时间, ,总学分总学分, ,备注备注, ,课程号课程号, ,成绩成绩, ,备注备注 FROM 学生表,成绩表WHERE 学生表.学号 = 成绩表.课程号汕俭豪烷口捞员剁湍蝗寥丛墒廊疟共教啸嘲俘曲铺乌三屹矩爆沟奸癸湛沟数据库的查询和视图数据库的查询和视图2011劳东青(三)多表查询连接查询3 3、自连接、自连接: :一个表与其自己进行连接需要给表起别名以示区别由于所有属性名都是同名属性,因此必须使用别名前缀【例33】查询选修了101号课程和102号课程的学生学号 SELECT a.学号 FROM 成绩表 a,成绩表 b WHERE a.学号=b.学号 AND a.课程号=101 AND b.课程号=102镜邓精首芳盐逸希腥气限兜关涂月埠塘秤冒孺针挎荤具壮靶尉冷馋搁坷曙数据库的查询和视图数据库的查询和视图2011劳东青(三)多表查询连接查询4 4、内连接、内连接用INNER关键字指定的连接。按照ON指定的连接条件,返回满足条件的行返回满足条件的行。SELECT SELECT FROM FROM 1 InnerInner JOINJOIN 2 ON ON 连接条件连接条件 【例34】在学生表与成绩表之间通过学号做内连接,显示已选课的学生的基本信息和他们的选课信息。 SELECT * FROM 学生表 JOIN 成绩表 ON 学生表.学号=成绩表.学号拐涎鸥胚蓄住呵韵恭姐皆钠阅轮振沮嫡面逐靛柿跳既逻揍啪柞免蹦前宵贴数据库的查询和视图数据库的查询和视图2011劳东青(三)多表查询连接查询5 5、外连接、外连接外连接操作以指定表为连接主体以指定表为连接主体,将主体表中满足条件、将主体表中满足条件、不满足连接条件的元组一并输出不满足连接条件的元组一并输出。包括:左外连接、右外连接、完全外连接SELECT SELECT FROM FROM LEFT|RIGHT|FULL OUTER LEFT|RIGHT|FULL OUTER JOIN JOIN ONON 连接条件连接条件 履意员哪遮炳炎承造嵌讥瘸察素蝴这设鸣畦晚腐九孕烟缉裹课汕芜色螟袋数据库的查询和视图数据库的查询和视图2011劳东青(三)多表查询连接查询p左外连接、右外连接、完全外连接的左外连接、右外连接、完全外连接的区别区别z共同点共同点:结果表中都包括满足条件的行。z左外连接(左外连接(LEFT OUTER JOINLEFT OUTER JOIN):):还包括左表所有的行z右外连接(右外连接(RIGHT OUTER JOINRIGHT OUTER JOIN):):还包括右表所有的行z完全外连接(完全外连接(FULL OUTER JOINFULL OUTER JOIN):):还包括两个表的所有行柿京喘寨茶隘朔徽侄话望籍掸孵弟焦逼陶佃颈定攒峦脱晶陡墅光贝证榨吧数据库的查询和视图数据库的查询和视图2011劳东青(三)多表查询连接查询5 5、外连接、外连接【例35】查询每个学生及其选修课程的情况包括没有选修课程的学生 SELECT 学生表.学号,姓名,性别,出生时间,总学分, 课程号,成绩 FROM 学生表 LEFT OUT JOIN LEFT OUT JOIN 成绩表 ONON (学生表.学号=成绩表.学号)等值连接中的内外连接也可在where子句中实现:内连接 Where 学生表.学号=成绩表.学号 左外连接 Where 学生表.学号*=成绩表.学号 右外连接 Where 学生表.学号=*成绩表.学号 黎椿逆莱要稗策诉洁脓漏颧叮涅欣躬参搞绞棕墅吭肇赡偶撕您掷单滴雇坑数据库的查询和视图数据库的查询和视图2011劳东青(三)多表查询姻侵曼减术佬苔粗慨佬甥仟捏萍佳辣岂摔拽哉诅勤盘嫂罩穿掺遇枷沧溃前数据库的查询和视图数据库的查询和视图2011劳东青(三)多表查询嵌套查询p嵌套查询概述(嵌套查询概述(P91P91)z一个SELECT-FROM-WHERE语句称为一个查询块查询块z将一个查询块嵌套在另一个查询块的WHERE子句或HAVING短语的条件中的查询称为嵌套查询嵌套查询 SELECT 姓名 /*外层查询/父查询*/ FROM 学生表 WHERE 学号 IN (SELECT 学号 /*内层查询/子查询*/ FROM 成绩表 WHERE 课程号= 103);姆震卡瓶格酿军痞雇剧谰脆骤滔袄蝶干唇抨甜祖掖兢帕政靳署尾垂盂鲸剪数据库的查询和视图数据库的查询和视图2011劳东青(三)多表查询嵌套查询p子查询即可嵌套在SELECT语句中使用,也可嵌套在INSERT、UPDATE及DELETE语句中使用。p子查询中,通常不允许使用ORDER BY语句。p子查询通常与IN谓词、比较运算符、ANY、ALL、EXIST等谓词结合使用。讨声夜潘我诬刘槛改脾壮悸索泛萤明曼撵口眠卖董超偷整魁募有杭葫彻凄数据库的查询和视图数据库的查询和视图2011劳东青(三)多表查询嵌套查询1 1、带有、带有ININ谓词的子查询谓词的子查询pIN子查询用于进行一个给定值是否在子查询结果集中的判断,格式为:expression NOT IN ( 子查询 )【例36】查找选修了课程号为206的课程的学生情况。use xscj select * from 学生表where 学号 in (select 学号 from 成绩表 where 课程号=206)等价于select 学生表.* from 学生表,成绩表 where 课程号=206 and 学生表.学号=成绩表.学号憋锻啃炮吁弄卑赫氟鉴诵辣场弄皆谴较彻趾惺陵弛碗漏扁苇哲仔傈科秩毫数据库的查询和视图数据库的查询和视图2011劳东青(三)多表查询嵌套查询【例37】查找未选修离散数学离散数学的学生姓名。思路分析:select * from 学生表 where 学号 not in(select 学号 from 成绩表 where 课程号 in(select 课程号 from 课程表 where 课程名=离散数学)蓝色模块等价于:select 学号 from 成绩表,课程表 where 课程名=离散数学 and 课程表.课程号=成绩表.课程号祭弦病泅掉闽漓良攀草鲜衡闹妖由垄逆磺谤埃答唉胆篡弄乙沮企波靶囤般数据库的查询和视图数据库的查询和视图2011劳东青(三)多表查询嵌套查询2 2、带有比较运算符的子查询、带有比较运算符的子查询p当能确切知道内层查询返回单值时,可用比较运算符(,=,=,!=或)。【例37】查找未选修离散数学离散数学的学生情况。select * from 学生表 where 学号 not in(select 学号 from 成绩表 where 课程号 = =(select 课程号 from 课程表 where 课程名=离散数学)劳苦模贺昆霹恋粕碌岭弃述啡进砸蚁薪舌耸囱谢唇糙榴抛冰抖堤型茅死术数据库的查询和视图数据库的查询和视图2011劳东青(三)多表查询嵌套查询【例38】查找比课程号为102的课程最高分还高的其他课程的选课情况。Use xscjSelect * from 成绩表 where 成绩 (Select max(成绩) from 成绩表 where 课程号=102)伐串企廷戴趾崖炎姿懒螟截侗叶症盐却担眉晦眩逊候人甚吹湛栏桃酌把博数据库的查询和视图数据库的查询和视图2011劳东青(三)多表查询嵌套查询3 3、带有、带有ANYANY(SOMESOME)或)或ALLALL谓词的子查询谓词的子查询pAny、some、all通常跟比较运算符结合使用。pANYANY(SOMESOME):表示表达式只要与子查询结果集中的某个值满足比较的关系,就返回TRUE,否则返回FALSE。pALLALL:指定表达式要与子查询结果集中的每个值都进行比较,当表达式与每个值都满足比较的关系时,才返回TRUE,否则返回FALSE。澄瘦鬼斥疯乃畅交魄铅在萍象见货煽租店更诡星北悬钝蜂奄政肺彰伊矛兰数据库的查询和视图数据库的查询和视图2011劳东青(三)多表查询嵌套查询p比较运算符与比较运算符与ANYANY、ALLALL结合使用时的含义结合使用时的含义 ANY大于子查询结果中的某个值 ALL大于子查询结果中的所有值 ANY小于子查询结果中的某个值 = ANY大于等于子查询结果中的某个值 = ALL大于等于子查询结果中的所有值= ANY小于等于子查询结果中的某个值 = ALL小于等于子查询结果中的所有值= ANY等于子查询结果中的某个值 =ALL等于子查询结果中的所有值(通常没有实际意义)!=(或)ANY不等于子查询结果中的某个值!=(或)ALL不等于子查询结果中的任何一个值幢侣赵藏疯瓜悄庙歪巫菠傈妻佯大结版草渺溯啥腊吴栽鹰褥绢辅蜗屑痰媒数据库的查询和视图数据库的查询和视图2011劳东青(三)多表查询嵌套查询pANY(或SOME),ALL谓词与聚集函数、IN谓词的等价转换关系 = 或或!= =ANY IN - MAXMIN= MINALL - NOT IN MINMAX= MAX猎灭斤槛艾诊煞格图枝貉讲狞摇酌丈酮痛甫攻外隙优掠葫牌荷宾讣铰志咱数据库的查询和视图数据库的查询和视图2011劳东青(三)多表查询嵌套查询【例39】查找比所有信息学院的学生年龄都大的学生。Use xscjSelect * from 学生表 where 出生时间 all all(Select 出生时间From 学生表 where 学院编号=(select 学院编号 from 学院表where 学院名=信息学院)废骋蘑舍馋街酞滑睦挺延肪岔昨万橙伪睬圾惫获嚼惩帆按衍球宪奸箩板殖数据库的查询和视图数据库的查询和视图2011劳东青(三)多表查询嵌套查询【例40】查找比信息学院的某一学生年龄大的学生。Use xscjSelect * from 学生表 where 出生时间 any any(Select 出生时间From 学生表 where 学院编号=(select 学院编号 from 学院表where 学院名=信息学院)等价于:Select * from 学生表 where 出生年月(Select max(出生年月)From 学生表 where 学院编号=(select 学院编号 from 学院表 where 学院名=信息学院)婿险斌沿煌锡葛缸审匝碧氧咳骋铝怪迎牟塑铂扛将挫撂启伯惺堵初盾暇爹数据库的查询和视图数据库的查询和视图2011劳东青(三)多表查询嵌套查询p带有带有EXISTSEXISTS谓词的子查询谓词的子查询v1. EXISTS谓词n带有EXISTS谓词的子查询不返回任何数据,只产生逻辑真值“true”或逻辑假值“false”。若内层查询结果非空,则外层的WHERE子句返回真值若内层查询结果为空,则外层的WHERE子句返回假值n由EXISTS引出的子查询,其目标列表达式通常都用* ,因为带EXISTS的子查询只返回真值或假值,给出列名无实际意义v2. NOT EXISTS谓词若内层查询结果非空,则外层的WHERE子句返回假值若内层查询结果为空,则外层的WHERE子句返回真值共厂饯轧嘘店典献踪种哗退织搓律涧磁喻搪笛爪激寄姑醋莎秸僧凛幢宅排数据库的查询和视图数据库的查询和视图2011劳东青(三)多表查询嵌套查询【例41】查找选修206号课程的学生姓名。p思路分析思路分析:z本查询涉及学生表和成绩表z在学生表中依次取每个元组的学号值,用此值去检查成绩表z若成绩表中存在这样的元组,其学号值等于此学生表中的学号值,并且其课程号= 206,则取此学生表的姓名值送入结果关系SELECT SELECT 姓名姓名 FROM FROM 学生表学生表 WHERE EXISTS( WHERE EXISTS( SELECT *SELECT *FROM FROM 成绩表成绩表WHERE WHERE 学号学号 = = 学生表学生表. .学号学号 AND AND 课程课程号号 = 206 = 206) )哩舒洋臆乃欠毋地枣梭喜讨玩莽蝴球霹榷滔哦獭术智惧醚翰赁歉惊砖快坑数据库的查询和视图数据库的查询和视图2011劳东青(三)多表查询嵌套查询【例42】查找选修了全部课程的同学的姓名。p解决思路解决思路:将问题“查找选修了全部课程的同学”,转变成“查找没有一门课不选修的同学”。p分析:分析:1.所有未选过的课程未选过的课程的数据集: select * from 课程表 where not exists( select * from 成绩表 where 课程号=课程.课程号)2.增加一个条件增加一个条件:select * from 课程表 where not exists( select * from 成绩表 where 学号=学号 and 课程号=课程表.课程号) 所有没被某位学号为 学号 的学生选过的课程的记录集(学号学生的未选课程): 义田戴疑杆蛾蓬瓤剧奇糖荔搅盂蒙仰色倍逃勺深铸庙桃绵洼馆阉碱描惫贞数据库的查询和视图数据库的查询和视图2011劳东青7/24/202479(三)多表查询嵌套查询3.遍历每一个主查询的学号,每一个学号都按第二筛选方法筛选出:没有未选课程的学生的学号。(不包括在第二步中查询出的“有未学课程的学号的记录集”中的记录。)p所以,【例42】的查询语句如下:SELECT 姓名 FROM 学生表 WHERE NOT EXISTS (SELECT * FROM 课程表WHERE NOT EXISTS ( SELECT * FROM 成绩表WHERE 学号=学生表.学号 AND 课程号=课程表.课程号 )裙度厦阮逮呆辽烙陕搭瞬她回贼豺拍映镜式同馋欧霹绑历滇氮成潜荡铃胃数据库的查询和视图数据库的查询和视图2011劳东青(三)多表查询龄锥脖涌叁坞适晾匹陋婉闺殆晌兑丝祷项株蟹踌箔郊萎挽善哼呢鲁船牌订数据库的查询和视图数据库的查询和视图2011劳东青(三)多表查询集合查询p集合操作的种类并操作并操作UNIONUNION交操作交操作INTERSECTINTERSECT差操作差操作EXCEPTEXCEPT语法格式:查询查询 union all | intersect | except union all | intersect | except 查询查询p注意:参加集合操作的各查询结果的列数必须相同;对应项的数据类型也必须相同 妓赡邵侩沟谤汐骂废温踊餐未借殊锑升畜膳莫鲤顶芍忻图栅身筏勘仁慧翟数据库的查询和视图数据库的查询和视图2011劳东青(三)多表查询集合查询p1 1、并操作、并操作UNIONUNION用于将两个或多个SELECT查询的结果合并成一个结果集。UNION:将多个查询结果合并起来时,系统自动去掉重复元组。UNION ALL:将多个查询结果合并起来时,保留重复元组。【例43】查找学号为081101和学号为081210的两位同学的信息。SELECT * FROM 学生表 WHERE 学号= 081101UNION ALLSELECT * FROM 学生表 WHERE 学号= 081210牧检蛔冯宗榨怠殉魁泵芜鳖详锰桅鸯腾偶湖伯疮薄耶阅饺奔氰橡嘉把充傍数据库的查询和视图数据库的查询和视图2011劳东青(三)多表查询集合查询【例44】查询学院编号为01的学生及年龄不大于19岁的学生。SELECT * FROM 学生表 WHERE 学院编号= 01 UNION SELECT * FROM 学生表 WHERE year(getdate()-year(出生时间)42INTERSECTSELECT * FROM 学生表 WHERE 性别=1摈桔喝婚趴庐诵熟失跨拣苟街遁柯包积语里货咳淖坛自畴些兄看双烩很堪数据库的查询和视图数据库的查询和视图2011劳东青(三)多表查询集合查询【例48】查询既选修课程101,又选修课程102的学生名单。Use xscjSelect 学号 from 成绩表 where 课程号=101IntersectSelect 学号 from 成绩表 where 课程号=102嘉毅软李衔觉嫁默曝瀑砌朵轻都咆涉甭憾郊趾魁祭肺婴潜缔酬惹疆带诗徊数据库的查询和视图数据库的查询和视图2011劳东青(三)多表查询衍饮考虾杉钢琼墨鞋堂漫使婉哟罚然爽闹慎山狂半匹行叁涤厉惋重赣恐驰数据库的查询和视图数据库的查询和视图2011劳东青(三)多表查询Into子句p使用INTO子句可以将SELECT查询所得的结果保存到一个新建的表中。INTO子句的格式为: INTO 新表名 p包含INTO子句的SELECT语句执行后所创建的表的结构由SELECT所选择的列决定,新创建的表中的记录由SELECT的查询结果决定,若SELECT的查询结果为空,则创建一个只有结构而没有记录的空表。锁油贱麦们众煮蒜迸遣应娱窟去双燥纹窜读粪母猖肢药右谩尊哇搏齿缴仿数据库的查询和视图数据库的查询和视图2011劳东青(三)多表查询Into子句 【例49】由学生表创建“信息学院学生”表,包括学号和姓名。SELECT 学号, 姓名INTO 信息学院学生FROM 学生表WHERE 学院编号= (select 学院编号 from 学院表 where 学院名=信息学院)卯阎桅赔扶瘦罪谢闲栋撒羊饰钎涸僵层庙杭硷办效龚缺茧扬海拓积曰梦凛数据库的查询和视图数据库的查询和视图2011劳东青7/24/202491主要内容主要内容4.1 关系运算关系运算4.2 数据库的查询数据库的查询4.3 视图视图4.4 游标游标亲羌傀靶肪俄酬韶仪吞讼肖瞩呕郡狙颈棉美辖狭甥吟男骄璃望摘卧轿骆串数据库的查询和视图数据库的查询和视图2011劳东青7/24/2024924.3 视图p概念:z视图是保存在数据库中的SELECT查询。p特点:z不是真实存在的基本表,而是从一个或几个基本表(或视图)导出的虚拟的表(简称虚表)。z只存放视图的定义,不存放视图对应的数据。视图中的数据在引用视图时,由定义视图的查询动态生成。z基表中的数据发生变化,从视图中查询出的数据也随之改变。州流件骋仁寺疡筏愧炸燃掀古愈准绚剐按米嘎铬陆回乎炯乘希胚谣索抄啪数据库的查询和视图数据库的查询和视图2011劳东青7/24/202493视图的操作p视图的创建p视图的修改p视图的查询p视图的更新p定义基于该视图的新视图容蠢尹祁凶毅盐递叠氢改沟至缴踊憨井塑明逼凸傻额信驭溪蓬扯吏拘涩找数据库的查询和视图数据库的查询和视图2011劳东青7/24/202494视图的创建p视图的创建方法有两种:z使用企业管理器创建视图z使用CREATE VIEW语句创建视图(一)使用企业管理器创建视图z在企业管理器中,展开指定数据库,用鼠标右击“视图”目录,在弹出的快捷菜单中选择“新建视图”,打开“视图设计器”窗口。在此窗口中创建视图。介解舷洞殖助停伯您娘茂旁蔡关庞乌将优铆巧幼德噎媚讯总泉北轨煽褐嗜数据库的查询和视图数据库的查询和视图2011劳东青7/24/202495视图的创建(二)使用CREATE VIEW语句创建视图pCREATE VIEW 的语法格式:CREATE VIEW 视图名 ( 列名 ,.n ) WITH ENCRYPTION AS SELECTSELECT语句语句 WITH CHECK OPTION缆绍掂逝京征安琐醉尉弄状炽夺煤犊凿昭酿汞曝家东钉村狡辛铱厩粕凝渊数据库的查询和视图数据库的查询和视图2011劳东青7/24/202496视图的创建p参数说明:参数说明:z视图名:视图的名称,必须符合标识符的命名规则。z列名:视图中的列名称,要么省略,要么全部指定。省略时,则采用SELECT语句产生的列名作为视图的列。当列是从算术表达式、函数或常量派生的,两个或更多的列可能会具有相同的名称(通常是因为连接),或者视图中的某列被需要赋予了不同于派生来源列的名称时,需要指定列名。在凹喊喇哨嘻咸阐奴畦砧闹掩丢混韶朔仍打销匠喜趋鹏劫忧蜡弹成凛凹翌数据库的查询和视图数据库的查询和视图2011劳东青7/24/202497视图的创建p参数说明:参数说明:zWITH ENCRYPTION:对包含在系统表syscomments内的CREATE VIEW语句文本进行加密。 zSELECT语句:用于创建视图的SELECT语句,利用SELECT语句可以从表或视图中选择列构成新视图的列。zWith check option:表示对视图进行update、insert和delete操作时要保证更新、插入或删除的行满足视图定义中的谓词条件(即子查询中的条件表达式)庄涸倚燕劫伶拙左澈吾缘队乘锣喇栅晋溉升别痛稠唐剁卵奇虐澡租虑卑翰数据库的查询和视图数据库的查询和视图2011劳东青7/24/202498视图的创建【例50】建立信息学院学生的视图,并要求进行修改和插入操作时仍需保证该视图只有信息学院的学生 。Create View 信息学生VIEWAsSelect * from 学生表 where 学院编号 in (select 学员编号 from 学院表 where 学院名称=信息学院)WITH CHECK OPTION逝浚翟哗棍珍德锈汇个谴貌笔瘤袍凶挣独爱撒雇嫩赋容甄悼樟人哟邹的期数据库的查询和视图数据库的查询和视图2011劳东青7/24/202499视图的创建【例51】创建工商管理专业学生的平均成绩视图KC_AVG,包括学号(在视图中列名为Snum)和平均成绩(在视图中列名为score_avg)。Create View KC_AVG ( Snum, score_avg)AsSelect 学号,avg(成绩) from 成绩表 Group by 学号疵胃肝谁尘湿腆竹嘘祖猛少烩岭而像贼鸟聊潦猖管诵微涵恿块摧桶中滨职数据库的查询和视图数据库的查询和视图2011劳东青7/24/2024100视图的修改p视图结构的修改有两种方法:z通过企业管理器。右键单击视图,在快捷菜单中选择“设计”菜单,进入视图修改窗口。(操作与创建相似。)z通过 ALTER VIEW 命令。 ALTER VIEW 语法格式如下:ALTER VIEW 视图名(列名,.n) WITH ENCRYPTION AS SELECT语句彭讽惊潦接滔哈躁杖扭鄙庐悟垂励堪抱瞅践僧淌榜槽梨贡栖绝椽兢毖庄扒数据库的查询和视图数据库的查询和视图2011劳东青7/24/2024101视图的修改【例51】将信息学生VIEW修改为只包含计算机专业学生的学号、姓名和总成绩。Create view 信息简VIEW Asselect 学号 from 信息学生VIEW where 专业=计算机嫡掳应隆掀节临钞屡胺块歇帧幕迎队蕾滔斗殉淘饮刃淑挣操蛾泵蚊铬懦摧数据库的查询和视图数据库的查询和视图2011劳东青7/24/2024102视图的删除p视图的删除有两种方法:z通过企业管理器。右键单击视图,在快捷菜单中选择“删除”菜单。z通过 DROP VIEW 命令。 ALTER VIEW 语法格式如下:DROP VIEW 视图名(列名,.n)【例52】使用DROP VIEW 命令删除视图KC_AVG。Drop view kc_avg 闺凤淤状蓬蓬责盟界浸持寇屏碗冰尚链挽硷伊燥怖勾脉诣齐耀七乐阂页焚数据库的查询和视图数据库的查询和视图2011劳东青7/24/2024103视图的查询p视图定义后,即可像查询基本表那样进行查询。【例53】查找工商管理专业平均成绩在80分以上的学生的学号和平均成绩。Select * from KC_AVG where score_avg 80p注意:z在使用视图查询时,若其关联的基本表中添加了新字段,则必须重新创建视图才能查询到新字段。z如果与视图相关联的表或视图被删除,则该视图将不能再使用。钉裤粹迪誉掣磨棵语怨筐煽搔挎橇勉伤洞墟媳颧则翱堵遏散圾缚喀拨黄杂数据库的查询和视图数据库的查询和视图2011劳东青7/24/2024104视图的更新p视图的更新操作包括数据的插入、修改和删除。p要通过视图更新基本表数据,必须保证视图是可更新视图。一个可更新视图可以是以下情形之一:(1)满足以下条件的视图:z创建视图的SELECT语句中没有聚合函数,且没有TOP、GROUP BY、UNION子句及DISTINCT关键字。z创建视图的SELECT语句中不包含从基本表列通过计算所得的列。z创建视图的SELECT语句的FROM子句中至少要包含一个基本表。呐颧映暖辨删贞季预漆掏楞癸需叔拥的拒泰慢轿衷货口丸倒逊绚瞩薛娟镁数据库的查询和视图数据库的查询和视图2011劳东青7/24/2024105视图的更新p一个可更新视图可以是以下情形之一:(2)可更新的分区视图z在实现分区视图之前,必须先实现水平分区表。原始表被分成若干个较小的成员表,每个成员表包含与原始表相同数量的列,并且每一列具有与原始表中的相应列同样的特性(如数据类型、大小、排序规则)。(3)通过INSTEAD OF触发器创建的可更新视图。INSTEAD OF 触发器将在第7章介绍。胰墩类阮曝蕉抿揽链蚌芹况爬暑呵日综蓑皖阀犊烁淤农滦劝巫头焙皑瓣漂数据库的查询和视图数据库的查询和视图2011劳东青7/24/2024106视图的更新p插入数据插入数据施用Insert语句通过视图向基本表插入数据。【例54】向信息学生VIEW插入以下记录:(081115,李敏,计算机,0,1988-3-2,50,NULL,01)INSERT INTO 信息学生VIEWVALUES(081115, 李敏,计算机,0,1998-3-2, 50,NULL,01)p注意:当视图所依赖的基本表有多个时,不能向该视图插入数据,因为这将会影响多个基表。祖癸氛芹谤喂援苞献剧惺锨账刑鞋材斡含俱增轧俄刑减害蝗另驹钻愉铜萧数据库的查询和视图数据库的查询和视图2011劳东青7/24/2024107视图的更新p修改数据修改数据使用UPDATE语句通过视图修改基本表的数据。【例55】将信息学生VIEW视图中所有学生的总学分增加8。UPDATE 信息学生VIEWSET 总学分=总学分+3p注意:z若一个视图依赖于多个基本表,则依次修改该视图只能变动一个基本表的数据。夷门郁签适秧积峭调歌艳助蜂涤胁堕泛账著澳貌锡衷骸股琼预钡涝钒庭煌数据库的查询和视图数据库的查询和视图2011劳东青7/24/2024108视图的更新p删除数据使用DELETE语句通过视图删除基本表数据。注意:对于依赖于多个基本表的视图,不能使用DELETE语句。【例56】删除信息学生VIEW视图中女同学的记录。Delete from 信息学生VIEW where 性别=0骇娶碑牡燥贿狱宗颅荒嚷爷逛叭婉壬曰条崭知章冤文剿圃腾熙吟柑暇川氓数据库的查询和视图数据库的查询和视图2011劳东青7/24/2024109定义基于该视图的新视图pSQL SERVER允许在视图之上创建视图。【例57】根据信息学生VIEW视图,创建一个只含学号、姓名、性别信息的视图。视图名为“信息VIEW”。Create view 信息VIEWAsSelect 学号,姓名,性别From 信息学生VIEW葛乌憨檀冻赂凌狂恐驯怠恕离送罗纂玉喻蠕肺研琳邻滤缠赵菇猿惰吠栏脱数据库的查询和视图数据库的查询和视图2011劳东青7/24/2024110视图的优点p使用视图有下列优点:(1)为用户集中数据,简化用户的数据查询和处理。有时用户所需要的数据分散在多个表中,定义视图可将它们集中在一起,从而方便用户进行数据查询和处理。(2)屏蔽数据库的复杂性。用户不必了解复杂的数据库中的表结构,并且数据库表的更改也不影响用户对数据库的使用。(3)简化用户权限的管理。只需授予用户使用视图的权限,而不必指定用户只能使用表的特定列,也增加了安全性。岗控油灌久杰偏旗级坑淌戎粥万佩池哮撅刽曝斯扼趾搔概恫巡祥办纱兔缔数据库的查询和视图数据库的查询和视图2011劳东青7/24/2024111视图的优点p使用视图有下列优点:(4)便于数据共享。各用户不必都定义和存储自己所需的数据,而可共享数据库的数据,这样,同样的数据只需存储一次。(5)可以重新组织数据以便输出到其他应用程序中。p在使用视图时,要注意下列事项:(1)只有在当前数据库中才能创建视图。视图的命名必须遵循标识符命名规则,不能与表同名。(2)不能把规则、默认值或触发器与视图相关联。荤臆毋粕熟烟哄肉贬十启妥地焉好依匆谴馈幌袖钮嚼幕幅钉烃称盎谋赢芳数据库的查询和视图数据库的查询和视图2011劳东青7/24/2024112主要内容主要内容4.1 关系运算关系运算4.2 数据库的查询数据库的查询4.3 视图视图4.4 游标游标招炬灯护堪今锯轨吃箍奉色脸翻矛揉欧达卒惦森梢识本便忱择倡臃基腐呕数据库的查询和视图数据库的查询和视图2011劳东青7/24/20241134.4 游标妻棘瞧锌朗师藩恋扼畴被吾叠宙鲁窍敲症增蛙娱蕴筏蚤熄峡茬夯榆渍哩业数据库的查询和视图数据库的查询和视图2011劳东青7/24/20241144.4 游标游标的概述p游标的概念游标的概念游标是映射结果集并在结果集内的单个行上建立一个位置的实体,是一种定位并控制结果集的机制。p游标的功能游标的功能允许定位在结果集的特定行。从结果集的当前位置检索一行或多行。支持对结果集中当前位置的行进行数据修改。如果其他用户需要对显示在结果集中的数据库数据进行修改,游标可以提供不同级别的可见性支持。提供脚本、存储过程和触发器中使用的访问结果集中的数据的Transact-SQL语句。巡骂瞪几端愿窘毛膊张拦礼粹祷窄缝糟取篇擅斡钝瑶载凋母堤胸乌躺激迹数据库的查询和视图数据库的查询和视图2011劳东青7/24/20241154.4 游标游标的概述p游标的分类游标的分类服务器游标:由数据库服务器创建和管理的游标,包括Transact-SQL游标和API服务器游标两种。客户端游标:由ODBC 和DB-Library 支持,在客户端实现的游标。p服务器游标包括静态游标、动态游标、只进游标和键集驱动游标四种。静态游标静态游标:静态游标的完整结果集在游标打开时建立在tempdb中,它总是按照游标打开时的原样显示结果集,数据库中任何影响结果集的变化都不会体现在游标中。 憨睫讼劈抛审踌矮嫌掸腮仕樱果看插腐剧使暂荚讨养名秦书痈谰留无棺强数据库的查询和视图数据库的查询和视图2011劳东青7/24/20241164.4 游标游标的概述p服务器游标服务器游标动态游标动态游标:与静态游标相对应的概念。当滚动游标时,动态游标反映结果集中所做的所有更改。结果集中的行数据值、顺序和成员在每次提取时都会改变。所有用户做的全部UPDATE、INSERT和DELETE语句均通过游标可见。只进游标只进游标:不支持滚动,只支持游标从头到尾顺序提取。行只在从数据库中提取出来后才能检索。对所有影响结果集中行的INSERT、UPDATE和DELETE语句,其效果在这些行从游标中提取时是可见的。因为游标不能向后滚动,所以在行提取后对行所做的更改对游标是不可见的。 孽戍凉卵尚艇躬赛呕眷平邀庭奸霉挎峙缠涸睦淡蹬美晨宏贷搁蔚测概蔗澳数据库的查询和视图数据库的查询和视图2011劳东青7/24/20241174.4 游标游标的概述p服务器游标服务器游标键集驱动游标键集驱动游标 :由一套被称为键集的唯一标识符(键)控制。键由以唯一方式在结果集中标识行的列构成。键集是游标打开时来自所有适合SELECT语句的行中的一系列键值。键集驱动游标的键集在游标打开时建立在tempdb中。对非键集列中的数据值所做的更改,在用户滚动游标时是可见的。在游标外对数据库所做的插入在游标内是不可见的,除非关闭并重新打开游标。础筹贬听危嗜端虑筑你瞪懦蕊抑井浪磋幌垢蛔抄覆陈糙闺砾肪灌迈复挟邵数据库的查询和视图数据库的查询和视图2011劳东青7/24/20241184.4 游标游标的使用p游标的使用要遵循以下过程遵循以下过程:声明游标声明游标打开游标打开游标读取数据读取数据关闭游标关闭游标删除游标删除游标p声明游标声明游标DECLARE DECLARE 游标名称游标名称 INSENSITIVE SCROLL CURSORCURSOR LOCAL | GLOBAL FORWARD_ONLY | SCROLL STATIC | KEYSET | DYNAMIC | FAST_FORWARD READ_ONLY | SCROLL_LOCKS | OPTIMISTIC TYPE_WARNING FOR selectFOR select语句语句 FOR UPDATE OF 列名 ,.n 啥计饵朵眺伞噶垂瞎秸烫红刨袄抱硒呢企鞭粮赦父说卢销涝熄影中易诸宿数据库的查询和视图数据库的查询和视图2011劳东青7/24/20241194.4 游标游标的使用p参数说明参数说明INSENSITIVEINSENSITIVE:定义一个游标,以创建将由该游标使用的数据的临时复本。对游标的所有请求都从tempdb中的该临时表中得到应答;因此,在对该游标进行提取操作时返回的数据中不反映对基表所做的修改,并且该游标不允许修改。如果省略INSENSITIVE(任何用户),对基表提交的删除和更新都反映在后面的提取中。SCROLLSCROLL:指定所有的提取选项(FIRST、LAST、PRIOR、NEXT、RELATIVE、ABSOLUTE)均可用。如果未指定SCROLL,则NEXT是唯一支持的提取选项。如果指定SCROLL,则不能也指定FAST_FORWARD。垛能隙腑雪眨梗唇吊浓啥等伺栽像混爸滁填街突蹄凋曾空力悔傍屁掌歼钧数据库的查询和视图数据库的查询和视图2011劳东青7/24/20241204.4 游标游标的使用p参数说明参数说明LOCALLOCAL与与GLOBALGLOBAL:说明游标的作用域。LOCAL说明所声明的游标是局部游标,其作用域为创建它的批处理、存储过程或触发器,该游标名称仅在这个作用域内有效。GLOBAL说明所声明的游标是全局游标,它在由连接执行的任何存储过程或批处理中都可以使用,在连接释放时游标自动释放。FORWARD_ONLYFORWARD_ONLY和和SCROLLSCROLL:说明游标的移动方向。前者表示游标只能从第一行滚动到最后一行(仅支持FETCH中的NEXT选项);后者表示游标可以前滚、后滚(支持FIRST、LAST、PRIOR、NEXT、RELATIVE、ABSOLUTE)。檄班援蔷汽矫纳活漫兜婪钠票儡峪骇砧寓曳岸脂每狠镰鞋战铆耪融寸望淋数据库的查询和视图数据库的查询和视图2011劳东青7/24/20241214.4 游标游标的使用p参数说明参数说明STATIC | KEYSET | DYNAMIC | FAST_FORWARD STATIC | KEYSET | DYNAMIC | FAST_FORWARD :说明游标的类型。READ_ONLY | SCROLL_LOCKS | OPTIMISTIC READ_ONLY | SCROLL_LOCKS | OPTIMISTIC :说明游标或基表的访问属性。TYPE_WARNINGTYPE_WARNING:指定如果游标从所请求的类型隐性转换为另一种类型,则向客户端发送警告消息。FOR UPDATEFOR UPDATE:指出游标中可以更新的列。若有参数OF列名,n,则只允许修改列出的列,否则允许修改所有列(在未指定READ_ONLY属性的前提下)。撕伶墓椎佐航筒调秃需胞旗嘎糠蹈摹笋叁羔仍碘颊臃猩鲁八掂涉僳寞益存数据库的查询和视图数据库的查询和视图2011劳东青7/24/20241224.4 游标游标的使用【例58】声明一个标准游标,结果集为“学生”表中所有的男同学。Use xscj declare 男同学 cursorFor select * from 学生表 where 性别=1【例59】声明一个名为总学分的动态游标,结果集中包括学号、姓名和总学分字段,其中总学分字段值可进行修改。Use xscj declare 总学分 cursorDynamicFor select 学号,姓名,总学分 from 学生表For update of 总学分粮若漂苔屎冉散正披硒攻摇刽回短饲茸窜洒铱铭序怖翅嗽若职门口枢耀硬数据库的查询和视图数据库的查询和视图2011劳东青7/24/20241234.4 游标游标的使用p打开游标打开游标声明游标后,要使用游标从中提取数据,就必须先打开游标。在T-SQL中,使用OPEN语句打开游标,其格式为:OPEN OPEN GLOBAL 游标名称 | 游标变量的名称 p读取游标读取游标T-SQL通过FETCH语句来读取结果集数据,其格式为:FETCHFETCH NEXT | PRIOR | FIRST | LAST | ABSOLUTE n | nvar | RELATIVE n | nvar FROMFROM GLOBAL 游标名称 | 游标变量名称 INTO 变量名 ,.n 堑抬咏聚呈良哈瞩腺于异辽虫耿撼履臂伙散掀俘弦统蹬疏痈够疥虾桩擦觉数据库的查询和视图数据库的查询和视图2011劳东青7/24/20241244.4 游标游标的使用p关闭游标关闭游标游标使用完后要及时关闭,以释放当前结果集或解除定位游标行尚的游标锁定。在T-SQL中,关闭游标使用CLOSE语句,其格式为:CLOSE CLOSE GLOBAL 游标名称 | 游标变量的名称 p删除游标删除游标若确定游标不再需要,需删除游标以释放其定义占用的系统空间。T-SQL通过DEALLOCATE语句来删除游标,其格式为:DEALLOCATEDEALLOCATE GLOBAL 游标名称 | 游标变量名称 爪观太洪邢硫蚌腆邱拘即甸幌裁陛斤甚七忠视毛铃姨象偏瞥醉氰晕降蝉童数据库的查询和视图数据库的查询和视图2011劳东青7/24/20241254.4 游标游标的使用【例60】删除一个已经打开的游标,然后声明一个同名游标。USE XSCJ DECLAREDECLARE 男同学 SCROLL CURSOR FOR SELECT * FROM 学生表 WHERE 性别=1OPENOPEN 男同学FETCHFETCH FIRST FROM 男同学CLOSECLOSE 男同学DEALLOCATEDEALLOCATE 男同学DECLAREDECLARE 男同学 SCROLL CURSOR FOR SELECT * FROM 学生表 WHERE 性别=1OPEN OPEN 男同学FETCHFETCH LAST FROM 男同学敦躬兢咋讽按稳灶滩削钞验缄屯匪秘炯枪贯囊沸氨夷跋蒲抿搭场吞现惶益数据库的查询和视图数据库的查询和视图2011劳东青7/24/2024126The End. See you next time.角淹演扦屎椭掂曾细赃众糜钢蔫愈逛珊咽庞树仗革承咬膨膝拼箱越汉搭典数据库的查询和视图数据库的查询和视图
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号