资源预览内容
第1页 / 共138页
第2页 / 共138页
第3页 / 共138页
第4页 / 共138页
第5页 / 共138页
第6页 / 共138页
第7页 / 共138页
第8页 / 共138页
第9页 / 共138页
第10页 / 共138页
亲,该文档总共138页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
周口师范学院计算机科学系02级教育专业第3章 关系数据库标准语言SQL旧剑履娱赢坊狈虾哄屿殆敲想气藐纹彝刘描事酶阔跑描痘胡伯溉邀惯宣猾第3章关系数据库标准言SQL第3章关系数据库标准言SQL7/22/20241周口师范学院计算机科学系周口师范学院计算机科学系02级教育专业在数据库系统中,数据查询是最常用的操作。SQL是目前使用最广泛的数据库语言。利用SQL可以通过功能强大而又简捷的查询语言与数据库打交道,从数据库中得到想要的数据。SQL语句主要被用于进行数据库的查询、定义、操纵和控制几个方面,是一种功能齐全的数据库语言。SQL的数据定义是指对关系模式一级的定义。数据操纵是指对关系中的具体数据进行增、删、改等更新操作。数据控制是指对数据访问权限的授予与取消。筷乐象舷灿捡盘询茧洗捻笺孩毖宁庞纸顽各趾藐佑衙幽旦荆法侵裸缄押支第3章关系数据库标准言SQL第3章关系数据库标准言SQL7/22/20242周口师范学院计算机科学系周口师范学院计算机科学系02级教育专业3.1 SQL语言基本知识3.1.1 SQL的发展史1974年 IBM圣 约 瑟 实 验 室 的 Boyce和Chamberlin为 关 系 数 据 库 管 理 系 统System-R设计的一种查询语言,当时称为SEQUEL语言(Structured English Query Language),后简称为SQL。1981年IBM推出关系数据库系统SQL/DS后,SQL得到了广泛应用。1986年美国国家标准协会(ANSI)公布了第一个SQL标准SQL86。1987年,ISO通过SQL86标准。族臃桐张蜒体贞音催可裳倔吮恍缺炼许纽罗胜尔愤矿舌讶拾佑廖愧旁猩限第3章关系数据库标准言SQL第3章关系数据库标准言SQL7/22/20243周口师范学院计算机科学系周口师范学院计算机科学系02级教育专业1989年,ISO制定SQL89标准,SQL89标准在SQL86基础上增补了完整性描述。 1990年,我国制定等同SQL89的国家标准。1992年,ISO制定SQL92标准,即SQL2。1999年,ANSI制定SQL3标准。SQL成为国际标准后,对数据库以外的领域产生了很大的影响,有不少软件产品将SQL语言的数据查询功能与图形功能、软件工程工具、软件开发工具、人工智能程序结合起来。SQL已成为数据库领域中一个主流语言。澄垣鬼镣奥秽坚妙炮什暮交喀墒椽逛酚酋忠粒撞兑鸿舵配安呜淀帝捅洱决第3章关系数据库标准言SQL第3章关系数据库标准言SQL7/22/20244周口师范学院计算机科学系周口师范学院计算机科学系02级教育专业在许多软件产品中,软件厂商都对SQL的基本命令集进行了扩充,将其扩展成嵌入式SQL语言。SQL Server 2000中使用Transact-SQL语言与数据库服务器打交道。 祈桔谅孽弯宜优抖点昆蔡包挺吕裹峡罐夸法益胃心步履伺肠奈醛忻优影赎第3章关系数据库标准言SQL第3章关系数据库标准言SQL7/22/20245周口师范学院计算机科学系周口师范学院计算机科学系02级教育专业3.1.2 SQL的特点SQL具有如下特点:1综合统一。2高度非过程化。3面向集合的操作方式。4以同一种语法结构提供两种使用方式5. 语言简捷、易学易用。 SQL语言功能极强,但由于设计巧妙,语言十分简捷,完成核心功能只用了9个动词,如下表示,SQL语言接近英语口语,因此容易学习,容易使用。凑藐迟摇奋房搭臂怎云偿仲狸瘟细尧迅棱耗渗摇碍宽司仟缓产楔若烤研给第3章关系数据库标准言SQL第3章关系数据库标准言SQL7/22/20246周口师范学院计算机科学系周口师范学院计算机科学系02级教育专业SQL的功能动词数据查询SELECT数据定义CREATE, DROP, ALTER数据操纵INSERT, UPDATE, DELETE数据控制GRANT, REVOKESQL语言的动词语言的动词缝咏壤漂消哩组剥迎庆惹韶问编螺局梭扼蹲株泛拦垛爬你详路申督撇惑坍第3章关系数据库标准言SQL第3章关系数据库标准言SQL7/22/20247周口师范学院计算机科学系周口师范学院计算机科学系02级教育专业SQL语言支持关系数据库三级模式结构,如下图示。其中外模式对应于视图和部分基本表,模式对应于基本表,内模式对应于存储文件。基本表是本身独立存在的表,在SQL中一个关系就对应一个表。一个(或多个)基本表对应一个存储文件。一个表可以带若干个索引,索引也存放在存储文件中。存储文件的逻辑结构组成了关系数据库的内模式,存储文件的物理结构是任意的,对用户是透明的。视图是从一个或几个基本表导出的表。它本身不独立存储在数据库中,是一个虚表。即数据库中只存放视图的定义而不存放视图对应的数据。仟排碴里幼愿瘩凄晰哗付结勿靶即豹晕蓝厄氛硅晋庞叹掣吨带温物榷西培第3章关系数据库标准言SQL第3章关系数据库标准言SQL7/22/20248周口师范学院计算机科学系周口师范学院计算机科学系02级教育专业外模式外模式内模式内模式模式模式郡平斟族校轴真肿并登纷阴浚岗皖硫墩什抖翟明隆姐汉睫鹊盘享哆征哪包第3章关系数据库标准言SQL第3章关系数据库标准言SQL7/22/20249周口师范学院计算机科学系周口师范学院计算机科学系02级教育专业3.1.3 SQL的分类1、数据定义语言(DDL:Data Definition Language)创建、修改或删除数据库中各种对象,包括表、视图、索引等。2、查询语言(QL:Query Language)按照指定的组合、条件表达式或排序检索已存在的数据库中的数据,但并不改变数据库中数据。3、数据操纵语言(DML:Data Manipulation Language )对已经存在的数据库进行记录的插入、删除、修改等操作喜抿览疽湖浓鳖缸乘外重煮揽衬拙陈熄镜斤庸丸哀犁彪遂鼓窝植官俩狐镍第3章关系数据库标准言SQL第3章关系数据库标准言SQL7/22/202410周口师范学院计算机科学系周口师范学院计算机科学系02级教育专业4、 数 据 控 制 语 言 ( DCL: Data Control Language)用来授予或收回访问数据库的某种特权、控制数据操纵事务的发生时间及效果、对数据库进行监视注意:在书写各种SQL 命令时,命令中所涉及的标点符号,如括号、逗号、分号、圆点(英文句号)等都应是英文半角,如果写成中文全角符号,则会在执行命令时出错。 硬畸慢悍莆盏囚锣患顺充呛窗揍快伴龚斗篓尖毗鸦擎攘佃喧豢驯恰呀耙溢第3章关系数据库标准言SQL第3章关系数据库标准言SQL7/22/202411周口师范学院计算机科学系周口师范学院计算机科学系02级教育专业3.2 数据定义数据定义命令用于建立数据库和建立、修改、删除基本表。表CREATE TABLEDROP TABLEALTER TABLE视图CREATE VIEWDROP VIEW索引CREATE INDEXDROP INDEX操作对象操作方式 创建 删除 修改SQL的数据定义语句的数据定义语句卤淄潭复坐湿咏棠戚擒唉闽哈伤耿耍胆衅为慎刨谆舒患纪吐盏颓栓轰氰蛀第3章关系数据库标准言SQL第3章关系数据库标准言SQL7/22/202412周口师范学院计算机科学系周口师范学院计算机科学系02级教育专业3.2.1 定义、删除与修改基本表一、定义基本表 建立数据库最重要的一步就是定义一些基本表。SQL语言使用CREATE TABLE 语句定义基本表,其一般格式如下: CREATE TABLE (列级完整性约束条件 列级完整性约束条件表级完整性约束条件);其中是所要定义的基本表的名字,它可以由一个或多个属性(列)组成。找垢浊宝堰豁邵陨迁神渔墟苯皂吠炎扦略驳抗剑革缝敛绿项撵硬滔羔亩颐第3章关系数据库标准言SQL第3章关系数据库标准言SQL7/22/202413周口师范学院计算机科学系周口师范学院计算机科学系02级教育专业建表的同时通常还可以定义与该表有关的完整性约束条件。这些完整性约束条件被存入系统的数据字典中,当用户操作表中数据时由DBMS自动检查该操作是否违背这些完整性约束条件。如果完整性约束条件涉及到该表的多个属性列,则必须定义在表级上,否则既可以定义在列级上也可以定义在表级上袖纲堵灸伺鸟狞贫忆藉耍搽岛炎扳瞳恶巴丘矮橙淡互舒正徐迎穗噬迈抨君第3章关系数据库标准言SQL第3章关系数据库标准言SQL7/22/202414周口师范学院计算机科学系周口师范学院计算机科学系02级教育专业例1 建立一个“学生”表Student,它由学号Sno,姓名Sname,性别Ssex,年龄Sdept、所在系Sdept五个属性组成。其中学号不能为空,值是唯一的,并且姓名取值也唯一。CREATE TABLE Student (Sno CHAR(5) NOT NULL UNIQUE, Sname CHAR(20) UNIQUE, Ssex CHAR(1), Sage INT, Sdept CHAR(15);其中:NOT NULL指的是该列的值不能为空值, UNIQUE指的是该列的值唯一。善宿吱散朔晒喻莫签散峪梗返邪楷凭碑皿劲像巾摧娜枣月际德翠掇面和勺第3章关系数据库标准言SQL第3章关系数据库标准言SQL7/22/202415周口师范学院计算机科学系周口师范学院计算机科学系02级教育专业SnoSnameSsexSageSdeptStudent闰楷森呀冯嚷芭力鱼舵抑词古恬遍媒乒式蝗四椅揉然伍蚁蛔铁护嘻痈俐呵第3章关系数据库标准言SQL第3章关系数据库标准言SQL7/22/202416周口师范学院计算机科学系周口师范学院计算机科学系02级教育专业例2:建立如下表所示学生基本情况表的命令是:create table jbqk(number char(8)not null,name char(8)not null,sex char(2)not null,Birthday datetime,department char(12);numbernamesexBirthday departmentjbqk卉猪眉忍斑称潮瓜塘佃毫橱角提仰诫娶挨贤小一交盗叫验胺却塌牛猫区瑟第3章关系数据库标准言SQL第3章关系数据库标准言SQL7/22/202417周口师范学院计算机科学系周口师范学院计算机科学系02级教育专业数据类型说明符备注整数INT字长32位短整数SMALLINT字长16位十进制数DEC(m,n)m为总十进制位数,n为小数位数浮点数FLOAT一般指双精度浮点数 64位定长字符串 CHAR(n)变长字符串 VARCHAR(n)位串BIT(n)二进制位串,长度为n.变长位串BIT ARYINT(n)日期DATE日期加时间 DATESTAMP熟闹嚎崇逊臻舶主渭绦掏洗假城域氧搁付正绵牛摩规脓煌撕苯砍熬灌惯饮第3章关系数据库标准言SQL第3章关系数据库标准言SQL7/22/202418周口师范学院计算机科学系周口师范学院计算机科学系02级教育专业建立课程表的命令是:create table course(c_number char(4)not null, c_name char(20) not null, period decimal(3,0), t_number char(4) not null);建立教师表(teacher)的命令是::create table teacher(t_number char(4) not null, t_name char(8), title char(10);建立选课表(sle_course)的命令是::Create table sle_course(s_number char(8) not null, c_number char(4), score decimal(3,0); 郊夕冻潭女渣阻淆渤薛元非姬描揍励史竹苹睫碴送间昼剐芭持范疵酮铁诡第3章关系数据库标准言SQL第3章关系数据库标准言SQL7/22/202419周口师范学院计算机科学系周口师范学院计算机科学系02级教育专业二、修改基本表随着应用环境和应用需求的变化,有时需要修改已建立好的基本表,SQL语言使用ALTER TABLE 语句定义基本表,其一般格式如下: ALTERTABLE ADD 列级完整 性约束条件 DROP MODIFY ;厅肩银离页艾冷促寸奈踏雪变统欧斋朋卫砍涌车捧僻衅涵柞羚瘁刀汰反观第3章关系数据库标准言SQL第3章关系数据库标准言SQL7/22/202420周口师范学院计算机科学系周口师范学院计算机科学系02级教育专业例1:向Student表中增加“入学时间”列,其数据类型为日期型。 ALTER TABLE Student ADD Scome DATE;不论基本表中原来是否已有数据,新增加的列一律为空值。例2:将Student表中年龄的数据类型改为短整型 ALTER TABLE Student MODIFY Sage SMALLINT;示哥淋妥缄帅沿喷绩工协夺遍蹄钮球芬植赴蓟儒德摔又靛啦关斡狄踢预惫第3章关系数据库标准言SQL第3章关系数据库标准言SQL7/22/202421周口师范学院计算机科学系周口师范学院计算机科学系02级教育专业例3 将Student表中学生姓名必须取唯一值的约束删除 ALTER TABLE Student DROP UNIQUE(Sname);SQL没有提供删除属性列的语句,用户只能间接实现这一功能,即先把表中要保留的列及其内容复制到一个新表中,然后删除原表,再将新表重命名为原表名。 豢乡同挝瓣幽稚轩腮仔闽勤棕爬攀煮覆炯茫辩挽迄初怖爹晌版张筒潍巧肿第3章关系数据库标准言SQL第3章关系数据库标准言SQL7/22/202422周口师范学院计算机科学系周口师范学院计算机科学系02级教育专业三、 数据表的删除 DROP TABLE ;例4:删除Student表,使用如下命令格式: DROP TABLE Student; 注意注意: 基本表定义一旦删除,表中的数据、此表上建立的索引和视图都将自动被删除掉。因此执行删除基本表的操作一定要格外小心。刽怯珠各也肯您琵勇涨哈岁围副描刁嘱枢眉料乍锤沮恫隋诡伙靖鸽昔疲俩第3章关系数据库标准言SQL第3章关系数据库标准言SQL7/22/202423周口师范学院计算机科学系周口师范学院计算机科学系02级教育专业3.2.2 索引的建立与删除索引是对数据库表中一个或多个列的值进行排序的结构。可以利用索引快速访问数据库表中的特定信息。一、建立索引语句CREATE UNIQUECLUSTER INDEX ON (列名次序,列名次序);说说明明:索引可以建立在一列和多列之上,索引顺序可以是ASC(升序)或DESC(降序),缺省值是ASC(升序) 。UNIQUE表示每一个索引值对应唯一的数据记录。残馁获泌陨帽由蜡英描啪犬牌箩挠挣散否持语观责匠娟口籽七奇耘蝉快撑第3章关系数据库标准言SQL第3章关系数据库标准言SQL7/22/202424周口师范学院计算机科学系周口师范学院计算机科学系02级教育专业UNIQUE表明此索引的每一个索引值只对应唯一的数据记录。CLUSTER表示要建立的索引是聚簇索引。所谓聚簇索引是指索引项的顺序与表中记录的物理顺序一致的索引组织。例如,执行下面的索引语句: CREATE CLUSTER INDEX Stusname ON Student(Sname); 将会在Student表的Sname列上建立一个聚簇索引,而且Student表中的记录将按照Sname值的升序存放。小蛾惨仑佣嗅睫浓拼纷型彝糊凭壶督妖川秃悔氓顷崭暴梳婆鼓狭碘脓之键第3章关系数据库标准言SQL第3章关系数据库标准言SQL7/22/202425周口师范学院计算机科学系周口师范学院计算机科学系02级教育专业用户可以在最常查询的列上建立聚簇索引以提高查询效率。显然在一个基本表上最多只能建立一个聚簇索引。建立聚簇索引后,更新索引列数据时,往往导致表中记录的物理顺序的变更,代价较大,因此对于经常更新的列不宜建立聚簇索引。蚕崖潘交兆崇萤拧胀手鹃餐歌栅痛柿挖淌泪瞥胶罗唬楼堆滴苗冉谅堕木佩第3章关系数据库标准言SQL第3章关系数据库标准言SQL7/22/202426周口师范学院计算机科学系周口师范学院计算机科学系02级教育专业例1:为学生数据库中的Student,Course,SC三个表建立索引,其中,Student表按学号升序建唯一索引,Course表按课程号升序建唯一索引,SC表按学号升序和课程号降序建唯一索引。CREATE UNIQUE INDEX Stusno ON Student(Sno);CREATE UNIQUE INDEX Coucno ON Course(Cno);CREATE UNIQUE INDEX SCno ON SC(Sno ASC,Cno DESC);秘捏怪部递碰黎侠贬荐排烬滤帚宁寥乓界宋彭培丽递疆擎忆帽勋河狸让协第3章关系数据库标准言SQL第3章关系数据库标准言SQL7/22/202427周口师范学院计算机科学系周口师范学院计算机科学系02级教育专业学号Sno姓名Sname性别Ssex年龄Sage系别Sdept95001李勇男20CS95002刘晨女19IS95003王敏女18MA95004张立男19ISStudent(a)设有一个学生设有一个学生-课程数据库,包括学生关系课程数据库,包括学生关系Student课程关系课程关系Course和选修关系和选修关系SC。如下图示。如下图示6868枣盎咯歉运俯记凡俭叶舶尹捌唉抨摔湾驮氨施泽皮判祝饵萝陆淑鹰积秤坍第3章关系数据库标准言SQL第3章关系数据库标准言SQL7/22/202428周口师范学院计算机科学系周口师范学院计算机科学系02级教育专业课程号Cno课程名Cname先行课Cpno学分Ccredit1数据库542数学23信息系统144操作系统635数据结构746数据处理27PASCAL语言64Course(b)尾咀溯番搁疾阮料例又讥鞘滁竖葬澳度毫镀窖狭类资单汝譬莎彦泅拟椎敢第3章关系数据库标准言SQL第3章关系数据库标准言SQL7/22/202429周口师范学院计算机科学系周口师范学院计算机科学系02级教育专业学号Sno课程号Cno成绩Grade9500119295001285950013889500229095002380( c )SC硒背譬舰擅销撒纶眼浆傣汀怯胃虞耪掉驭龙靡猎禄眶瘁刘衣萤礼涪龋建叠第3章关系数据库标准言SQL第3章关系数据库标准言SQL7/22/202430周口师范学院计算机科学系周口师范学院计算机科学系02级教育专业二、删除索引索引一经建立,就由系统使用和维护它,不需用户干预。建立索引是为了减少查询操作时间,但如果数据增、删、改频繁,系统会花费许多时间来维护索引,这时,可以删除一些不必要的索引DROP INDEX ;注意:该命令不能删除由CREATE TABLE或者ALTER TABLE命令创建的主键和唯一性约束索引,也不能删除系统表中的索引。例2、删除例1中建立的索引Stusno DROP INDEX Stusno;讯绣着扼淀俗滤赦璃旋尾圣忙胰教访浪炉裁摔威龚里跨亏呛寒馆崎锅奇胚第3章关系数据库标准言SQL第3章关系数据库标准言SQL7/22/202431周口师范学院计算机科学系周口师范学院计算机科学系02级教育专业3.3 数据查询语言数据库查询是数据库的核心操作。SQL语言提供了SELECT语句进行数据库的查询,该语句具有灵活的使用方式和丰富的功能。染丁姿骚胯洪种赊湿比喻郴鬼羌佃谩轮陋逝析谎有铀塔地核态香隔喜永折第3章关系数据库标准言SQL第3章关系数据库标准言SQL7/22/202432周口师范学院计算机科学系周口师范学院计算机科学系02级教育专业SQL语言的查询语句一般格式是:SELECT ALL|DISTINCT ,FROM ,WHERE GROUP BY HAVING ORDER BY ASC|DESC;下面对该命令进行一些说明: 斧矿昆收敌框稚翌错撮典彰朔铆茶副一刷核陀臣渠宵淀素孰亥滋发副蒲媚第3章关系数据库标准言SQL第3章关系数据库标准言SQL7/22/202433周口师范学院计算机科学系周口师范学院计算机科学系02级教育专业1命令含义 从FROM子句指定的基本表或视图中,根据WHERE子句的条件表达式查找出满足该条件的元组(记录),再按照SELECT子句指定的目标列表达式,选出元组中的属性值形成结果表。如果有GROUP BY子句,则将结果按“列名1”的值进行分组,该属性列值相等的元组为一个组;如果GROUP BY子句带有短语HAVING,则只有满足短语指定条件的分组才会输出。如果有ORDER BY子句,则结果表要按照的值进行升序和降序排列。淮扳惋凄持笋跌沏脆挛辞造淮迅拐滓写素质仇饼锑经焦料搀病呼坏酪敖酪第3章关系数据库标准言SQL第3章关系数据库标准言SQL7/22/202434周口师范学院计算机科学系周口师范学院计算机科学系02级教育专业SELECT ALL|DISTINCT实现的是对表的投影操作,WHERE 中实现的是选择操作。FROM ,实现的是对指定表的广义笛卡尔积 桓寄匆坠粳疵必块簇涤盲涣翔雨日苞呛馆稻盂渠匙着受谩簿菲捣蛀锹沙孰第3章关系数据库标准言SQL第3章关系数据库标准言SQL7/22/202435周口师范学院计算机科学系周口师范学院计算机科学系02级教育专业2目标列表达式列表达式可以是“列名1,列名2”的形式;如果FROM子句指定了多个表,则列名应是“表名.列名”的形式。列表达式可以使用SQL提供的库函数形成表达式,常用的函数如下:COUNT(*):统计记录条数。COUNT(列名):统计一列值得个数。SUM(列名):计算某一数值型列的值的总和。AVG(列名):计算某一数值型列的值的平均值MAX(列名):计算某一数值型列的值的最大值DISTINCT参数:表示在结果集中,查询出的内容相同的记录只留下一条。 MIN(列名):计算某一数值型列的值的最小值黔冰裹瓦融连朔怜易戌毛渺侦兼痹焰撇车称蓖推核骗伐胃噬绵蓖煞吧省搔第3章关系数据库标准言SQL第3章关系数据库标准言SQL7/22/202436周口师范学院计算机科学系周口师范学院计算机科学系02级教育专业3.3.1 单表查询单表查询是指仅涉及一个表的查询。一、选择表中的若干列选择表中的全部列和部分列,就是投影运算。1、查询指定列 在很多情况下,用户只对表中的一部分属性列感兴趣,这时可以通过在SELECT子句的中指定要查询的属性。香蒲档蔡瓶癌绚轨裙蛛悠刽第丘蕾戌蔚蜀漆栽反影竖少撞星憋赌箩疽傻产第3章关系数据库标准言SQL第3章关系数据库标准言SQL7/22/202437周口师范学院计算机科学系周口师范学院计算机科学系02级教育专业例1:查询全体学生的学号和姓名。 SELECT Sno,Sname FROM Student;例2:查询全体学生的姓名、学号、所在系。 SELECT Sname, Sno,Sdept FROM Student;窗翔剧身萄障珍灸彻悔勉伪叠吮鸵啄骄嘛肾虹竟柔萝欢却耗豫磺蕾嚷菜潮第3章关系数据库标准言SQL第3章关系数据库标准言SQL7/22/202438周口师范学院计算机科学系周口师范学院计算机科学系02级教育专业2、查询全部列将表中所有属性列都选出来,可以有两种方法。一种方法是在SELECT关键字后列出所有的列名。如果列的显示顺序与其在基表中的顺序相同,也可以简单地将指定为*。例3:查询全体学生的详细记录。SELECT * SELECT Sno,Sname,FROM Student FROM Student墓稼九棍救揉抹覆作汛吓跳被眶济喳跌汕桑冠瞩糙赶遗卤七抉董排譬卓三第3章关系数据库标准言SQL第3章关系数据库标准言SQL7/22/202439周口师范学院计算机科学系周口师范学院计算机科学系02级教育专业3、查询经过计算的值SELECT子句的不仅可以是表中的属性列,也可以是表达式。例4:查全体学生的姓名及其出生年份SELECT Sname,2004-SageFROM Student;输出的结果为:不仅可以是算术表达式,还可以是字符串常量、函数等。庞盾貉伪籽狗厂萄烫蒲黑没唉溃祸索渡恩逻蜘陋棵笑祭营寿又睁搀瘸冲舀第3章关系数据库标准言SQL第3章关系数据库标准言SQL7/22/202440周口师范学院计算机科学系周口师范学院计算机科学系02级教育专业例5:查询全体学生的姓名,出生年份和所在系,要求用小写字母表示所在系名。SELECT Sname,Year of Birth, 2004-Sage,ISLOWER(Sdept)FROM Student;输出结果为: 用户可以通过指定别名来改变查询结果的列标题。这对于含算术表达式、常量、函数名的目标列表达式尤为有用。例如,对上例,可定义如下:吕征驱肢甩递踪村气菲肌翟描赣骆第绕瞻宴角死加疟陷剿础关客改溜紊声第3章关系数据库标准言SQL第3章关系数据库标准言SQL7/22/202441周口师范学院计算机科学系周口师范学院计算机科学系02级教育专业SELECT Sname NAME,Year of Birth; BIRTH,2004-Sage BIRTHDAY, ISLOWER(Sdept) DEPARTMENTFROM Student;结果为:NAME BIRTHBIRTHDAY DEPARTMENT李勇Year of Birth:1976cs刘晨Year of Birth:1977is王敏Year of Birth:1978ma(c)(c)锻患座冯褥吕亡蹲寺炒缮唉绸爷儒慨辖计迪饶乍巧符狈选跑蓟落露脯担肤第3章关系数据库标准言SQL第3章关系数据库标准言SQL7/22/202442周口师范学院计算机科学系周口师范学院计算机科学系02级教育专业SnameYear of Birth:2004-SageISLOWER(Sdept)李勇Year of Birth:1976cs刘晨Year of Birth:1977is王敏Year of Birth:1978maSname2004-Sage李勇1976刘晨1977王敏1978(a)(a)(b)(b)砸柏塌禹请听速翱子发僧荆资痔枷煞伺娶党峙萍浪胰腺精页管奸二嵌灼锚第3章关系数据库标准言SQL第3章关系数据库标准言SQL7/22/202443周口师范学院计算机科学系周口师范学院计算机科学系02级教育专业二、选择表中的若干元组1、消除取值重复的行 两个本来并不完全相同的元组,投影到指定的某些列上后,可能变成相同的行。如果想去掉表中的重复行,必须在SELECT子句中指定DISTINCET短语。如果没有指定DISTINCET短语,则缺省为ALL,即保留结果表中取值重复的行。例 6:查询选修了课程的学生学号。 SELECT Sno FROM SC;揖侧造堡猛帛宫名桐党憨壁酶屹遍板附南踪括糙辞瞄锁哭隆青需凰多帐奏第3章关系数据库标准言SQL第3章关系数据库标准言SQL7/22/202444周口师范学院计算机科学系周口师范学院计算机科学系02级教育专业Sno9500195001950019500295002(a)(a)该查询结果里包含了许多重复行该查询结果里包含了许多重复行如果想去掉表中的重复行,则:SELECT DISTINCT SnoFROM SC;执行结果为:Sno9500195002(b)(b)澜湃辱帘弯褐易荧雄假疯行炎增幌忽俞绑累扫泼在磅阴姜夹特梯盲扦言臃第3章关系数据库标准言SQL第3章关系数据库标准言SQL7/22/202445周口师范学院计算机科学系周口师范学院计算机科学系02级教育专业2、查询满足条件的元组查询满足条件的元组可以通过WHERE子句来实现,WHERE子句常用的查询条件如下表示:旅税啤瞬锥表掖铭蹋票风方茁颗必耿罗递搞搅拉耐捧虾跑检揍蹭杜繁冉登第3章关系数据库标准言SQL第3章关系数据库标准言SQL7/22/202446周口师范学院计算机科学系周口师范学院计算机科学系02级教育专业查询查询条件条件运运 算算 符符说说 明明比比 较较= =,=,=,!= != ,(!) NOT+(!) NOT+字符串比较从左向右进字符串比较从左向右进行行确定确定范围范围BETWEEN AND,NOT BETWEEN ANDBETWEEN后是下限后是下限( (低低) ),AND后是上限后是上限确定确定集合集合IN,NOT IN检查一个某属性值是否检查一个某属性值是否属于指定集合的元组属于指定集合的元组字符字符匹配匹配LIKE,NOT LIKE用于构造条件表达式中用于构造条件表达式中的字符匹配的字符匹配空空 值值IS NULL,IS NOT NULL当属性值内容为空时,当属性值内容为空时,要用此运算符要用此运算符逻辑逻辑运算运算AND,OR,NOT用于构造复合表达式用于构造复合表达式常用的查询条件常用的查询条件霓咆另弃头刽姜淘痢镰蟹羌涡叶庐熔户持趾州荣原然鲜刷漱酝逗卜痒掷觅第3章关系数据库标准言SQL第3章关系数据库标准言SQL7/22/202447周口师范学院计算机科学系周口师范学院计算机科学系02级教育专业例7:查询考试成绩不及格学生的学号。SELECT DISTINCT Sno FROM SC WHERE Grade 60;例8:查询年龄在2023之间的学生的姓名,系别和年龄。SELECT Sname,Sdept,Sage FROM Student WHERE Sage BETWEEN 20 AND 23例9:查询年龄不在2023之间的学生的姓名,系别和年龄。SELECT Sname,Sdept,Sage FROM Student WHERE Sage NOT BETWEEN 20 AND 23邵枪爱钳标牡妓释倘攀泌隧宇缅粒嘶尘摹擞猎列之助舟坡敢夕耽躁颈神挞第3章关系数据库标准言SQL第3章关系数据库标准言SQL7/22/202448周口师范学院计算机科学系周口师范学院计算机科学系02级教育专业例10:查询计算机系、信息系学生的姓名、系别和年龄。SELECT Sname,Sdept,Sage FROM Student WHERE Sdept IN(CS,IS);例11:查询不是计算机系、也不是信息系的学生的姓名、系别和年龄。SELECT Sname,Sdept,Sage FROM Student WHERE Sdept NOTIN(CS,IS);扯逮者媳座包收寅殷定邪膜废初陡灾哮插邀琐皮抨伯久杖奸梯各通惺囚版第3章关系数据库标准言SQL第3章关系数据库标准言SQL7/22/202449周口师范学院计算机科学系周口师范学院计算机科学系02级教育专业谓词LIKE可以用来进行字符串的匹配。其一般语法格式如下:NOT LIKE ESCAPE 其含义是查找指定的属性列值与相匹配的元组。 可以是一个完整的字符串,也可以含有通配符和。其中:(百分号)代表任意长度(可以为)的字符串,如:a%b表示以a开头,以b结尾的任意长度的字符串。_(下划线)代表任意单个字符。a_b表示以a开头,以b结尾长度为的任意字符串。注匠柴汀说违逛唯乾仪荷辩巧骂陌瞳砖靡咆膏泳撮症绿瑟俏伶抵字溶况靡第3章关系数据库标准言SQL第3章关系数据库标准言SQL7/22/202450周口师范学院计算机科学系周口师范学院计算机科学系02级教育专业例12:查询所有姓“王”的学生信息。SELECT * FROM Student WHERE Sname like 王%;例13:查询名字中第二个字为“阳”的学生姓名和学号。SELECT Sname,Sno FROM Student WHERE Sname like _ _阳%;如果用户要查询的字符串本身就含有%或_就要使用ESCAPE 对通配符进行转义幂伯沟毗员您脊献症啡聘史嘱批子积沿痪湛盖曝坪覆哄校嗣抬侄诸房俗奥第3章关系数据库标准言SQL第3章关系数据库标准言SQL7/22/202451周口师范学院计算机科学系周口师范学院计算机科学系02级教育专业例14:查询DB_Design课程的课程号和学分SELECT Cno,Ccredit FROM CourseWHERE Cname like DB_Design ESCAPE ; 其中:ESCAPE 短语表示为换码字符,这样匹配串中紧跟在后面的字符“_”不再具有通配符的含义,转义为普通的“_”字符。例15:查询以“DB_”开头,且倒数第三个字符为i的课程的详细情况SELECT FROM CourseWHERE Cname like DB_%i_ _ ESCAPE ;佑典姿邵详腰似伴身碟峪虹丧浆掉威谴酷灿涂喀迄哈胖腥蓑力蛮耗厨笛悯第3章关系数据库标准言SQL第3章关系数据库标准言SQL7/22/202452周口师范学院计算机科学系周口师范学院计算机科学系02级教育专业例16 某些学生选修课程后没有参加考试,所以有选课记录,但没有考试成绩。查询缺少成绩的学生的学号和相应的课程号。SELECT Sno,Cno FROM SCWHERE Grade IS NULL例17查询所有有成绩的学生的学号和相应的课程号。SELECT Sno,Cno FROM SCWHERE Grade IS NOT NULL瘪课袄太岔骑究能拈间格蒲退泪令夫七幽铅铺讨汹密曲姨烂疯瞬惑驼裕史第3章关系数据库标准言SQL第3章关系数据库标准言SQL7/22/202453周口师范学院计算机科学系周口师范学院计算机科学系02级教育专业多重条件查询逻辑运算符AND和OR可用来联结多个查询条件, AND优先级高于OR,但用户可用括号改变优先级。例18 查询计算机系年龄在20岁以下的学生姓名SELECT SnameFROM Student WHERE Sdept=CSAND Sage20;例19:查询计算机系、信息系学生的姓名、系别和年龄。SELECT Sname,Sdept,Sage FROM Student WHERE Sdept =CS OR Sdept=IS;赦横怜笔格拜铲豹姨妖李熟走蹭件培诱诅爵你傈读违德逸怂羔鸯疤体部吹第3章关系数据库标准言SQL第3章关系数据库标准言SQL7/22/202454周口师范学院计算机科学系周口师范学院计算机科学系02级教育专业三、对查询结果排序用户可以用ORDER BY子句对查询结果按照一个或多个属性列的升序(ASC)或降序(DESC)排列,缺省值为升序。例19 查询选修了号课程的学号及其成绩,查询结果按分数的降序排列。SELECT Sno,GradeFROM SC WHERE Cno=3 ORDER BY Grade DESC; 对于空值,若按升序,含空值的元组将最后显示,若按降序排,空值的元组将最先显示。祭拖侄忘脂迫士缠其亦缉麓滩熙逢瑟淫鼻惠累凿末辞碘篱堵率缘矣伍嘛媳第3章关系数据库标准言SQL第3章关系数据库标准言SQL7/22/202455周口师范学院计算机科学系周口师范学院计算机科学系02级教育专业例19 查询全体学生情况,查询结果按所在系的系号升序排列,同一系中的学生按年龄降序排列。SELECT FROM Student ORDER BY Sdept,Sage DESC;锰棋惠渗几巫桥尘波闷群汕邦盆逸锭岳寝亚篱捣背世晌绿棠脚频邪烫丑侧第3章关系数据库标准言SQL第3章关系数据库标准言SQL7/22/202456周口师范学院计算机科学系周口师范学院计算机科学系02级教育专业四、查询中集函数的使用说明:DISTINCT:取消列中的重复值ALL:为默认状态,表示不取消重复值。 函数名称函数名称函数功能函数功能COUNT(DISTINCT|ALL *)统计元组个数统计元组个数COUNT(DISTINCT|ALL)统计一列重值的个数统计一列重值的个数SUM(DISTINCT|ALL)计算数值型一列值的总和计算数值型一列值的总和AVG(DISTINCT|ALL)求一列值的平均值求一列值的平均值MAX(DISTINCT|ALL)求一列值的最大值求一列值的最大值MIN(DISTINCT|ALL)求一列值的最小值求一列值的最小值呈稿矛傣犯年射抓典昼债噎彤卒斗监膘粟哲异计翘等弧宠简怨销痞桌德晰第3章关系数据库标准言SQL第3章关系数据库标准言SQL7/22/202457周口师范学院计算机科学系周口师范学院计算机科学系02级教育专业例2 20:查询学生总人数。SELECT COUNT(*) FROM Student;例21:计算95001学生的平均成绩。SELECT AVG(Grade) FROM SC WHERE Sno = 95001; 诊晤澳逞寻猎魄熬妖势账舞版濒裳所邵偶侍揍孰扮懈堪册漠嗣巴除谢降永第3章关系数据库标准言SQL第3章关系数据库标准言SQL7/22/202458周口师范学院计算机科学系周口师范学院计算机科学系02级教育专业 5查询结果的分组与排序GROUP BY子句将查询结果表按某一列或多列值分组,值相等的为一组。分组的目的是为了细化集函数的作用对象,如果未对查询结果分组,集函数将作用于整个查询结果。分组后集函数将作用在每一个组上,即每一组都有一个函数值。 孟赠忆膳谤彤立砧倔漾坝购圈羔摄渴葬壕绞焕爆佃润抱宝运盔晋狠届您图第3章关系数据库标准言SQL第3章关系数据库标准言SQL7/22/202459周口师范学院计算机科学系周口师范学院计算机科学系02级教育专业例22:查询选修了2门以上课程的学生学号,并且查询结果按照升序排列。 SELECT Sno FROM SC GROUP BY Sno HAVING COUNT(*) 2 ORDER BY Sno ASC; WHERE与HAVING的区别在于作用的对象不同。WHERE子句作用于基本表或视图,从中选择满足条件的记录;HAVING短语作用于分组,从中选出满足条件的组。 斥矢先螺输耗故外乏记躁鸵夏燕贴撕纺袋逝耍拽疼当茁立护妻徒汁虑请珍第3章关系数据库标准言SQL第3章关系数据库标准言SQL7/22/202460周口师范学院计算机科学系周口师范学院计算机科学系02级教育专业3.3.2 连接查询 前面的查询都是针对一个表进行的。若一个查询同时涉及两个以上的表,则称之为连接查询,连接查询是关系数据库中最主要的查询,包括等值连接、自然连接、非等值连接查询、自身连接查询、外连接查询和复合条件连接查询。偶圭诬瘤窍贼牢慑碑勺嚣昌窘测次血撅缚驶记伞音笔崎字下急内狗渴奇歇第3章关系数据库标准言SQL第3章关系数据库标准言SQL7/22/202461周口师范学院计算机科学系周口师范学院计算机科学系02级教育专业从概念上讲,DBMS执行连接操作的过程是:首先在表1中找到第一个元组,然后从头开始扫描表2,逐一查找满足连接条件的元组,找到后就将表1中的第一个元组与该元组拼接起来,形成结果表中一个元组。表2全部查找完后,再找表1中第2个元组,然后再从头开始扫描表2,逐一查找满足连接条件的元组,找到后就将表1中的第2个元组与该元组拼接起来,形成结果表中一个元组。重复上述操作,直到表1中的全部元组都处理完毕为止。帘赣蛀倪凋纷赶怜付漏因例啪咐士现姬麻酸蜘滨霄完翌套谷靠兄味败捅绊第3章关系数据库标准言SQL第3章关系数据库标准言SQL7/22/202462周口师范学院计算机科学系周口师范学院计算机科学系02级教育专业一、等值与非等值连接。连接查询中用来连接两个表的条件称为连接条件或连接谓词,其一般格式为: . . 其中主要有:=,=,=,!=。当连接运算符为 = 时,称为等值连接,使用其它运算符称为非等值连接。连接谓词中的称为连接字段, 连接条件中的各个连接字段类型必须是可比的,但不必是相同的。Eg.滥迪挛孙痰殃餐匡闪奢即忿豹琼碳吧消撬有正浆祈该野演需杂赋废撩玉瓷第3章关系数据库标准言SQL第3章关系数据库标准言SQL7/22/202463周口师范学院计算机科学系周口师范学院计算机科学系02级教育专业在本例中,SELECT子句与WHERE子句中的属性名前都加上了表名前缀,这是为了避免混淆。如果属性名在参加连接的各表中是唯一的,则可以省略表名前缀。连接运算中有两种特殊情况,一种为自然连接,另一种为广义笛卡尔积(连接)。广义笛卡尔积是不带连接谓词的连接。两个表的广义笛卡尔积即是两表中元组的交叉乘积,其连接的结果会产生一些没有意义的元组,所以这种运算实际很少使用。若在等值连接中把目标列中重复的属性列去掉则为自然连接。槽弓班卵耗阐诚圭疗扫衬贰乎八死今狱勋佩希翠丁猴煤追仿霹提粮椰盛养第3章关系数据库标准言SQL第3章关系数据库标准言SQL7/22/202464周口师范学院计算机科学系周口师范学院计算机科学系02级教育专业二、自身连接 连接操作不仅可以在两个表之间进行,也可以是一个表与其自己进行连接,称为表的自身连接。 在通常的连接操作中,只有满足连接条件的元组才能作为结果输出。贝超虱镐荣帜赋蜕梨萌叠贱汞嘶亦京叶芝蚊瑞碧网至路氖跳湃膝迎倚柳银第3章关系数据库标准言SQL第3章关系数据库标准言SQL7/22/202465周口师范学院计算机科学系周口师范学院计算机科学系02级教育专业三、外连接 外连接的表示方法为,在连接谓词的某一边加符号*(有的数据库系统中用+)。外连接就好象为符号*所在边的表增加一个“万能的”行,这个行全部由空值组成。它可以和另一边的表中所有不满足条件的元组进行连接(从而使得另一个表在连接的过程中不会有元组丢失)。 如果外连接符出现在连接条件的右边,称其为右外连接,如果外连接符出现在连接条件的左边,则称其为左外连接。辜踩梭渤咙士赊谅摧乱磺詹音想这讳踌叔澳押盂疟屋愤炔肤皮填紧齐春虹第3章关系数据库标准言SQL第3章关系数据库标准言SQL7/22/202466周口师范学院计算机科学系周口师范学院计算机科学系02级教育专业四、复合条件的连接 上面各个连接查询中,WHERE子句中只有一个条件,即连接谓词。 WHERE子句中可以有多个连接条件,称为复合条件连接。 连接操作除了可以是两表连接,一个表与其自身连接外,还可以是两个以上的表进行连接,后者称为多表连接。所诡走芥写舌议来太疯钠单仇凯肖钝倦妙懒琐姨趁郡肿侣楚诚杭铣同汲蚤第3章关系数据库标准言SQL第3章关系数据库标准言SQL7/22/202467周口师范学院计算机科学系周口师范学院计算机科学系02级教育专业例23 查询每个学生及其所选课程的情况 Select Student.*, SC.* From Student, SC Where Student.Sno = SC.Sno;例24 查询每个学生及其所选课程的情况(用自然连接) Select Student.Sno,Sname,Ssex,Sage,Sdept,Cno,Grade From Student, SC Where Student.Sno = SC.Sno;例25 查询所有比李勇年龄大的学生姓名、年龄 Select X.Sname, X.Sage From Student X, Student Y Where X.Sage Y.Sage And Y.Sname= 李勇结果结果结果结果炳否借办净礼搏蕾刻光受桃软坝约脸叠黔赚策姿思辊跪万碍鸥睬秽寡瓮缨第3章关系数据库标准言SQL第3章关系数据库标准言SQL7/22/202468周口师范学院计算机科学系周口师范学院计算机科学系02级教育专业Student.SnoSnameSsexSageSdept95001李勇男20CS95001李勇男20CS95001李勇男20CS95002刘晨女19IS95002刘晨女19ISSC.SnoCnoGrade9500119295001285950013889500229095002380该查询的执行结果:该查询的执行结果:馒货霹然屡莽猜明法幢块暴氛负勒幽涉驾幻憾普秤咎砰遮芯由裔映听吐阴第3章关系数据库标准言SQL第3章关系数据库标准言SQL7/22/202469周口师范学院计算机科学系周口师范学院计算机科学系02级教育专业Student.SnoSnameSsexSageSdept95001李勇男20CS95001李勇男20CS95001李勇男20CS95002刘晨女19IS95002刘晨女19ISCnoGrade192285388290380该查询的执行结果:该查询的执行结果:默晾拆娠絮瑞讼弯笔柬沃么役桐苫玫瞬狈辈酞贮摹眩啄隆旨饱跌傻律从酚第3章关系数据库标准言SQL第3章关系数据库标准言SQL7/22/202470周口师范学院计算机科学系周口师范学院计算机科学系02级教育专业例26 查询每一门课的间接先修课(即先修课的先修课)。 Select FIRST.Cno ,SECOND.Cpno From Course FIRST, Course SECOND Where FIRST.Cpno=SECOND.Cno;例27 查询所有学生的学号、姓名、选修的课程和成绩Select Student.Sno, Sname, Cname, Grade From Student, SC, Course Where Student.Sno=SC.Sno(+) And SC.Cno=Course.Cno(+) 贵凝贯师窜酷鼓遵怂仙稚扑瞒钝毛廓软霜盐绊屋婿蔼醒尔玄渡朱讥啪钮啤第3章关系数据库标准言SQL第3章关系数据库标准言SQL7/22/202471周口师范学院计算机科学系周口师范学院计算机科学系02级教育专业例28 查询选修2号课程且成绩在90分以上的所有学生。 SELECT Student.Sno, Sname FROM Student, SC WHERE Student.Sno=SC.Sno AND SC.Cno=2 AND SC.Grade90;雹姬贺忻篮预缄嗓屿仕直尿糯贝戎寝沤寄王剪其祁谴症陪寡磐序檬魔曝务第3章关系数据库标准言SQL第3章关系数据库标准言SQL7/22/202472周口师范学院计算机科学系周口师范学院计算机科学系02级教育专业例29 查询每个学生的学号、姓名、选修的课程名及成绩。 SELECT Student.Sno, Sname,Cname,Grade FROM Student, SC,Course WHERE Student.Sno=SC.Sno AND SC.Cno=Course.Cno;烁蘑潞箭拈臃肉豢耿术绩揣锰蛹径见帚独铁坪扛拌侵红冻言镇刨凳毗竣群第3章关系数据库标准言SQL第3章关系数据库标准言SQL7/22/202473周口师范学院计算机科学系周口师范学院计算机科学系02级教育专业Student.SnoSnameSsexSageSdept95001李勇男20CS95001李勇男20CS95001李勇男20CS95002刘晨女19IS95002刘晨女19ISSC.SnoCnoGrade9500119295001285950013889500229095002380该查询的执行结果:该查询的执行结果:95003王敏女18MA95004张立男19IS盖转峪宅垒即擅玲股吱梅墓吻号仓程篆入捐击酸竞浮祁茶堤婴拯渔就收拆第3章关系数据库标准言SQL第3章关系数据库标准言SQL7/22/202474周口师范学院计算机科学系周口师范学院计算机科学系02级教育专业岂感屋嘉单快痈辨焉浇淋躯奋攒宽涵尚搪啸财赁硷僧耻粟煞圭厉悍辑袜晨第3章关系数据库标准言SQL第3章关系数据库标准言SQL7/22/202475周口师范学院计算机科学系周口师范学院计算机科学系02级教育专业3.3.3嵌套查询在SQL语言中,一个SELECT-FROM-WHERE 称为一个查询块,将一个查询块嵌套在另一个查询块的WHERE子句或HAVING短语的条件中的查询称为嵌套查询。上层的查询块称为外层查询或父查询外层查询或父查询,下层查询称为内层查询或子查询内层查询或子查询。外层查询利用子查询来获取检索条件的条件值,并根据这个条件值确定外层查询的结果集合。SQL语言允许多层嵌套查询,即一个子查询中还可以嵌套其他子查询,通过子查询,可以利用一系列简单查询来构造一个复杂查询。子查询中的SELECT语句中不能使用ORDER BY子句,ORDER BY子句只能对最终查询结果排序。训台暮晒雷瞬智诲飘肖痪属毡呀杂友勤垄钒教圭帖朋卖啃折蜀弦骑盗量倔第3章关系数据库标准言SQL第3章关系数据库标准言SQL7/22/202476周口师范学院计算机科学系周口师范学院计算机科学系02级教育专业嵌套查询一般的求解方法是由里向外处理,即每个子查询在上一级查询处理之前求解,子查询的结果用于建立其父查询的查找条件。嵌套查询使我们可以用多个简单查询构成复杂的查询,从而增强SQL的查询能力。以层层嵌套的方式来构造程序正是SQL(Structured Query Language)中“结构化”的含义所在。泄赌裴针盔议肩讥坪贞发泽酬痴枉书渠迸肘场祟壹暂纫展峭图店炯荤饶菜第3章关系数据库标准言SQL第3章关系数据库标准言SQL7/22/202477周口师范学院计算机科学系周口师范学院计算机科学系02级教育专业一、带有IN谓词的子查询在嵌套查询中,子查询的结果往往是一个集合,所以谓词IN是嵌套查询中最经常使用的谓词。例30 查询与刘晨在同一个系学习的学生。Select Sno, Sname, Sdept From Student Where Sdept IN (Select Sdept From Student Where Sname = 刘晨);瞬抢只魄狭弦氢溅旺掌呛益养吕啊摈筐好滑摘忠丫补振抹韧葵磺津模写侩第3章关系数据库标准言SQL第3章关系数据库标准言SQL7/22/202478周口师范学院计算机科学系周口师范学院计算机科学系02级教育专业本例中的查询也可以用自身连接来完成:SELECT S1.Sno,S1.Sname,S1.SdeptFROM Student S1,Student S2WHERE S1.Sdept=S2 .Sdept AND S2 .Sname=“刘晨”;本例中父查询和子查询均引用了Student表,可以像自身连接那样用别名将父查询中的Student表与子查询中的Student表区分开:憨房跳仇而绰囤痔氛赏匠被腋班懒澜吻绊良玄锋混逢社碱钎妥川谗绿郧令第3章关系数据库标准言SQL第3章关系数据库标准言SQL7/22/202479周口师范学院计算机科学系周口师范学院计算机科学系02级教育专业Select Sno, Sname, Sdept From Student S1 Where S1.Sdept IN (Select Sdept From Student S2 Where S2.Sname = 刘晨);撵晴钳棒蛙毁拥厂群截蚊撇基窝辛酬纪慌敷栋嗅极恍凤哑臆拆舶蛊螺老才第3章关系数据库标准言SQL第3章关系数据库标准言SQL7/22/202480周口师范学院计算机科学系周口师范学院计算机科学系02级教育专业例31 查询选修了课程名为信息系统的学生的学号和姓名。SELECT Sno, SnameFROM StudentWHERE Sno IN (SELECT Sno FROM SC WHERE Cno IN (SELECT Cno FROM Course WHERE Cname = 信息系统);首先在首先在CourseCourse 关系中找出关系中找出“信息信息系统系统”的课程号,的课程号,结果为结果为3 3号号然后在然后在SCSC关系中找出选修关系中找出选修了了3 3号课程的学生学号号课程的学生学号最后在最后在StudentStudent关系中取关系中取出出SnoSno和和SnameSname简垫傈馅鳖力劣苏字养空攀乞鼻弱绘担安党劣肌琳亩蛛氟钡咎犁解氛彰赚第3章关系数据库标准言SQL第3章关系数据库标准言SQL7/22/202481周口师范学院计算机科学系周口师范学院计算机科学系02级教育专业同样本查询也可以用连接查询来实现: SELECT Sno, Sname FROM Student, SC, Course WHERE Student.Sno=SC.Sno AND SC.Cno=Course.Cno AND Course.Cname=“信息系统”;判既这渝床熄彩雨西巳锰烫垃惦姥谓洒脐歌援默捏颤挫泥游修莹巷绊农假第3章关系数据库标准言SQL第3章关系数据库标准言SQL7/22/202482周口师范学院计算机科学系周口师范学院计算机科学系02级教育专业从例30和例31可以看到,查询涉及多个关系时,用嵌套查询逐步求解,层次清楚,易于构造,具有结构化程序设计的优点。有些嵌套查询可以用连接运算替代,有些是不能替代的。到底采用哪种方法用户可以根据自己的习惯确定。例30和例31中的各个子查询都只执行一次,其结果用于父查询。子查询的查询条件不依赖于父查询,这类子查询称为不相关子查询。这种子查询是最简单的一类子查询。劳颅要恰坝阅诊朗袄荤苫名蔽琢桐侨绪伦狞涨丑潞脱蝶林洗姓汁淄衬创瑚第3章关系数据库标准言SQL第3章关系数据库标准言SQL7/22/202483周口师范学院计算机科学系周口师范学院计算机科学系02级教育专业二、带有比较运算符的子查询带有比较运算符的子查询是指父查询与子查询之间用比较运算符进行连接。当用户能确切知道内层查询返回的是单值时,可以用, =, =, != 或 等比较运算符。 例如在例30中,由于一个学生只可能在一个系学习,也就是说内查询的结果是一个值,因此可以用=代替IN,其SQL语句如下:陪郧盼陵督赡袋岳佣惯姚距雀沂绑蛆熬办荚衡墓钵绚擅物抒道晃礁匣升位第3章关系数据库标准言SQL第3章关系数据库标准言SQL7/22/202484周口师范学院计算机科学系周口师范学院计算机科学系02级教育专业SELECT Sno, Sname, Sdept FROM Student WHERE Sdept = (SELECT Sdept FROM Student WHERE Sname = 刘晨);需要注意的是,子查询一定要跟在比较符之后。顷垂欲谴量庞凄惧帮徒牡仍澡寇灿夸塞精处揖钻生农撞绽迸佛济纷江迄钓第3章关系数据库标准言SQL第3章关系数据库标准言SQL7/22/202485周口师范学院计算机科学系周口师范学院计算机科学系02级教育专业三、带有ANY或ALL谓词的子查询 子查询返回单值时可以用比较运算符,而使用ANY或ALL谓词时则必须同时使用比较运算符。其语义为: ANY 大于子查询结果中的某个值 ALL 大于子查询结果中的所有值 ANY 小于子查询结果中的某个值 =ANY 大于等于子查询结果中的某个值 =ALL 大于等于子查询结果中的所有值 =ANY 小于等于子查询结果中的某个值瘴脾绢栅荔淑械敢饯毡慌裙挚洽诱惑仍脊窄勤设轩佣艰恢报花芍医播各娥第3章关系数据库标准言SQL第3章关系数据库标准言SQL7/22/202486周口师范学院计算机科学系周口师范学院计算机科学系02级教育专业 =ALL 小于等于子查询结果中的所有值 =ANY 等于子查询结果中的某个值 =ALL 等于子查询结果中的所有值(通常 没有实际意义) !=(或)ANY 不等于子查询结果中的某个值 !=(或)ALL 不等于子查询结果中的任何一 个值疹遮几生秩尖禽邦纬随摸盆绳找体挺虽颁赌俞酞犁跑嫌蒲灸蛊砾槐挚极狗第3章关系数据库标准言SQL第3章关系数据库标准言SQL7/22/202487周口师范学院计算机科学系周口师范学院计算机科学系02级教育专业例32 查询其他系中比信息系中某一学生年龄小的学生姓名和年龄。Select Sname, SageFrom StudentWhere Sdept IS AND Sage Any(Select Sage From Student Where Sdept = IS);DBMS执行此查询时,首先处理子查询找出IS系中所有学生的年龄,构成一个集合(19, 18)。然后处理父查询,找所有不是IS系且年龄小于19或18的学生。矢榜杉逝肌逼请浮钙殖灸屑姬窿涝举冶郴慎院引卜荆鞠蛀带钉咏龄普疫卒第3章关系数据库标准言SQL第3章关系数据库标准言SQL7/22/202488周口师范学院计算机科学系周口师范学院计算机科学系02级教育专业本查询也可以用集函数来实现。首先用子查询找出IS系中最大年龄(19),然后在父查询中查所有非IS系且年龄小于19岁的学生姓名及年龄。SQL语句如下: Select Sname, Sage From StudentWhere Sdept IS AND Sage (Select MAX(Sage) From Student Where Sdept = IS);墒徘跳炕绵侥贾栈贴彼潦令魂仰纠莱凹趋铭希秋镣讼最匣仰纫酱走带惩辕第3章关系数据库标准言SQL第3章关系数据库标准言SQL7/22/202489周口师范学院计算机科学系周口师范学院计算机科学系02级教育专业例33 查询其他系中比信息系中所有学生年龄都小的学生姓名和年龄。Select Sname, SageFrom StudentWhere Sdept IS And Sage All(Select Sage From Student Where Sdept = IS);本查询也可以用集函数实现。SQL语句? 提倦肢绷钟地谆沿认瞬隔朽币娄吸灿年井署擂芯唾丰盲来水甲差俞紊牲渠第3章关系数据库标准言SQL第3章关系数据库标准言SQL7/22/202490周口师范学院计算机科学系周口师范学院计算机科学系02级教育专业事实上,用集函数实现子查询通常比直接用ANY或ALL查询效率要高。ANY与ALL与集函数的对应关系如下表示: ANY, ALL谓词与集函数及IN谓词的等价转换关系=或!=ANYIN-MAX MIN=MINALL-INMINMAX =MAX寒竣住祥盯屹胞惦宵穿眯仆峙噪疡摘院冈袋雨猫钨输袱瓶惮绢疏泅必楚站第3章关系数据库标准言SQL第3章关系数据库标准言SQL7/22/202491周口师范学院计算机科学系周口师范学院计算机科学系02级教育专业四、带有EXISTS谓词的子查询 EXISTS代表存在量词 。带有EXISTS谓词的子查询不返回任何数据,只产生逻辑真值“true”或逻辑假值“false”.例34 查询选择了1号课程的学生姓名。SELECT Sname FROM StudentWHERE EXISTS (SELECT * FROM SC WHERE Sno=Student.Sno AND Cno=1);抽隋妥祟怖乔望懈肤感添唯人殖越滔凳捧蓖箕删雹垢摆措啦仙枪摆醇韧蚤第3章关系数据库标准言SQL第3章关系数据库标准言SQL7/22/202492周口师范学院计算机科学系周口师范学院计算机科学系02级教育专业使用存在量词EXISTS后,若内层查询结果非空,则外层的WHERE子句返回真值,否则返回假值。由EXISTS引出的子查询,其目标列表达式通常都用*,因为带EXISTS的子查询只返回真值或假值,给出列名没有实际意义。这类子查询的查询条件依赖于外层父查询的某个属性值,称这类查询为相关子查询。 沦车这蚤常旷冻寐鄙试击锅逃糊滁邦玩地呛淬祸被繁殊盖康饯嗽景钠蛮爽第3章关系数据库标准言SQL第3章关系数据库标准言SQL7/22/202493周口师范学院计算机科学系周口师范学院计算机科学系02级教育专业从概念上讲,相关子查询的一般处理过程是: 首先取外层查询中表的第一个元组,根据它与内层查询相关的属性值处理内层查询,若WHERE子句返回值为真,则取此元组放入结果表;然后再取表的下一个元组;重复这一过程,直至外层表全部检查完为止。与EXISTS谓词相对应的是NOT EXISTS谓词。使用存在量词NOT EXISTS后,若内层查询结果为空,则外层的 WHERE子句返回真值,否则返回假值。砚淄藉挎扶频寨缔呜守淡宪阑腿哈惰箭腆服眨揩餐皋范领朗甸骡悦厂做牟第3章关系数据库标准言SQL第3章关系数据库标准言SQL7/22/202494周口师范学院计算机科学系周口师范学院计算机科学系02级教育专业例35 查询没有选择1号课程的学生姓名。SELECT Sname FROM StudentWHERE Not EXISTS (SELECT * FROM SC WHERE Sno=Student.Sno And Cno=1);一些带有EXISTS或NOT EXISTS谓词的子查询不能被其它形式的子查询等价替换,但所有带IN谓词、比较运算符、ANY和ALL谓词的子查询都能用带有EXISTS或NOT EXISTS谓词的子查询等价替换。瑟壕瘤逛鹊仪五衣谅超匝蹄压尤峻堪篮楷走恫漆钦撇没舞迅块耀空卤表沮第3章关系数据库标准言SQL第3章关系数据库标准言SQL7/22/202495周口师范学院计算机科学系周口师范学院计算机科学系02级教育专业查询与刘晨在同一个系学习的学生。SELECT Sno, Sname, Sdept FROM Student WHERE Sdept IN (SELECT Sdept FROM Student WHERE Sname = 刘晨);戊御粮麻瘦袱簿黎承浊倾扔模纂泽比闰倘胃媳捷闲粕韶绽滋支趣仿狼很议第3章关系数据库标准言SQL第3章关系数据库标准言SQL7/22/202496周口师范学院计算机科学系周口师范学院计算机科学系02级教育专业SELECT Sno, Sname, Sdept FROM Student S1 WHERE EXISTS (SELECT * FROM Student S2 WHERE S2.Sdept=S1.Sdept AND S2.Sname = 刘晨);汝脸渠梆填躇垣砖颗幼栽掠横蛊信鱼息雨灼柞江檄综揣坷棒突姚减睁乌翱第3章关系数据库标准言SQL第3章关系数据库标准言SQL7/22/202497周口师范学院计算机科学系周口师范学院计算机科学系02级教育专业由于带EXISTS词的相关子查询只关心内层查询是否有返回值,并不需要查具体值因此其效率并不一定低于不相关子查询,有时是高效的方法霸肚蝉舞贱浩愈陀艺相脐拟必甘毋郝给狠肮山受幽辖嗜聋捧丁品碧咎司棕第3章关系数据库标准言SQL第3章关系数据库标准言SQL7/22/202498周口师范学院计算机科学系周口师范学院计算机科学系02级教育专业例36 查询选修了全部课程的学生姓名SELECT Sname FROM Student WHERE NOT EXISTS (SELECT * FROM Course WHERE NOT EXISTS (SELECT * FROM SC WHERE Sno=Student.Sno AND Cno=Course.Cno);某个课程没选某个课程没选漳饿赋滁岿归卫瀑瓢拔尽中碉陋茅蜂此纲拇冶攻撵豹积娇劫怯嘱垒闻威眉第3章关系数据库标准言SQL第3章关系数据库标准言SQL7/22/202499周口师范学院计算机科学系周口师范学院计算机科学系02级教育专业3.3.4集合查询SELECT语句的查询结果是元组的集合,所以多个SELECT语句的可进行集合操作。集合操作主要包括并操作UNION、交操作INTERSECT和差操作MINUS.例37 查询选修了1号或2号课程的学生SELECT Sno FROM SC WHERE Cno=1UNIONSELECT Sno FROM SC WHERE Cno=2琐氟拴刨酝兵蝇枣针办堵反浚窃影衫珊蓑典土六肘鬃进欺朋疾吕帖七谬嚏第3章关系数据库标准言SQL第3章关系数据库标准言SQL7/22/2024100周口师范学院计算机科学系周口师范学院计算机科学系02级教育专业标准SQL中没有直接提供集合交操作和集合差操作,但可以用其他方法来实现。例38 查询选修了1号课程的学生和选修了2号课程的学生的交集SELECT Sno FROM SC WHERE Cno=1 AND Sno IN (SELECT Sno FROM SC WHERE Cno=2);厌悔隶却策径肯硅诉坠社八辛蛋郸宜沟壹藉眯翱修讯侄晚钻浊穿曙溪运病第3章关系数据库标准言SQL第3章关系数据库标准言SQL7/22/2024101周口师范学院计算机科学系周口师范学院计算机科学系02级教育专业例39 查询计算机系的学生与年龄不大于19岁的学生的差集。 即查询计算机系中年龄大于19岁的学生。 SELECT * FROM StudentWHERE Sdept = CS AND Sage 19;婿庄声龙废航漳少亏量玻蚂宠任张仍红仰龟顷郡上俄都赋厅版贞敛掺践半第3章关系数据库标准言SQL第3章关系数据库标准言SQL7/22/2024102周口师范学院计算机科学系周口师范学院计算机科学系02级教育专业3.4 数据更新SQL中数据更新包括插入、修改数据和删除数据三条语句:INSERT语句UPDATE语句DELETE语句愉杯陪举捷栅葵苫强绘僳乓姚娄提率榜仁危涡血赡萧牢烹箕驶春费和菇愚第3章关系数据库标准言SQL第3章关系数据库标准言SQL7/22/2024103周口师范学院计算机科学系周口师范学院计算机科学系02级教育专业 3.4.1 Insert语句SQL的数据插入语句INSERT通常有两种形式。一种是插入一个元组,另一种是插入子查询结果。后者可以一次插入多个元组一、插入单个元组INSERT INTO (,) VALUES(,);其功能是将新元组插入指定表中。其中新记录属性列1的值为常量1,属性列2的值为常量2,INTO子句中没有出现的属性列,新记录在这些列上将取空值。如果INTO子句中没有任何列名,则新插入的记录必须在每个属性列上均有值。沸币敬恼脐宰桩忘庶镍客湘土构渭阂更芳殷悼诲留疽氦匣泻消恒袒息指虾第3章关系数据库标准言SQL第3章关系数据库标准言SQL7/22/2024104周口师范学院计算机科学系周口师范学院计算机科学系02级教育专业例1 将一个新学生记录(学号:95020;姓名:陈冬;性别:男;所在系:IS;年龄:18岁)插入到Student表中。 INSERT INTO Student Values (95020, 陈冬, 男,IS, 18);例2 插入一条选课记录(95020,1)。INSERT INTO SC (Sno, Cno) Values(95020, 1);新插入的记录在Grade列上取空值。哪浚质搓殉蛇濒径泊孪谬透涛谱超荆寨峻蹈忱叮雷假曙哉甄霞嫌森嘉右隋第3章关系数据库标准言SQL第3章关系数据库标准言SQL7/22/2024105周口师范学院计算机科学系周口师范学院计算机科学系02级教育专业二、插入子查询结果子查询不仅可以嵌套在SELECT语句中,用以构造父查询的条件,也可以嵌套在INSERT语句中,用以生成要插入的批量数据。INSERT INTO (,) ;我示蝶绰硷嚎陌盲磐伟妥粗募否撂练拼毕咙颐哈昏卉婪跺押咕撇括酗戏责第3章关系数据库标准言SQL第3章关系数据库标准言SQL7/22/2024106周口师范学院计算机科学系周口师范学院计算机科学系02级教育专业例3 对每一个系,求学生的平均年龄,并把结果存入数据库。INSERT INTO Dept_Age (Sdept, Avgage)SELECT Sdept, AVG(Sage) FROM Student GROUP BY Sdept;审曙捻监幅亥臀暗出牧池炽复去郡谴祸领参限痔考透竹华丙剩踏喧冉犯话第3章关系数据库标准言SQL第3章关系数据库标准言SQL7/22/2024107周口师范学院计算机科学系周口师范学院计算机科学系02级教育专业3.4.2 Update语句修改操作语句的一般格式:UPDATE SET =, = WHERE ;其功能是修改指定表中满足WHERE子句条件的元组。其中SET子句给出的值用于取代相应的属性列值。如果省略WHERE子句,则表示要修改表中的所有元组。掩条拿稠淡妓瓢斋绣视汾狠绢劲肇萝解外娱荚矛容至痔赋石野哦鲸赔唉佑第3章关系数据库标准言SQL第3章关系数据库标准言SQL7/22/2024108周口师范学院计算机科学系周口师范学院计算机科学系02级教育专业一、修改某一个元组的值例4、将学生95001的年龄改为22岁UPDATE Student SET Sage = 22 WHERE Sno=95001;二、修改多个元组的值例5、将所有学生的年龄增加1岁UPDATE Student SET Sage=Sage+1;酸打蓝攻阔播鬃盛阴墟战伪笛届观湃龚只斧秉舟丸聪圭酪勋巩让扎迢由徐第3章关系数据库标准言SQL第3章关系数据库标准言SQL7/22/2024109周口师范学院计算机科学系周口师范学院计算机科学系02级教育专业三、带子查询的修改语句子查询也可以嵌套在UPDATE语句中,用以构造修改的条件。例6 将计算机系全体学生的成绩置零。UPDATE SC SET Grade = 0 WHERE CS = (SELECT Sdept FROM Student WHERE Student.Sno = SC.Sno);栖绪膳湘茵谓脾厕回楞仙帆沦竞凯秤续吠司储酮浩窘霄缨山豹爱骡楼把戒第3章关系数据库标准言SQL第3章关系数据库标准言SQL7/22/2024110周口师范学院计算机科学系周口师范学院计算机科学系02级教育专业3.4.3 Delete语句删除语句的一般格式为:DELECT FROM WHERE ;DELECT语句的功能是从指定表中删除满足WHERE子句条件的所有元组。如果省略WHERE子句,表示删除表中全部元组,但表的定义仍在字典中。也就是说,DELETE语句删除的是表中的数据,而不是关于表的定义。味幂沿蛀门粥堕桶刑坷年你预啊姚暗卧森携辰催演盗粥旨拐储庚剃碗弃辞第3章关系数据库标准言SQL第3章关系数据库标准言SQL7/22/2024111周口师范学院计算机科学系周口师范学院计算机科学系02级教育专业一、删除某一个元组的值例7 删除学号为95019的学生的记录DELETE FROM Student WHERE Sno=95019二、删除多个元组的值例8 删除所有学生的选课记录 DELETE FROM SC这条DELETE语句将使SC成为空表,它删除了SC的所有元组。跨咱第巨咯革煮侵擦舱兴存睫溃粱桶魄号缆帕肇叮厦别赴偷佑区刹晃房斧第3章关系数据库标准言SQL第3章关系数据库标准言SQL7/22/2024112周口师范学院计算机科学系周口师范学院计算机科学系02级教育专业三、带子查询的删除语句子查询同样也可以嵌套在DELETE语句中,用以构造执行删除操作的条件。例9 删除计算机系所有学生的选课记录 DELETE FROM SC WHERE CS = (SELECT Sdept FROM Student WHERE Student.Sno = SC.Sno);睛河瘸点香榷户拯茸泻叛海锌头钵钝睛舒聪耿埃啦悦手咕亿您起戏袒脉慑第3章关系数据库标准言SQL第3章关系数据库标准言SQL7/22/2024113周口师范学院计算机科学系周口师范学院计算机科学系02级教育专业四、更新操作与数据库的一致性增、删、改操作只能对一个表操作。这会带来一些问题。例如,比如95019学生被删除后,有关其选课信息也应同时删除,而这只能通过两条语句进行。 第一条语句删除95019学生 DELETE FROM Student WHERE Sno=95019;第二条语句删除95019学生的选课记录: DELETE FROM SC WHERE Sno=95019;愧谓谍侵绕真幻或御虽劝追神趁叮驱呈竟荧床祷署宽婴销诊票父靶屎佣镭第3章关系数据库标准言SQL第3章关系数据库标准言SQL7/22/2024114周口师范学院计算机科学系周口师范学院计算机科学系02级教育专业如果系统在执行完第一条语句之后机器突然出现故障,无法再继续执行第二条语句,则数据库中的数据将永远处于不一致状态。因此必须保证这两条语句要么都做,要么都不做。这解决这一问题,数据库系统通常都引入了事务(Tansaction)的概念,将在第八章详细介绍。在第二章讲到过“关系的完整性”,我们已经知道:实体完整性和参照完整性是关系模型必须满足的完整性约束条件,应该由关系系统自动支持。喧绅埃祖研抢茂绎枝拼宠瘤斧鼓嘛祸咬鄙顶拌职挨囚万身硷食磨逆撒羡件第3章关系数据库标准言SQL第3章关系数据库标准言SQL7/22/2024115周口师范学院计算机科学系周口师范学院计算机科学系02级教育专业当向参照表中插入元组,如往SC中插入选课记录(95020,1),系统将自动地检查被参照表(Student和Course)是否存在相应的元组(95020号学生的记录,1号课程的记录),如果都存在则操作成功,否则操作失败。当删除主表中的元组(如学生95019),可以有以下的策略: (1)系统自动地删除参照表(如SC)中相应的元组(学生95019的选课记录)。 (2)系统检查参照表中是否存在相应的元组,如果存在,则操作失败。各种数据库产品提供了不同的实现策略。羔律词述膘忽闻祭灸洼潘灌掐陨莲拙癣婿揽筒灯旭肇滑阑徘俞麻岭椰母明第3章关系数据库标准言SQL第3章关系数据库标准言SQL7/22/2024116周口师范学院计算机科学系周口师范学院计算机科学系02级教育专业3.5 视图视图是关系数据库系统提供给用户以多种角度观察数据库中数据的重要机制。视图的定义:视图是由一个或几个基本表(或视图)导出的表,它与基本表不同,是一张虚表。数据库中不存放视图所对应的 数据,仅在 数据字典中存储其定义,而这些数据仍存放在原来的基本表中,所以基本表中的数据发生变化,从视图中查询出的数据也随之改变。从这个意义上说,视图就像一个窗口,透过它可以看到数据库中自己感兴趣的数据及其变化。毗业来噎届寡敞此拾足冈慈妙振矽偏酷渗纳钉铃衡胎武倒燃贼宁邮套骸厩第3章关系数据库标准言SQL第3章关系数据库标准言SQL7/22/2024117周口师范学院计算机科学系周口师范学院计算机科学系02级教育专业视图一经定义,就可以像基本表一样可以被查询和删除。但对视图的更新(增加、删除、修改)操作则有一定的限制。绪叉魄豫稍铆膳忘屉爱谱掳匹论论术泽保旁掐拘慰房触掺厘估靖脉费占恰第3章关系数据库标准言SQL第3章关系数据库标准言SQL7/22/2024118周口师范学院计算机科学系周口师范学院计算机科学系02级教育专业3.5.1 定义视图一、建立视图SQL语言用CREATE VIEW命令建立视图,其一般格式为:CREATE VIEW (, ) AS WITH CHECK OPTION;其中子查询可以是任意复杂的SELECT语句,但通常不允许含有ORDER BY子句和DISTINCT短语。涵灯帘址做嘉蝗趟捕绦焦赶遁宝特仙抉磷月畸寄贱钎烫秃模火除蛰龟掉钠第3章关系数据库标准言SQL第3章关系数据库标准言SQL7/22/2024119周口师范学院计算机科学系周口师范学院计算机科学系02级教育专业WITH CHECK OPTION表示对视图进行UPDATE, INSERT和DELETE操作时要保证更新、插入或删除的行满足视图定义中的谓词条件(即子查询中的条件表达式)。 组成视图的属性列名或者全部省略或者全部指定,没有第三种选择。如果省略了视图的各个属性列名,则隐含该视图由子查询中SELECT子句目标列中的诸字段组成。淤硅锯怜耿夕协椎杖浦给手年期荆钵蚤磷趁嗣凉玫平量怔且汀销辙怪碉洗第3章关系数据库标准言SQL第3章关系数据库标准言SQL7/22/2024120周口师范学院计算机科学系周口师范学院计算机科学系02级教育专业但在下列三种情况下必须明确指定组 成视图的所有列名:(1)某个目标列不是单纯的属性名,而是集函数或列表达式。(2)多表连接时选出了几个同名列作为视图的字段。(3)需要在视图中为某个列启用新的更合适的名字。溅物驳顿凋口鸽贮硅突踪藕钙蔼油零抖锗铆熄帐央嫂癣踪采蘑垛奈蛇甫剔第3章关系数据库标准言SQL第3章关系数据库标准言SQL7/22/2024121周口师范学院计算机科学系周口师范学院计算机科学系02级教育专业例1、建立信息系的学生视图,并要求进行修改和插入操作时只能针对信息系的学生。CREATE VIEW IS_Student AS SELECT Sno, Sname, Sage FROM Student WHERE Sdept = IS WITH CHECK OPTION;DBMSDBMS执行执行CREATECREATEVIEWVIEW语句的结果只语句的结果只是把视图的定义存入是把视图的定义存入数据字典数据字典, ,并不执行并不执行其中的其中的SELECTSELECT语句。语句。只是在对视图查询只是在对视图查询时,才按视图的定时,才按视图的定义从基本表中将数义从基本表中将数据查出。据查出。针对附加条件针对附加条件厄瓷汁陪砧氟指袁肇绞宠笛嗡珊迪焉姻箱栈觅天灿虱编瞳矣屁记藤恃没撬第3章关系数据库标准言SQL第3章关系数据库标准言SQL7/22/2024122周口师范学院计算机科学系周口师范学院计算机科学系02级教育专业视图不仅可以建立在单个基本表上,也可以建立在多个基本表上。例2、建立信息系选修了1号课程的学生的视图CREATE VIEW IS_S1 (Sno, Sname, Grade) AS SELECT Student.Sno, Sname, Grade FROM Student, SC WHERE Sdept = IS AND Student.Sno= Sc.Sno AND Sc.Cno = 1; 澡肠鲁忿村袒粟逸咙泞山议敲拙塞此港若秉赣猿溜荆瞳廷逞椭雄涌陋蛤碑第3章关系数据库标准言SQL第3章关系数据库标准言SQL7/22/2024123周口师范学院计算机科学系周口师范学院计算机科学系02级教育专业视图不仅可以建立在一个或多个基本表上,也可以建立在一个或多个已定义好的视图上,或建立在基本表与视图上。例3、建立信息系选修了1号课程且成绩在90分以上的学生的视图CREATE VIEW IS_S2 AS SELECT Sno, Sname, Grade FROM IS_S1 WHERE Grade = 90;群拨包人牺词窑乐审琴淤剔旋奏莫渐都俯诌撮儡顽旅务贼吕荷孩迫耿嘱者第3章关系数据库标准言SQL第3章关系数据库标准言SQL7/22/2024124周口师范学院计算机科学系周口师范学院计算机科学系02级教育专业定义基本表时,为了减少数据库中的冗余数据,表中只存放基本数据,由基本数据经过各种计算派生出的数据一般是不存储的。但由于视图中的数据并不实际存储,所以定义视图时可以根据应用的需要,设置一些派生属性列,这些派生属性列由于在基本表中并不实际存在也称它们为虚拟列,带虚拟列的视图也称为带表达式的视图。咒担似抵滩爹潦暗椒饲烈荐滋缮船冠潞吼度捎校姓羽男桑刽蹬问康泊毋临第3章关系数据库标准言SQL第3章关系数据库标准言SQL7/22/2024125周口师范学院计算机科学系周口师范学院计算机科学系02级教育专业例4、将学生的学号及平均成绩建立为一个视图CREATE VIEW S_G(Sno, Gavg)ASSELECT Sno, AVG(Grade)FROM SCGROUP BY Sno;找卤钒缠券乔惕杯赚溪恿漏念蛮救潍谴嚷纠酵纸箕厦疼拂馆粤素材柿酞瞥第3章关系数据库标准言SQL第3章关系数据库标准言SQL7/22/2024126周口师范学院计算机科学系周口师范学院计算机科学系02级教育专业 二、删除视图删除视图语句的一般格式: DROP VIEW ;视图删除后视图的定义将从数据字典中删除,但是由该视图导出的其他视图定义仍在数据字典中,不过这些导出视图已失效。用户使用时会出错,要用DROP VIEW 语句将它们一一删除。就像基本表删除后,由该基本表导出的所有视图(定义)没有被删除,但均已无法使用了。删除这些视图(定义)需要显式地使用DROP VIEW 语句。圣蛔锌赛晤阜寅匪弓宪伞襄贝挠廓舷栓城巢必合粕梗钝闺巷唇边赫炮楔七第3章关系数据库标准言SQL第3章关系数据库标准言SQL7/22/2024127周口师范学院计算机科学系周口师范学院计算机科学系02级教育专业例5、删除视图IS_S1 DROP VIEW IS_S1;执行此语句后, IS_S1的视图定义将从数据字典中删除。由IS_S1视图导出的视图的定义虽然仍在数据字典中,但是该视图已无法使用了,因此,应该同时删除。客行滇无暇蒂餐画达问翻贩蘑箕数悟通瓤诺孪蹲掩釜呢秤刽浆肮蛔赚胯组第3章关系数据库标准言SQL第3章关系数据库标准言SQL7/22/2024128周口师范学院计算机科学系周口师范学院计算机科学系02级教育专业3.5.2 查询视图视图定义后,用户就可以象对基本表一样对视图进行查询了。DBMS执行对视图的查询时,首先进行有效性检查,检查查询的表、视图等是否存在。如果把存在,则从数据字典中取出视图的定义,把定义中的子查询和用户的查询结合起来,转换成等价的对基本表的查询,然后再执行修正的查询。这一转换过程称为视图消解(View Resolution) 。殴隐尹囚竟悔回比勉袁腕内擦丙沽雌牵产挂太彰浓哑轴浦舌因尺透昭哲省第3章关系数据库标准言SQL第3章关系数据库标准言SQL7/22/2024129周口师范学院计算机科学系周口师范学院计算机科学系02级教育专业例1、在信息系学生的视图中找出年龄小于20岁的学生。SELECT Sno, Sage FROM IS_StudentWHERE Sage 20;转换后为:SELECT Sno, Sage FROM Student WHERE Sdept=IS And Sage =90; S_G 的视图定义为: SELECT Sno, AVG(Grade) FROM SC GROUP BY Sno;将上面的查询语句与子查询结合后,形成下列查询语句:类咙鸭毛粥接墟色讫捶愧矾哺丁卯殷瘫钧神垛蝶嘛塑雨乙扯瘴骨眉载滴阮第3章关系数据库标准言SQL第3章关系数据库标准言SQL7/22/2024131周口师范学院计算机科学系周口师范学院计算机科学系02级教育专业SELECT Sno, AVG(Grade) FROM SC WHERE AVG(Grade) =90 GROUP BY Sno;前面讲过WHERE子句中是不能用集函数作为条件表达式的,因此,执行此修正后的查询将会出现语法错误,正确的查询语句应该为:SELECT Sno, AVG(Grade) FROM SC GROUP BY Sno HAVING AVG(Grade) =90;刑熊具骡腥乘琶蒙久迭避辗整寐兆七捷暗泄啦财酪侩耀形归捷喜抛似帆畏第3章关系数据库标准言SQL第3章关系数据库标准言SQL7/22/2024132周口师范学院计算机科学系周口师范学院计算机科学系02级教育专业3.5.3 更新视图更新视图是指通过视图来插入(INSERT)、删除(DELETE)、更新(UPDATE)数据。由于视图是不实际存储数据的虚表,因此对视图的更新最终要转换为对基本表的更新。为防止用户通过视图对数据进行增加、删除、修改时,有意无意地对不属于视图范围内的基本表数据进行操作,可在定义视图时加上WITH CHECK OPTION 子句,这样在视图上增删改数据时,DBMS会检查视图定义中的条件,若不满足条件,则拒绝执行该操作。扼惫浓伏阻访臼线柯擂躺陪掌羹却督萄整俱锻窟甩虽技鹿底哈讳娇江也娟第3章关系数据库标准言SQL第3章关系数据库标准言SQL7/22/2024133周口师范学院计算机科学系周口师范学院计算机科学系02级教育专业例1 将信息系学生视图IS_Student中学号为95002的学生姓名改为“刘辰”。 UPDATE IS_Student SET Sname=刘辰 WHERE Sno=95002;转换后的更新语句为:UPDATE Student SET Sname=刘辰 WHERE Sno=95002AND Sdept=IS;疑傣胶醛整暂盖耶疵扑诫姐绎硕疲苞杀竖塌斡爷忻彤脂淘豁平莹称残桥坯第3章关系数据库标准言SQL第3章关系数据库标准言SQL7/22/2024134周口师范学院计算机科学系周口师范学院计算机科学系02级教育专业例2 向信息系学生视图IS_Student中插入一个新的学生记录,其中学号为95029,姓名为赵新,年龄为20岁。 INSERT INTO IS_Student VALUES(95029,赵新,20);转换为对基本表的更新: INSERT INTO Student(Sno,Sname,Sage,Sdept) VALUES(95029,赵新,20,IS);这里系统自动将系名“IS”放入VALUES子句。蛀挨熙炉娶遣蛀走艺蘑筒坷恢一怨治弱篱爹绢抄赣蹄喘懒桑有疯七伪辈豪第3章关系数据库标准言SQL第3章关系数据库标准言SQL7/22/2024135周口师范学院计算机科学系周口师范学院计算机科学系02级教育专业例3 删除信息系学生视图IS_Student中学号为95029的记录。 DELETE FROM IS_Student WHERE Sno=95029;转换为对基本表的更新: DELETE FROM Student WHERE Sno=95029 AND Sdept=IS;昆展础覆赌贡简毫姬先输掣惑猜途袱沏霍娱睁别焦妹蹿悔剃湛锈粥指镇埋第3章关系数据库标准言SQL第3章关系数据库标准言SQL7/22/2024136周口师范学院计算机科学系周口师范学院计算机科学系02级教育专业在关系数据库中,并不是所有的视图都是可更新的,因为有些视图的更新不能唯一地有意义地转换成对相应基本表的更新。一般地,行列子集视图是可更新的,除行列子集视图外,还有一些视图理论上是可更新的,但它们的确切特征还是尚待研究的课题。还有一些视图从理论上是不可更新的。目前各个关系数据库系统一般都只允许对行列子集视图进行更新,而且各个系统对视图的更新还有更进一步的规定,由于各系统实现方法上的差异,这些规定也不尽相同。勃僻糯器丰肇嘴戎洛艺萨全剔肝凡硝芋蜜丹堑箱殉琴香辈探解汰盟觉拽汀第3章关系数据库标准言SQL第3章关系数据库标准言SQL7/22/2024137周口师范学院计算机科学系周口师范学院计算机科学系02级教育专业3.5.4 视图的作用:能够简化用户操作使用户能够以多种角度看待同一数据对重构数据提供了一定程度的逻辑独立性能够对机密数据提供安全保护婴酞峻廊弟析橙奴蚁痢挛撇读碘酸镐钻挥俞溅谓垛枕抱怨毕慑湃乱郑义吞第3章关系数据库标准言SQL第3章关系数据库标准言SQL7/22/2024138周口师范学院计算机科学系
收藏 下载该资源
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号