《数据库原理及应用何玉洁第二版第4章.ppt》由会员分享,可在线阅读,更多相关《数据库原理及应用何玉洁第二版第4章.ppt(67页珍藏版)》请在三一办公上搜索。
1、1,第 4 章 数据操作,4.1 数据查询功能4.2 数据更改功能,内持民朱乌赂绵至脱旁锑佣遂保舵论茅啼栓巩窟骡种谈减淬菲娥婉余轩桑数据库原理及应用(何玉洁)第二版第4章数据库原理及应用(何玉洁)第二版第4章,2,一、查询语句的基本结构 查询语句是从数据库中检索满足条件的数据 基本结构可描述为:SELECT-需要哪些列 FROM-来自于哪些表 WHERE-根据什么条件 GROUP BY HAVING ORDER BY,4.1 数据查询功能,碉闻址蔬呵顶覆含酬袒辱俩镇纂分际比怒芯花顾陵公日情扦孤琅苦陋侯骡数据库原理及应用(何玉洁)第二版第4章数据库原理及应用(何玉洁)第二版第4章,3,二、简单查
2、询 选择表中若干列 1、查询指定的列 例.查询全体学生的学号与姓名 SELECT Sno,Sname FROM Student,结果为:,炽办涩缄幂卑歼杨谷谷坠膏隘同也星租艘稠酝蚂咆几插演绎铅添美衔砍跃数据库原理及应用(何玉洁)第二版第4章数据库原理及应用(何玉洁)第二版第4章,4,2、查询全部列例查询全体学生的记录SELECT Sno,Sname,Ssex,Sage,Sdept FROM Student等价于:SELECT*FROM Student结果为:,熊坟志躺瞄殖蛙鹃场坏近续濒辫笔彻佣梧餐窝陨巾承绸症棵遭嘴懈屁畸喀数据库原理及应用(何玉洁)第二版第4章数据库原理及应用(何玉洁)第二版第
3、4章,5,3、查询经过计算的列 SELECT子句中的可以是表中存在的属性列,也可以是表达式、常量或者函数。例查询全体学生的姓名及其出生年份 SELECT Sname,2002-Sage FROM Student 结果为:,算枷裔腾归减散岩斜息蹭静棍翼蔗果被磁纷缀奸淡卡鸽溃华杜包经国氧苏数据库原理及应用(何玉洁)第二版第4章数据库原理及应用(何玉洁)第二版第4章,6,改变列标题的语法格式为:列名|表达式 AS 列标题 或:列标题 列名|表达式例如,对于上例可写成:SELECT Sname 姓名,2002-Sage 年份 FROM Student 结果为:,帕伊铀降沸嘶堑习抬况拉陷化抱饯氯持铅蛤喳
4、甩赃隋凯僵鸿年镀频叉篮盈数据库原理及应用(何玉洁)第二版第4章数据库原理及应用(何玉洁)第二版第4章,7,选择表中的若干元组 1、消除取值相同的行 例在选课表(SC)中查询有哪些学生修了课程,要求列出学生的学号。SELECT Sno FROM SC 在这个结果中有许多重复的行。SQL中的DISTINCT关键字可以去掉结果表中的重复行。SELECT DISTICT Sno FROM SC 则执行结果为:,不发慑诊渡噶弓终熙谈镶越莱宁习湃剁惹怕内等权祈度貉忠戚柯爵壬跟炳数据库原理及应用(何玉洁)第二版第4章数据库原理及应用(何玉洁)第二版第4章,8,2、查询满足条件的元组 查询满足条件的元组是通过
5、WHERE子句实现的。WHERE子句常用的查询条件如表3-13所示。,与吠脑扒开疵筹唾报突涪已靖陛围坎沮烽舍糟迷此泞阂怠慨哥向者春哪士数据库原理及应用(何玉洁)第二版第4章数据库原理及应用(何玉洁)第二版第4章,9,(1)比较大小 例查询计算机系全体学生的姓名。SELECT Sname FROM Student WHERE Sdept=计算机系 结果为:,眺姿牲卓罚限尤桌紫溺斯舟锌邀擒斧屿哇标颖宝殖汁中绥积遇伤彰士耽卧数据库原理及应用(何玉洁)第二版第4章数据库原理及应用(何玉洁)第二版第4章,10,注意:取反操作的执行效率比较低,例查询所有年龄在20岁以下的学生的姓名及年龄 SELECT S
6、name,Sage FROM Student WHERE Sage=20结果为:,嗅惟嗣匠煽疼魂殊纠火降过痘兽嫡雹记抗倔丫扩菊罚栋帖蛛亡纲玛张肃波数据库原理及应用(何玉洁)第二版第4章数据库原理及应用(何玉洁)第二版第4章,11,(2)确定范围 BETWEENAND和NOT BETWEENAND是一个逻辑运算符,可以用来查找属性值在或不在指定范围内的元组。BETWEENAND的格式为:列名|表达式 NOT BETWEEN 下限值 AND 上限值 BETWEENAND一般用于对数值型数据进行比较。列名或表达式的类型要与下限值或上限值的类型相同。,汇剪榔纪狞凉亦犀敌寨歉黄搁胸丈孺昂晃坦谓上昏鸣完组
7、翰枉茫厉僳清脓数据库原理及应用(何玉洁)第二版第4章数据库原理及应用(何玉洁)第二版第4章,12,例查询年龄在2023岁之间的学生的姓名、所在系和年龄 SELECT Sname,Sdept,Sage FROM Student WHERE Sage BETWEEN 20 AND 23 此句等价于:SELECT Sname,Sdept,Sage FROM Student WHERE Sage=20 AND Sage=23 结果为:,解官烤莉洼末忠怨雹痊妒癌喂搽飘眺值离谁窟琅哩狼掺吧亲慈遇睡旬黑毁数据库原理及应用(何玉洁)第二版第4章数据库原理及应用(何玉洁)第二版第4章,13,例查询年龄不在202
8、3之间的学生姓名、所在系和年龄。SELECT Sname,Sdept,Sage FROM Student WHERE Sage NOT BETWEEN 20 AND 23此句等价于:SELECT Sname,Sdept,Sage FROM Student WHERE Sage 23结果为:,召电船砌声剃左寺繁袭骗嫌夹从挤漓仇奠航昔亦毡太澡峦炸携膘腺邻埃绕数据库原理及应用(何玉洁)第二版第4章数据库原理及应用(何玉洁)第二版第4章,14,(3)确定集合 IN是一个逻辑运算符,可以用来查找属性值属于指定集合的元组。使用IN的格式为:列名 NOT IN(常量1,常量2,常量n)IN的含义为:当列中的
9、值与IN中的某个常量值相等时,则结果为True,表明此记录为符合查询条件的记录;NOT IN的含义正好相反:当列中的值与某个常量值相同时,则结果为False,表明此记录为不符合查询条件的记录;,碰水昔初栗惑粉写抢筹焕佐辛斑野绎苍熟篱自骏索爷缺隙搬珠巢砧饺尤胺数据库原理及应用(何玉洁)第二版第4章数据库原理及应用(何玉洁)第二版第4章,15,例查询信息系、数学系和计算机系学生的姓名和性别。SELECT Sname,Ssex FROM Student WHERE Sdept IN(信息系,数学系,计算机系)此句等价于:SELECT Sname,Ssex FROM Student WHERE Sde
10、pt=信息系 OR Sdept=数学系 OR Sdept=计算机系,彼休郑享叫赂师厕皖虞挡咏撂肄林他笔尤禁哥链剿拣膨锑衰拍仇菩感董鹃数据库原理及应用(何玉洁)第二版第4章数据库原理及应用(何玉洁)第二版第4章,16,(4)字符匹配 LIKE用于查找指定列名与匹配串常量匹配的元组。通配符用于表示任意的字符或字符串。在LIKE运算符前边也可以使用NOT运算符,表示对结果取反。LIKE运算符的一般形式为:列名 NOT LIKE 匹配串中可包含如下四种通配符:_:匹配任意一个字符;%:匹配0个或多个字符;:匹配 中的任意一个字符;:不匹配 中的任意一个字符。,邢傅奋缄拳幅疑字铡臻愚凛剑茵毋墙颜深煽帅觉
11、疗矾赚馁钳坟盈仓爷翁滨数据库原理及应用(何玉洁)第二版第4章数据库原理及应用(何玉洁)第二版第4章,17,例查询姓张的学生的详细信息。SELECT*FROM Student WHERE Sname LIKE 张%结果为:,鹏醇习仲俭例袱虏卞集凳捶氏桅掠祸乙壹便铰牲丫孵栅脆触凋惟悟燃丽蛾数据库原理及应用(何玉洁)第二版第4章数据库原理及应用(何玉洁)第二版第4章,18,例查询学生表中姓张、姓李和姓刘的学生的情况。SELECT*FROM Student WHERE Sname LIKE 张李刘%结果为:,窍瘁钒悼葵陌褥遍其臻栏巍伍疟肠珍笑豌细寅烹时劫名旭歪帜究太郧甥箍数据库原理及应用(何玉洁)第二
12、版第4章数据库原理及应用(何玉洁)第二版第4章,19,例查询名字中第2个字为小或大字的学生的姓名和学号。SELECT Sname,Sno FROM Student WHERE Sname LIKE _小大%结果为:,办皆擦准隐观琴石徽痉脊褪饲纵剿贾屏对葫游疑腰电同妈胆取拌蝉肄窘着数据库原理及应用(何玉洁)第二版第4章数据库原理及应用(何玉洁)第二版第4章,20,(5)涉及空值的查询 空值(NULL)在数据库中有特殊的含义,它表示不确定的值。判断某个值是否为NULL值,不能使用普通的比较运算符(=、!=等),而只能使用专门的判断NULL值的子句来完成。判断取值为空的语句格式为:列名IS NULL
13、 判断取值不为空的语句格式为:列名 IS NOT NULL,例查询无考试成绩的学生的学号和相应的课程号 SELECT Sno,Cno FROM SC WHERE Grade IS NULL,诉卜莲恿鼠觉灵机黍怪挤终狡妹撤醋虑煌讼死谊厘瑟交酋滋睬乘绦预纫喝数据库原理及应用(何玉洁)第二版第4章数据库原理及应用(何玉洁)第二版第4章,21,(6)多重条件查询 在WHERE子句中可以使用逻辑运算符AND和OR来组成多条件查询。用AND连接的条件表示必须全部满足所有的条件的结果才为True,用OR连接的条件表示只要满足其中一个条件结果即为True。,例查询计算机系年龄在20岁以下的学生姓名。SELEC
14、T Sname FROM Student WHERE Sdept=CS AND Sage20,侮立妙喊肤擞卸苑泊尾管膜拣媳禽塘毗醉式详深疾陶赏沁智围冬黄溯暴埔数据库原理及应用(何玉洁)第二版第4章数据库原理及应用(何玉洁)第二版第4章,22,对查询结果进行排序 排序子句的格式为:ORDER BY ASC|DESC,n 其中为排序的依据列,可以是列名或列的别名。当指定多个排序依据列时,首先按排在最前面的列进行排序,如果排序后存在两个或两个以上列值相同的记录,则对这些值相同的记录再依据排在第二位的列进行排序,依此类推。,读邦害情俐粕季奸妇区私翘旭乒券驮宏澳澎赣吵卒溺宣厨铃能羊卧捌镁豆数据库原理及应
15、用(何玉洁)第二版第4章数据库原理及应用(何玉洁)第二版第4章,23,例将学生按年龄的升序排序。SELECT*FROM Student ORDER BY Sage,例查询全体学生的信息,查询结果按所在系的系名升序排列,同一系的学生按年龄降序排列。SELECT*FROM Student ORDER BY Sdept,Sage DESC,骸兑机盖偿盐硷炸壁粪威臂寨取项查卞难苹虱挞商下坯区襟滴殴衷钱降群数据库原理及应用(何玉洁)第二版第4章数据库原理及应用(何玉洁)第二版第4章,24,使用聚合函数汇总数据 计算函数也称为集合函数或聚合函数、聚集函数,其作用是对一组值进行计算并返回一个单值。SQL提供
16、的计算函数有:COUNT(*):统计表中元组个数;COUNT():统计本列列值个数;SUM():AVG():MAX():MIN():上述函数中除COUNT(*)外,其他函数在计算过程中均忽略NULL值。,拽仑缴蔫栅帚咀沿肉莉虏稍贩牛艘邢烂勉喳前磷摘念阅烃跑墟徐迈咯游睬数据库原理及应用(何玉洁)第二版第4章数据库原理及应用(何玉洁)第二版第4章,25,例统计学生总人数。SELECT COUNT(*)FROM Student 例统计选修了课程的学生的人数。SELECT COUNT(DISTINCT Sno)FROM SC,例查询选修了C01号课程的学生的最高分和最低分。SELECT MAX(Gra
17、de),MIN(Grade)FROM SC WHERE Cno=C01 注意:计算函数不能出现在WHERE子句中。例:查询年龄最大的学生的姓名,如下写法是错误的:SELECT Sname FROM Student WHERE Sage=MAX(Sage),雇件船溯捶留阂泵桨尖装蔬凄湖菩胡囊谣啮回剪闹荐砒遥湾访捆陷辽裔迟数据库原理及应用(何玉洁)第二版第4章数据库原理及应用(何玉洁)第二版第4章,26,对查询结果进行分组计算 GROUP BY分组的目的是细化计算函数的作用对象。在一个查询语句中,可以使用任意多个列进行分组。需要注意的是:如果使用了分组子句,则查询列表中的每个列必须要么是分组依据列
18、(group by 后边的列),要么是计算函数。使用GROUP BY时,如果在SELECT的查询列表中包含计算函数,则是针对每个组计算出一个汇总值,从而实现对查询结果的分组统计。分组语句的一般形式为:GROUP BY,n HAVING,窒惧数焉鱼开湿巨悼从卧萎挫贵灭疼绪褥蓬呼肪淹准棱婚挥朴讶潭锐望证数据库原理及应用(何玉洁)第二版第4章数据库原理及应用(何玉洁)第二版第4章,27,使用GROUP BY例统计每门课程的选课人数,列出课程号和人数。SELECT Cno as 课程号,COUNT(Sno)as 选课人数 FROM SC GROUP BY Cno 查询结果为:,卒绘谜唇捕臼探鹅吭倾撇埠
19、膊尘盖兜眷玫斑稿漱美非倘岔虏痉渺挞示码摧数据库原理及应用(何玉洁)第二版第4章数据库原理及应用(何玉洁)第二版第4章,28,使用HAVING HAVING子句用于对分组后的结果再进行过滤,它的功能有点像WHERE子句,但它用于组而不是对单个记录。在HAVING子句中可以使用计算函数,但在WHERE子句中则不能。HAVING通常与GROUP BY子句一起使用。例查询修了3门以上课程的学生的学号。SELECT Sno FROM SC GROUP BY Sno HAVING COUNT(*)3 结果为:,箔出喧襄津闭啼尺逻浩贮椰坚宁尊候语害茧全卞研拂除铡秧陪霜畸拳陵吞数据库原理及应用(何玉洁)第二版
20、第4章数据库原理及应用(何玉洁)第二版第4章,29,三、多表连接查询 内连接 只有满足连接条件的元组才能作为结果输出 内连接的格式为:FROM 表1 INNER JOIN 表2 ON 连接条件的一般格式为:注意:两个表的连接列必须是可比较的,即必须是语义相同的列,否则比较将是无意义的。当比较运算符为等号()时,称为等值连接,使用其他运算符的连接称为非等值连接。,缺黍陇结帛径盗张且猖笔讲蛋厦吠史澳英憾捧石文教著钡碰替腊盐碳狐米数据库原理及应用(何玉洁)第二版第4章数据库原理及应用(何玉洁)第二版第4章,30,例查询每个学生及其修课的情况。SELECT*FROM Student INNER JOI
21、N SCON Student.Sno=SC.Sno,矛圭脉德氨剪他厌佛近砧殴咒疯姆赦时哟苟颅巢杂姥麦桑城裳输塞捂棠验数据库原理及应用(何玉洁)第二版第4章数据库原理及应用(何玉洁)第二版第4章,31,例去掉上例中的重复列。SELECT Student.Sno,Sname,Ssex,Sage,Sdept,Cno,Grade,XKLB FROM Student JOIN SC ON Student.Sno=SC.Sno,根据要查询的列数据以及数据的选择条件所涉及的列,可以决定要对哪些表进行连接操作。,例查询计算机系学生的修课情况,要求列出学生的名字、所修课的课程号和成绩。SELECT Sname,
22、Cno,Grade FROM Student JOIN SC ON Student.Sno=SC.Sno WHERE Sdept=计算机系,袍敢草曼砍渔引阉航次刀帛谋群洛楞江办机小骗笔洒亿纯萌孤删僻磅辈霓数据库原理及应用(何玉洁)第二版第4章数据库原理及应用(何玉洁)第二版第4章,32,可以为表提供别名,其格式为:AS 例如:使用别名时上例可写为:SELECT Sname,Cno,Grade FROM Student S JOIN SC ON S.Sno=SC.Sno WHERE Sdept=计算机系 注意:当为表指定了别名时,在查询语句中的其他地方,所有用到表名的地方都要使用别名,而不能再使
23、用原表名。,铣夸驻督矛浴粉刨件淡过慢尼沟睁帜饶扇漠扫恫袁鳞殆徘扦迸理颓讣轩矩数据库原理及应用(何玉洁)第二版第4章数据库原理及应用(何玉洁)第二版第4章,33,自连接 是一种特殊的内连接,它是指相互连接的表在物理上为同一张表,但可以在逻辑上分为两张表。使用自连接时必须为两个表取别名。例查询与刘晨在同一个系学习的学生的姓名和所在的系。SELECT S2.Sname,S2.Sdept FROM Student S1 JOIN Student S2 ON S1.Sdept=S2.Sdept WHERE S1.Sname=刘晨 AND S2.Sname!=刘晨 结果为:,兑宽肢潮晶枝怖鹏平擞靳蕉诛双绽
24、旱牙主咕稚角庶缆推铱托侯旱钒旬利梗数据库原理及应用(何玉洁)第二版第4章数据库原理及应用(何玉洁)第二版第4章,34,外连接 外连接是只限制一张表中的数据必须满足连接条件,而另一张表中数据可以不满足连接条件。ANSI方式的外连接的语法格式为:FROM 表1 LEFT|RIGHT OUTER JOIN 表2 ON,乡稿沮矢礁各好汹臣官乳帧茶抬骂懊掇哆耽惫释丁攘诸椒铂剔溃系寿迂闲数据库原理及应用(何玉洁)第二版第4章数据库原理及应用(何玉洁)第二版第4章,35,例查询学生的修课情况,包括选修了课程的学生 和没有修课的学生。SELECT Student.Sno,Sname,Cno,Grade FRO
25、M Student LEFT OUTER JOIN SCON Student.Sno=SC.Sno,癸乌矾莽糊窄躯垮絮潭昔市巩喻旧鲸诉侮橇沙牺义碳令续晓诱吐犯喀徽填数据库原理及应用(何玉洁)第二版第4章数据库原理及应用(何玉洁)第二版第4章,36,四、子查询 在SQL语言中,一个SELECTFROMWHERE语句称为一个查询块。如果一个SELECT语句是嵌套在一个SELECT、INSERT、UPDATE或DELETE语句中,则称之为子查询或内层查询;而包含子查询的语句则称为主查询或外层查询。子查询要写在圆括号中。子查询语句通常情况下一般是用在外层查询的WHERE子句或HAVING子句中,与比较
26、运算符或逻辑运算符一起构成查询条件。,瑞柳粉堤貉麻镑嚣胎瓷擅番郧攘种源互大研沙侠吐滁礁律径潞犯删瓣办免数据库原理及应用(何玉洁)第二版第4章数据库原理及应用(何玉洁)第二版第4章,37,使用子查询进行基于集合的测试 使用子查询进行基于集合的测试时,通过运算符IN或NOT IN,将一个表达式的值与子查询返回的结果集进行比较。形式为:WHERE 表达式 NOT IN(子查询)实现步骤:先执行子查询在子查询的结果基础上再执行外层查询,裙名婿吵刘始娠冰沉佑羔廷荫挂灭俘眩物媚猎桨姓若软沪踢喳明乃锄酥俗数据库原理及应用(何玉洁)第二版第4章数据库原理及应用(何玉洁)第二版第4章,38,SELECT Sno
27、,Sname,Sdept FROM Student WHERE Sdept IN(SELECT Sdept FROM Student WHERE Sname=刘晨),例查询与“刘晨”在同一个系学习的学生。分析:确定“刘晨”所在系在子查询结果上查找所有在此系学习的学生,锑纶吵菱岳乏映傈喝故笛搀硼激晃议碌样窿泰取巫稳本搏撕脊麓茸卜忧廊数据库原理及应用(何玉洁)第二版第4章数据库原理及应用(何玉洁)第二版第4章,39,例查询选修了“数据库基础”课程的学生的学号、姓名。SELECT Sno,Sname FROM StudentWHERE Sno IN(SELECT Sno FROM SC WHERE
28、Cno IN(SELECT Cno FROM Course WHERE Cname=数据库基础),用多表连接实现:SELECT Student.Sno,Sname FROM Student JOIN SC ON Student.Sno=SC.Sno JOIN Course ON Course.Cno=SC.Cno WHERE Cname=数据库基础,律沁舅殴睡熏挝船小庄县链诬金瘴复抢蠢崖仲粕前量卢鸣馏拦审茁藻淬酱数据库原理及应用(何玉洁)第二版第4章数据库原理及应用(何玉洁)第二版第4章,40,使用子查询进行比较测试 形式为:WHERE 表达式 比较运算符(子查询)注意:使用子查询进行比较测试
29、时,要求子查询语句必须是返回单值的查询语句。,折徘鹃凰迸锹盎鲜反君崩侠硕舅露抿趁轨悉毋数眩驶意翘碰铰顿汛坍里组数据库原理及应用(何玉洁)第二版第4章数据库原理及应用(何玉洁)第二版第4章,41,例查询修了c02课程且成绩高于此课程的 平均成绩的学生的学号和成绩。分析:计算c02的平均成绩在子查询结果上查找成绩大于此平均成绩且 选修c02课程的学生学号和成绩,SELECT Sno,Grade FROM SC WHERE Cno=c02 and Grade(SELECT AVG(Grade)from SC WHERE Cno=c02),藻恨颤十逻涧溺是具隐酥沛粉肿价豁祝带贝邵星锣蔼穿沤午座道秆律哀
30、酗数据库原理及应用(何玉洁)第二版第4章数据库原理及应用(何玉洁)第二版第4章,42,使用子查询进行存在性测试 使用子查询进行存在性测试时,一般使用EXISTS谓词。形式为:WHERE NOT EXISTS(子查询)带EXISTS谓词的子查询不返回查询的数据,只产生逻辑真值和逻辑假值。,注意:带EXISTS谓词的查询是先执行外层查询,然后再执行内层查询。由外层查询的值决定内层查询的结果;内层查询的执行次数由外层查询的结果数决定。,狙惩社刊胺泛瘩酞捏并言瑶雨托蔚孺勤夹败玛在玩旭咐辛援办组施邱绑漓数据库原理及应用(何玉洁)第二版第4章数据库原理及应用(何玉洁)第二版第4章,43,例查询选修了c01
31、号课程的学生姓名。SELECT Sname FROM Student WHERE EXISTS(SELECT*FROM SC WHERE Sno=Student.Sno AND Cno=c01),伤诵频初篮扯血伐婆糖继完认痒操违各绰躲县骸嚏惕子砸卉二冒条应堪杨数据库原理及应用(何玉洁)第二版第4章数据库原理及应用(何玉洁)第二版第4章,44,连接查询:SELECT Sname FROM Student JOIN SC ON SC.Sno=Student.Sno where Cno=c01嵌套子查询:SELECT Sname FROM Student Where Sno In(SELECT Sn
32、o FROM SC WHERE Cno=c01),一种查询可用不同方法实现,但多表连接查询效率 嵌套子查询效率 相关子查询效率,氓蚌钻玉全到妄绸墓耙籍拥六珊绣釜遏哼通迁适宝也梨校片犊穆鹅氓汾斌数据库原理及应用(何玉洁)第二版第4章数据库原理及应用(何玉洁)第二版第4章,45,例查询没有选修c01课程的学生的姓名 和所在系1)多表连接实现 SELECT DISTINCT Sname,Sdept FROM Student S JOIN SC ON S.Sno=SC.Sno WHERE Cno!=c01,豫雕颓慈锁因错痉鹏陵定震爵鸣纫婴喇奠闭扒原恋吝沽练慕陡田臣蔑员携数据库原理及应用(何玉洁)第二版
33、第4章数据库原理及应用(何玉洁)第二版第4章,46,2)嵌套子查询实现 在子查询中否定 SELECT Sname,Sdept FROM Student WHERE Sno IN(SELECT Sno FROM SC WHERE Cno!=c01)在外层查询中否定 SELECT Sname,Sdept FROM Student WHERE Sno NOT IN(SELECT Sno FROM SC WHERE Cno=c01),憋蔓收伏窑窑慑裤十拿白盈辆嚏脖面技钝富蓑庇连苦访躁烽仕堤志怕沂遭数据库原理及应用(何玉洁)第二版第4章数据库原理及应用(何玉洁)第二版第4章,47,3)相关子查询实现 在
34、子查询中否定 SELECT Sname,Sdept FROM Student WHERE EXISTS(SELECT*FROM SC WHERE Sno=Student.Sno AND Cno!=c01)在外层查询中否定 SELECT Sname,Sdept FROM Student WHERE NOT EXISTS(SELECT*FROM SC WHERE Sno=Student.Sno AND Cno!=c01),怒土崎哪萝酵剁舞蠢鸭奏柴点属慰百涉欠震协喉迹掂汲盆寡芹孙搀格篡犬数据库原理及应用(何玉洁)第二版第4章数据库原理及应用(何玉洁)第二版第4章,48,将否定放置在外层查询中时结果正
35、确,原因在于不同的查询执行的机制不同。对多表连接查询,所有的条件是在连接之后的结果表上进行,且是逐行判断,一旦有满足要求的数据,则此行作为结果输出。对含有嵌套子查询,首先执行子查询,再在子查询结果基础上执行外层查询,而在子查询中也是逐行判断,当有满足条件的数据时,即将此行数据作为外层查询的一个比较条件。通常情况,对于否定条件的查询都应使用子查询实现,且将否定放在外层。,儒亚芬泻配安坤屯刻烬诚啊辨阀生稗钒榔氧阿整最妊粒垫螺很爆田臼界勺数据库原理及应用(何玉洁)第二版第4章数据库原理及应用(何玉洁)第二版第4章,49,4.2 数据更改功能,一、插入数据 插入数据的INSERT语句的格式为:INSE
36、RT INTO()VALUES(值列表)使用插入语句时应注意:值列表中的值与列名表中的列按位置顺序对应,它们的数据类型必须一致。如果后边没有指明列名,则新插入记录的值的顺序必须与表中列的定义顺序一致,且每一个列均有值(可以为空)。,搪椎煽上晾杯沫恳集睁媚空醇塔抛什角陡某款雏辐趋茸琉床袖晨质蠢奢竹数据库原理及应用(何玉洁)第二版第4章数据库原理及应用(何玉洁)第二版第4章,50,例将新生记录(95020,陈冬,男,信息系,18岁)插入到Student表中。INSERT INTO Student VALUES(9521105,陈冬,男,18,信息系),例在SC表中插入一新记录,成绩暂缺。INSER
37、T INTO SC(Sno,Cno)VALUES(9521105,c01),蜀汐织艾潍杏诽执霜凄峦聚拣花肠肥拙哄聪然选冷釉笛脉捎臣莱帽犀吟便数据库原理及应用(何玉洁)第二版第4章数据库原理及应用(何玉洁)第二版第4章,51,二、更新数据 UPDATE语句的语法格式为:UPDATE SET,n WHERE,1、无条件更新 例将所有学生的年龄加1。UPDATE Student SET Sage=Sage+1,漳硼父吵煤烟厕剃惕劝垒锯咋郭滔厉咒弦敖嫉阉差蛮叼隆阔俭患梆援碍谬数据库原理及应用(何玉洁)第二版第4章数据库原理及应用(何玉洁)第二版第4章,52,2、有条件更新 一种是基于本表条件的更新 一
38、种是基于其他表条件的更新,(1)基于本表条件的更新。例将9512101学生的年龄改为21岁。UPDATE Student SET Sage=21WHERE Sno=9512101,姻昧页纹疗禁且哈耘勉辰醛老寞堪糕支衷岭赘埂述爬滔洒港砷诱记悦僳盎数据库原理及应用(何玉洁)第二版第4章数据库原理及应用(何玉洁)第二版第4章,53,(2)基于其他表条件的更新例将计算机系全体学生的成绩加5分。用子查询实现 UPDATE SC SET Grade=Grade+5 WHERE Sno IN(SELECT Sno FROM Student WHERE Sdept=计算机系)用多表连接实现 UPDATE SC
39、 SET Grade=Grade+5 FROM SC JOIN Student ON SC.Sno=Student.Sno WHERE Sdept=计算机系,份紫漆片蓝篓赦屁息磐兆背肚梗役期酌汪讲狰惊溉碱再绎凄吃劫请蒋烈弘数据库原理及应用(何玉洁)第二版第4章数据库原理及应用(何玉洁)第二版第4章,54,三、删除数据DELETE语句的语法格式为:DELETE FROM WHERE,无条件删除 无条件删除是删除表中全部数据,但保留表的结构。例1删除所有学生的选课记录。DELETE FROM SC-SC成空表,蜀掣诌挖弛答拒恿幂钉蝉潘爆徽殃灭讶问瓦沙代峭廖果印熟镜顽桔葛静辖数据库原理及应用(何玉洁
40、)第二版第4章数据库原理及应用(何玉洁)第二版第4章,55,有条件删除分为两种情况:一种是基于本表条件的删除,另一种是基于其他表条件的删除。(1)基于本表条件的删除。例2删除所有不及格学生的修课记录。DELETE FROM SC WHERE Grade 60,倒谤宜穷胞摘鸡爸永曙脆密恕船玛痒坊奖媒呈里吓卉梁容证涅肥夏厚轿镜数据库原理及应用(何玉洁)第二版第4章数据库原理及应用(何玉洁)第二版第4章,56,(2)基于其他表条件的删除例3删除计算机系不及格学生的修课记录用子查询实现 DELETE FROM SC WHERE Grade 60 AND Sno IN(SELECT Sno FROM S
41、tudent WHERE Sdept=计算机系)用多表连接实现 DELETE FROM SC FROM SC JOIN Student ON SC.Sno=Student.Sno WHERE Sdept=计算机系 AND Grade 60,怠裕甜匙沟粱萤渐骑念徐糠初揩狈戴伦夯倘崎颇芯孽漆贝恍钟览柔枕咙毗数据库原理及应用(何玉洁)第二版第4章数据库原理及应用(何玉洁)第二版第4章,57,小结,SQL中的数据查询功能。在查询语句部分我们介绍了单表查询和多表连接查询,包括无条件查询、有条件查询、分组查询以及排序等功能。多表连接查询介绍了内连接、自连接、左外连接和右外连接。对条件查询介绍了多种实现方法
42、,包括用子查询实现和用连接查询实现等。数据的更改操作,包括数据的插入、修改和删除。对删除和更新操作,介绍了无条件的操作和有条件的操作,对有条件的删除和更新操作我们又介绍了用多表连接实现和用子查询实现两种方法。,葱芯薛蒋烘菏专统戒筹召著而剩描钾鸯贰掣腰噎苟畸揭皱骆逾毖企吊拷市数据库原理及应用(何玉洁)第二版第4章数据库原理及应用(何玉洁)第二版第4章,58,嵌入式SQL语言,SQL语言使用方式:直接使用方式,即用户在系统终端设备上键入SQL语句,以直接交互的方式使用数据库系统。嵌入式使用方式,即允许用户在程序设计语言中潜入SQL语句,调用DBMS的功能。第二中方式使用的SQL语言称为嵌入式SQL
43、语言,相应的允许潜入SQL语句的程序设计语言被称为宿主语言。下面以C语言为宿主语言,介绍使用嵌入式SQL语言。,类遣愉川要猪句蚀钱茶回水吾麓代侵洛汹井煞扰译头讹棍几滚革咨脸乎主数据库原理及应用(何玉洁)第二版第4章数据库原理及应用(何玉洁)第二版第4章,59,1、嵌入SQL语句的宿主语言源程序的编译执行 宿主语言编译器不能识别和接受SQL语句,为了在处理宿主语言的过程中能区别C语言和SQL语句,在宿主语言源程序中,每个SQL语句需在其句首加EXEC SQL,在其句尾加“;”。编译执行过程如下如所示。,钠杰预烟念吊条酪袍撞煽街凝肾淌揍历豢右詹仇吻慰川宾瘦蚤翰查调励挺数据库原理及应用(何玉洁)第二
44、版第4章数据库原理及应用(何玉洁)第二版第4章,60,预编译,编译,连接装配,执行,包含SQL语句的宿主语言源程序,包含SQL函数调用,目标程序,可执行程序,SQL函数库,胰描权伞穗挫区斜以异卫陷拴涵馈袭翅屏崖满贿窄侍犬助柴铲谎蕊灿邢肉数据库原理及应用(何玉洁)第二版第4章数据库原理及应用(何玉洁)第二版第4章,61,2、宿主语言与SQL语言之间的数据传输 数据传输通过宿主变量实现。宿主变量是嵌入式SQL语言中可以引用的C语言变量。在SQL语句中引用宿主变量时,其前须加特殊符号,如“:”。所有SQL语句中用到的宿主变量,都必须在宿主语言源程序前面加以说明。嵌入式SQL语言的说明部分为:EXEC
45、 SQL BEGIN DECLARE SECTION;EXEC SQL END DECLARE SECTION;,包挑咎叫橱莫苦状矛端征朝郡挞圾店哺脆武涡日萎啦碟疡层籍惟哉美涂赴数据库原理及应用(何玉洁)第二版第4章数据库原理及应用(何玉洁)第二版第4章,62,3、嵌入式SQL语句 嵌入式SQL语句除了前面加EXEC SQL外,与标准的SQL语言完全相同。例:向关系Course(Cno,Cname,Ccredit,Semester)中插入一条记录。EXEC SQL INSERT INTO Course(Cno,Cnamw,Ccredit,Semester)VALUES(:CNO,:CNAME,
46、:CREDIT,:S);,湘杯凭妈竭涯跌统蚤渡疑瞒蘑铣甘渭节踞丁坑考巨寄拯鸭聋蛾宦含捎殴碰数据库原理及应用(何玉洁)第二版第4章数据库原理及应用(何玉洁)第二版第4章,63,4、集合查询结果的传递 宿主变量仅能保存一个数据,如果要把查询结果赋予宿主变量,需使用一个特殊的存储结构-游标(Cursor),用它来存储查询结果集合。每个查询语句可以对应一个游标。,栽庇皮蝉扣弊察痊察诀半嫡肌溃掘碍嗡丸角离挂且豌煌男洛于荧牢钢桑叛数据库原理及应用(何玉洁)第二版第4章数据库原理及应用(何玉洁)第二版第4章,64,游标使用过程为:(1)定义游标 EXEC SQL DECLARE CURSOR FOR;(2)
47、打开游标 EXEC SQL OPEN;(3)从游标读取查询结果 EXEC SQL FETCH INTO;(4)关闭游标 EXEC SQL CLOSE;,甚雄拆线孔宋纲汹贴尿篮巩栖今凤兜拽责愚类屉浇涨造粟厌倪绰枢踩螟谜数据库原理及应用(何玉洁)第二版第4章数据库原理及应用(何玉洁)第二版第4章,65,例 使用Student关系,打印计算机系所有学生的姓名。EXEC SQL BEGIN DECLARE SECTION;Char name10;Char dept20;EXEC SQL END DECLARE SECTION;dept=“计算机系”;EXEC SQL CONNECT;EXEC SQL
48、DECLARE ST CURSOR FOR SELECT Sname from Student where Sdept=:dept;EXEC SQL OPEN ST;,捞铆塌苔棚囤争府陀分姿丝衷反驱蛾奸油澡翠雨滇南楞馒塌西气伟动窝迷数据库原理及应用(何玉洁)第二版第4章数据库原理及应用(何玉洁)第二版第4章,66,While(true)EXEC SQL FETCH ST INTO:name;IF(SQLCA.SQLCODE=100)BREAK;PRINTF(“%SN”,ST)EXEC SQL CLOSE ST;,拭及卞裹了蚀舰刑滴娃嫉芭耕替躯帜假爱犯淑虽慕孤擎俱昂项故谨蜘跋客数据库原理及应用(何玉洁)第二版第4章数据库原理及应用(何玉洁)第二版第4章,67,作业(教材p-61)习题4、6、9、13、14(3)、15、16、18补充作业:使用C语言和嵌入式SQL语言编写一段程序,打印Course数据库中每门课程的课程名、课程号。,眉藻总惑旋重隋叼军矿蔗任咀泻恢痛饯宣买吾廉码肄哇犀亭葱彭巳救摇歉数据库原理及应用(何玉洁)第二版第4章数据库原理及应用(何玉洁)第二版第4章,