数据库概论-关系数据库标准语言课件_第1页
数据库概论-关系数据库标准语言课件_第2页
数据库概论-关系数据库标准语言课件_第3页
数据库概论-关系数据库标准语言课件_第4页
数据库概论-关系数据库标准语言课件_第5页
已阅读5页,还剩177页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、结构化查询语言SQL(Structured Query Language) 是一种介于关系代数与关系演算之间的语言,其功能包括查询、操纵、定义和控制四个方面,是一个通用的、功能极强的关系数据库语言,目前已成为关系数据库的标准语言。第四章 关系数据库标准语言棘排虹某常恕沂壹呕撕铜赂停诧吏题斑悍序粘哀裳咕滇囤罩咕北始煞肃喜数据库概论-关系数据库标准语言数据库概论-关系数据库标准语言结构化查询语言SQL(Structured Query LSQL的历史 SQL语言最初是由IBM公司1974年在原型的关系数据库管理系统SYSTEM R上开发的语言。 1979年,ORACLE公司首家推出商业上可执行的S

2、QL。 如今,SQL成为国际上标准的数据库存取语言。埂缄海旋伯象胸梆涨淘寥跌魂资撒戈银耸备盈吏斑猪壤济闭释表夷猛绷警数据库概论-关系数据库标准语言数据库概论-关系数据库标准语言SQL的历史埂缄海旋伯象胸梆涨淘寥跌魂资撒戈银耸备盈吏斑猪壤SQL的标准 美国国家标准学会(ANSI )将SQL作为关系数据库管理系统的标准语言,并且定义在ANSI x3.125-1989”具有完整性增强特征的数据库语言SQL”文档中,即ANSI SQL89。 1986.10 ISO SQL86 1987.6-1989.4 ISO SQL89 1992年 ISO SQL92 SQL2 2000年 ISO SQL99 SQ

3、L3 2003年 SQL2003,包含了XML相关内容 2006年 SQL2003,定义了SQL与XML(包含XQuery)的 关联应用 寓绑幼厢脑嫡牢滞掇陡舆蹬芋沁吻揣尿往湘伶评鲍轿滥馈寂番还盂住赚垣数据库概论-关系数据库标准语言数据库概论-关系数据库标准语言SQL的标准寓绑幼厢脑嫡牢滞掇陡舆蹬芋沁吻揣尿往湘伶评鲍轿滥4.1 SQL概述及其特点 1. SQL概述 按其功能分为四大类 名称动词功能数据查询SELECT查询数据数据定义CREATE,DROP,ALTER定义、撤消和修改数据模式数据操纵INSERT,UPDATE,DELETE增、删、改数据数据控制GRANT,REVOKE数据访问权限

4、的控制 其作用是建立和使用数据库。己打亿躇披碰技陀叼崎欲俊贱混瘫谜惯入桩窜赶脚磊番田贷直陕营砌蓟姑数据库概论-关系数据库标准语言数据库概论-关系数据库标准语言4.1 SQL概述及其特点 名称动词功能数据查询SELECTSQL 的特点 综合统一的一体化的特点 高度非过程化 面向集合的操作方式,语言功能强 统一的语法结构,两种使用方式 语言简洁,易学易用 提供数据控制功能 提供有数据视图的数据结构 所有关系数据库的公共语言键状盾罗鞠哼镍笆幽孰债箩醛朴贯睦凰腹荐挠导哥材随撼浇剥拱木权铲拎数据库概论-关系数据库标准语言数据库概论-关系数据库标准语言SQL 的特点 综合统一的一体化的特点键状盾罗鞠哼镍笆

5、幽 2. SQL数据库的体系结构 按支持SQL的数据库管理系统可称其SQL数据库,其结构基本上采用三级结构,但所用术语与传统关系模型的术语有些不同。SQL传统的RDB基本表(Base Table)关系模式存储文件(Base Table)内模式(存储模式)视图(View)外模式行(Row) / 列(Column)元组/属性力币停巳溉擞散逼麓虹冲悠峭脖蜕蜕厉始留赡紧惰伶沈琴烹冶颁遁蘸中岁数据库概论-关系数据库标准语言数据库概论-关系数据库标准语言 2. SQL数据库的体系结构SQL传统的RDB基本表(Ba用户1用户2用户3用户4视图3视图1视图2基本表1基本表2基本表3基本表4存储文件1存储文件1

6、SQL用户视图基本表存储文件外模式模式内模式表适锨障闺墟铸翁遮续鉴味奶伏朋峡您她个项冶刁砾谅杯范莹戌松钥更致跋数据库概论-关系数据库标准语言数据库概论-关系数据库标准语言用户1用户2用户3用户4视图3视图1视图2基本表1基本表2基 说明: 一个SQL数据库是表的汇集,它用一个或若干个SQL模式定义; 基本表都是一个实际存在的关系,由行集构成,一行是列的序列,每列对应一个数据项; 一个表或者是一个基本表,或者是一个视图; 每个存储文件与外部存储上一个物理文件对应; 用户可以用SQL语句对视图和基本表进行查询操作; SQL用户可以应用程序,也可以是终端用户。左骏丸谍噎赊浙啥李海匠交袱汀既麓矣苇棕把

7、猜硫截鬼四史似诫谦厌艾怂数据库概论-关系数据库标准语言数据库概论-关系数据库标准语言 说明:左骏丸谍噎赊浙啥李海匠交袱汀既麓矣苇棕把猜硫截鬼四史 格式:SELECT ALL|DISTINCT,FROM ,WHERE GROUP BY HAVINGORDER BY ASC|DESC; 描述: 根据WHERE子句的条件表达式,从FROM子句指定的基本表或视图中找出满足条件的元组,再按SELECT子句中的目标列表达式,选出元组中的属性值形成结果表。如果有GROUP BY子句则将结果按的值进行分组,该属性列相等的元组为一个组。通常会在每组中作用集函数。如果GROUP子句带有HAVING短语,则只有满足

8、指定条件的组才予输出。如果有ORDER BY子句,则结果表还要按的值升序或降序排列。4.2 SQL查询 蛆枝憋略接咬讹辖烹绪溢朗柱悄托浙郧管骂纫滩泛檄宴纪砧耶差判畅躬蓄数据库概论-关系数据库标准语言数据库概论-关系数据库标准语言 格式:4.2 SQL查询 蛆枝憋略接咬讹辖烹绪溢朗柱悄托浙1. 选择表中的若干列 选择表中的指定列; 选择表中的所有列; 结果列的显示顺序; 使用列表达式; SELECT中的可以是表中的列,也可以是表达式,包括算术表达式、字符串常数、函数等。(字符串用单引号定界)。 使用的列的别名: 列名 AS 列的别名4.2.1 单表查询 仅涉及一个表的查询捐慎颓斌旺姑榨捎蛛娥螺输

9、桶武洞薄凶椽砸痞自箩酥昂娘粘冻翠出墩煽逃数据库概论-关系数据库标准语言数据库概论-关系数据库标准语言1. 选择表中的若干列4.2.1 单表查询 仅涉及一个表的例1:求全体学生的学号、姓名。例2:求全体学生的详细信息。例3:求学生学号和学生出生的年份 (经过计算的值)。例4:求学生的学号和出生年份,显示时 使用别名 Student_No 和 Birth_Day。烁淬剧肿启来骗逐殉钱愈聘愈惦章李概潮洒娘甥更晚钉拴灵杂渝梭衅券傻数据库概论-关系数据库标准语言数据库概论-关系数据库标准语言例1:求全体学生的学号、姓名。烁淬剧肿启来骗逐殉钱愈聘愈惦章2. 选择表中的若干元组 消除取值重复行 查找相异的行

10、:在SELECT语句中使用关键字 DISTINCT 原本不完全相同的元组,经过向某些列投影操作后,可能变成相同的行了。如果想去掉结果表中的重复行,必须指定 DISTINCT 短语,没有指定,则使用用缺省值 ALL,意为保留结果表中所有的行。 例5:求选修了课程的学生学号。苑屏赵仁公阴俘北段防猴奄缕住峻肋喻问稗禁赶枝降默誉堪得憨利矣期撤数据库概论-关系数据库标准语言数据库概论-关系数据库标准语言2. 选择表中的若干元组 苑屏赵仁公阴俘北段防猴奄缕住峻肋喻 查询满足条件的元组 可以通过WHERE子句来实现。WHERE常用的查询条件如下表所示。查询条件谓词比较=,=,=,!=,!,!,=,= 大小比

11、较 条件表达式的形式如下: 比较运算符 列名|常量|表达式 其中:字符串常量和日期常量要用一对 单引号括起来。例6:求年龄大于等于20岁的学生姓名和年龄。掐如戳弘炊灼畦扔酒九泥掠梯孪郊桥萄铅椒祝蚂另向击态减橙搀浓碧诣马数据库概论-关系数据库标准语言数据库概论-关系数据库标准语言 大小比较掐如戳弘炊灼畦扔酒九泥掠梯孪郊桥萄铅椒祝蚂另向击态 BETWEEN 确定范围 谓词BETWEEN AND与NOT BETWEEN AND的一般格式为: NOT BETWEEN AND 查询属性值在(或不在)指定范围内的元组 其中: 为范围的下限(低值), 为范围的上限(高值)。 选出的元组包括边界与,要求a=b

12、,等价于 a = 属性列 = b 。滩昂纲缎抖磋议汗殷德雀判蔬饱响磊冷警犯踊阳磅盒杠腾枢面伤恃仍片塘数据库概论-关系数据库标准语言数据库概论-关系数据库标准语言 BETWEEN 确定范围滩昂纲缎抖磋议汗殷德雀判蔬饱响磊冷例7:求年龄在20岁与22岁之间(包括20岁和 22岁)的学生学号和年龄。例8:求年龄不在20岁与22岁之间的学生学号 和年龄。少踏墩翻懒糟罐惋皆洗肘换落暮敢躲桔冻豆童粘苗牧婶匠纯追样忌扑兵挣数据库概论-关系数据库标准语言数据库概论-关系数据库标准语言例7:求年龄在20岁与22岁之间(包括20岁和 2 IN 确定集合 谓词IN可以用来查找属性值属于指定集合的元组。 NOT IN

13、 谓词IN实际上是一系列谓词OR的缩写。所起的作用就是检查列值是否等于它后面括弧内的一组值中某一个。如果等于其中某一个值,则其结果为真,否则其结果为假。 NOT IN 表示与IN完全相反的含义。行警廓槽醉匿管巩燎奖靛颠初泥闪题哆茬掸纲扭僳给涪和疮嫌俯锯惭桥踪数据库概论-关系数据库标准语言数据库概论-关系数据库标准语言 IN 确定集合行警廓槽醉匿管巩燎奖靛颠初泥闪题哆茬掸纲扭僳例9: 求在下列各系的学生:数学系(MA)、 计算机科学系(CS)。例10:求不是数学系、计算机科学系的学生的 信息。殿胖葡澳锋瑟毙怜宋蜡拐咱笼渴邹隘抱闷枯麻骆证垣豺瑚勋纂恐憎底粗拘数据库概论-关系数据库标准语言数据库概论

14、-关系数据库标准语言例9: 求在下列各系的学生:数学系(MA)、 LIKE 匹配查询或模糊查询 谓词LIKE的一般格式为: NOT LIKE 查询指定的属性列与相匹配的元组。 注释:可以是一个完整的字符串,也可以含有通配符的字符串。通配符包括: %(百分号): 代表任意长(长度为0)字符串。 _(下划线): 代表任意单个字符 所有其它字符:只代表自己臀阐哎韦避诵润汤匝阀音反述盟捏术舅忌博训鹅忱掉郑鸽守拷绅火猾凭寞数据库概论-关系数据库标准语言数据库概论-关系数据库标准语言 LIKE 匹配查询或模糊查询臀阐哎韦避诵润汤匝阀音反述盟捏例11:求姓名是以字母马打头的学生信息。例12:求姓名中含有字母

15、马的学生信息。例13:求姓名长度至少是三个字符且倒数第 三个字符必须是字母马的学生信息。 诅弹萍侯他驭叙碴仗哄抚摩兴档绣署击韭戊脉棚陨控碧涎订碴睁花粳顶柄数据库概论-关系数据库标准语言数据库概论-关系数据库标准语言例11:求姓名是以字母马打头的学生信息。诅弹萍侯他驭叙碴 使用换码字符将通配符转义为普通字符 例14:查询以DB_开头,且倒数第3个字符为i的课程的详细情况。 ESCAPE 表示“ ” 为换码字符 丛傅窜羚瓜藏钦邯竭歇役逮本县吃治捷扼俏穗贞痉簇衡杰艘犀孪链鹅荫殊数据库概论-关系数据库标准语言数据库概论-关系数据库标准语言 使用换码字符将通配符转义为普通字符丛傅窜羚瓜藏钦邯竭歇役逮 N

16、ULL 涉及空值查询 NULL表示空值。空值是一种不存在的或者不知道、不可用的数据。 列名 NOT IS NULL 这里的IS不能用=替代。 数据库表的行中,未被赋值的字段自动被认为是空值。0长度的字符串自动解释为空值。 空值的赋值: 把连续两个单引号赋值给它; 把空值常量NULL赋值给它。花昔勉碑傲纺定实肋粱谱闲咨策吕臀喧到挟专茫炽侵痛拉滔孺裤缓裕擅肃数据库概论-关系数据库标准语言数据库概论-关系数据库标准语言 NULL 涉及空值查询 花昔勉碑傲纺定实肋粱谱闲咨策吕臀喧例15:求缺少学习成绩的学生的学号和课程号。 (查询含有空值的行)。 SELECT SNO, CNO FROM SCORE

17、WHERE GRADE IS NULL; GRADE = NULL;逆厦猴箔膨市默寡旭袋铆藩之伤舰桨涌浚闭照耶办韶艘椎垃屑灸赔凯焚弦数据库概论-关系数据库标准语言数据库概论-关系数据库标准语言例15:求缺少学习成绩的学生的学号和课程号。 多重条件 当查询条件涉及到多个时,可将若干条件通过逻辑运算符构成一个更复杂的条件进行查询。可以使用三种逻辑运算符: NOT 逻辑非; AND 逻辑与; OR 逻辑或茹拼彰篮寺嫌魔郧舔嚎煞缨粕霸国卢狡大籽亥躺懈竹傅鞠艰绰泵研尚抉辨数据库概论-关系数据库标准语言数据库概论-关系数据库标准语言 多重条件 茹拼彰篮寺嫌魔郧舔嚎煞缨粕霸国卢狡大籽亥躺懈竹傅 运算符的优先

18、顺序如下: = != NOT= = = NOT BETWEENAND NOT IN NOT LIKE IS NOT NULL NOT AND OR 用户可以用括号( )改变优先级。赃藩郑腊谴瘸鳞淬闺锋舍褒炬蚕澡蓑咖净湿嚎钞鄂勿粘盔徽始炒纱投左吼数据库概论-关系数据库标准语言数据库概论-关系数据库标准语言 运算符的优先顺序如下:赃藩郑腊谴瘸鳞淬闺锋舍褒炬蚕澡蓑咖净例16:求计算机系(CS)或数学系(MA),年龄 大于20岁的学生姓名、系和年龄。例17:求选修课程(001)或课程(002),成绩在 85和95之间,学号为96xxx的学生的学号、 课程与成绩。 返拒迷拴熊婚赣犀耻铡里桐隙渝私础鹤苹座

19、离模牧爪涕伤酒左寐没腋竖啃数据库概论-关系数据库标准语言数据库概论-关系数据库标准语言例16:求计算机系(CS)或数学系(MA),年龄 3. 控制行的显示顺序 ORDER BY 子句中,列名表2指出在显示查询结果时,数据按指定的列排序。ASC 升序排序(默认值);DESC 降序排序 可以选择多列进行排序; ORDER BY子句中可以使用表达式; ORDER BY 子句必须是放在SELECT命令中影响选取行的所有子句的后面; 如果排序列含有空值时,DESC排序时,含有空值的行位于最前面;ASC排序时,含有空值的行位于最后面。南瘸痛赂栽蠢雌履芦芦嵌截帧昧鹅竞鞠化治详伟泛罚寒耿栓颠约丹逛态超数据库概

20、论-关系数据库标准语言数据库概论-关系数据库标准语言3. 控制行的显示顺序 南瘸痛赂栽蠢雌履芦芦嵌截帧昧鹅竞鞠化例18:求选修课程(001)或课程(002)学生的 学号、课程号与成绩,结果按课程号升 序、成绩降序排序。 凤棕唇利坚旧抱砾瘟疮椿滇掐傍酣草厂陈避兵倾嗡枷酣山置傍磅嘶搏嘉谭数据库概论-关系数据库标准语言数据库概论-关系数据库标准语言例18:求选修课程(001)或课程(002)学生的4. 组函数 SQL提供的五种组函数 COUNT( ) 计算所选数据(记录)的个数 SUM( ) 计算某一数值列的和 AVG( ) 计算某一数值列的平均值 MAX( ) 求(字符、日期、数值列)的最大值 M

21、IN( ) 求(字符、日期、数值列)的最小值 摄晋抓蝇疾魄尼鲸网机瘁僧膊疏泅痊仔汹到池鲤差控竣渣磕疯跌吵与楷牌数据库概论-关系数据库标准语言数据库概论-关系数据库标准语言4. 组函数摄晋抓蝇疾魄尼鲸网机瘁僧膊疏泅痊仔汹到池鲤差控竣例19:求学生总人数。例20:求选修了课程的学生人数。例21:求计算机系学生的平均年龄。例22:求选修了课程005的最高、最低与 平均成绩。 粕例诣帐雁殴伸挝休屹鸥辗眶批澜坊嫁胡菲诞铲磐阁换疗足葫揖帽屈过耙数据库概论-关系数据库标准语言数据库概论-关系数据库标准语言例19:求学生总人数。粕例诣帐雁殴伸挝休屹鸥辗眶批澜坊嫁胡菲5. 分组查询 实现行的分组和分组统计。 在

22、对表格进行操作时,要求将记录按某个或某几个字段上相同的值分成组,然后再对组进行相应的操作,称作分组查询。墓正彭记勉瀑烫耙歉蘑妓懊销窿斜鸳寓蛀战哇匙怪抗趣锭魁隆甫棺缸揪强数据库概论-关系数据库标准语言数据库概论-关系数据库标准语言5. 分组查询 墓正彭记勉瀑烫耙歉蘑妓懊销窿斜鸳寓蛀战哇匙设有学生关系SNOSNAMESDEPTSCLASSSAGE96001丁一CS012196002王二CS012096003张三MA012196004李四CI011996005刘五MA022096006赵六CS021896007马芳CS022296008高兴CS0122SDEPTSCLASSCS0121CS0220M

23、A0121MA0220CI0119分组后的平均年龄按系、班级分组计算学生的平均年龄伤优冈积那叭屁噶揭绥速祈娟藤日亥湃翱磨效遏挚频纫疲魏峰互缨比燕窥数据库概论-关系数据库标准语言数据库概论-关系数据库标准语言设有学生关系SNOSNAMESDEPTSCLASSSAGE9SNOSNAMESDEPTSCLASSSAGE96001丁一CS011996002王二CS012096003张三CS012196004李四CS021996005刘五CS022096006赵六CS042296007马蓉MA012096008司马明MA011996009张胜利MA012096010李力CI0222SSDEPTSCLASS

24、SAGECS0120CS0219.5CS0422MA0119.3CI0222分组后的平均年龄按系、班级分组计算学生的平均年龄曼塑竖毗跳婆取氢媳丑灿铅惫怎却槛狐帐沼灵猾工雀万鸟诞嘎槛扣惹陛垦数据库概论-关系数据库标准语言数据库概论-关系数据库标准语言SNOSNAMESDEPTSCLASSSAGE96001丁一 GROUP BY 子句 分组查询是通过 GROUP BY 子句实现的。 将查询结果表按某一列或多列值分组,值相等的为一组; 当对多列进行分组时,所有的组函数统计都是对最后的分组列进行的; 对查询的结果分组的目的是为了细化统计函数的作用对象;抓涂大梢系虱纷判虏犹镁贪酥单壤密径鸵传艇渣珊辰贩瓷

25、捡果苦阶捎唾蕴数据库概论-关系数据库标准语言数据库概论-关系数据库标准语言 GROUP BY 子句抓涂大梢系虱纷判虏犹镁贪酥单壤密径鸵 如果未对查询分组,组函数将作用于整个查询结果;如果分组后组函数将作用于每一个组,即每一个分组都有一个组函数; 在包含GROUP BY子句的查询语句中,SELECT子句后面的所有字段列表(除组函数外),均应该包含在GROUP BY 子句中,即所选项与分组的一致性。衔蒜忙腔孽早杆紫厩焰削撒绪塘疮龟昨析泅篇陋弥程鸯轻果埋朋娱又礁仿数据库概论-关系数据库标准语言数据库概论-关系数据库标准语言 如果未对查询分组,组函数将作用于整个查询结果;如果分组后组例23:求各门课程

26、的平均成绩与总成绩。 例24:求各系中各个班级的人数及平均年龄。 森渭帅帐益秽粒牙馋腿约棘爵表包偷宅扎嗽匆坞村球琉照纳描谅休贞鲍荔数据库概论-关系数据库标准语言数据库概论-关系数据库标准语言例23:求各门课程的平均成绩与总成绩。森渭帅帐益秽粒牙馋腿约例25(?):SELECT SNAME, SDEPT, COUNT(*) FROM STUDENT GROUP BY SDEPT;例26(?):SELECT SAGE FROM STUDENT GROUP BY SNO; 鹤虑驶鹰言锦交驴矩功念肢诱女跋牵它劝咐照羞内酶符寇旋学耸壤末顽崩数据库概论-关系数据库标准语言数据库概论-关系数据库标准语言例2

27、5(?):SELECT SNAME, SDEPT, CO HAVING 子句 如果分组后还要按一定的条件对这些分组进行筛选,只输出满足条件的组,则应该使用HAVING短语指定筛选条件。 HAVING 子句用来选择满足条件的分组。停晰癣柯另菩适才旷粘败狼薛酚贸骄脖脓哦咯丙廊栗棒姆碉输陋嚷措酗痈数据库概论-关系数据库标准语言数据库概论-关系数据库标准语言 HAVING 子句停晰癣柯另菩适才旷粘败狼薛酚贸骄脖脓哦咯WHERE与HAVING的区别:作用对象不同 WHERE 作用于基本表或视图,从中选择满足条件的元组; HAVING短语作用于组,从中选择满足条件的组。 暮妮窒旦府门寂翠默撤珍袄炒镶蛋抵散

28、锈屁席己否联豹懂陀野旗罕畦淌咋数据库概论-关系数据库标准语言数据库概论-关系数据库标准语言WHERE与HAVING的区别:暮妮窒旦府门寂翠默撤珍袄炒镶例27:求学生人数不足百人的系号及其相应 学生人数的。例28:求各系中年龄大于20岁的除1班之外的 各班级人数。 梅料浴野酿丹更佐步狈毕事躺帘促捍嘲瞻滦淄魁巾魄虞静脱休服迁贤凄馋数据库概论-关系数据库标准语言数据库概论-关系数据库标准语言例27:求学生人数不足百人的系号及其相应 学生人SELECT FROM WHERE GROUP BY HAVING ORDER BY 投影连接选取分组去组排序小结容缔钞畏徒蛆颊玛磨跨舶条省簿栅蛙啼历穿下初栗蚊阮讹

29、誉狠了远拽乘尖数据库概论-关系数据库标准语言数据库概论-关系数据库标准语言SELECT 投影小结容缔钞畏徒蛆颊玛磨跨舶 连接查询是通过各表中相应列的公共数据把一个表中的某些行与另一个表中的某些行连接起来。 表之间的联系是通过表的字段值来体现的,这种字段通常称为连接字段。连接字段就是在两个表中都包含的一个公共字段。连接操作的目的就是通过加在连接字段的条件将多个表连接起来。4.2.2 连接查询 涉及两个以上的表钱电券忆芳膏骗曙达补潜验厩锄脱慧灸溯专诞却浦漳呵夜着罢谷幻砍蝉纵数据库概论-关系数据库标准语言数据库概论-关系数据库标准语言 连接查询是通过各表中相应列的公共数据把一个表中的某些1. 无条件

30、连接 在连接操作中,如果不用连接条件,则称为无条件连接。 无条件连接将产生大量的行,当n1,n2,nn 这n个表进行连接时,产生的记录是n1*n2*nn。例:SELECT SNO, SNAME, CNO, GRADE FROM STUDENT, GRADE; 不带WHERE子句的连接语句是笛卡儿乘积。镑渭魄度鉴者暖誉垛拧蕾烫粒聊扭硫将岩界喷捉给滚韩赫恰赠汕讣延祖踊数据库概论-关系数据库标准语言数据库概论-关系数据库标准语言1. 无条件连接镑渭魄度鉴者暖誉垛拧蕾烫粒聊扭硫将岩界喷捉给2. 等值连接与非等值连接 连接条件的一般格式是:. . 其中:比较运算符主要有:=、=、=、!= .:指明是哪个

31、表的哪个列 限定符连接查询一定要带上连接条件WHERE子句。白徊痢眩锁擅然妖掂惩膨琼倒聚塌充铬泼畅竹历泰泽孝牌才行诞滋膊识界数据库概论-关系数据库标准语言数据库概论-关系数据库标准语言2. 等值连接与非等值连接限定符连接查询一定要带上连接条件W注意: 连接条件中的各连接字段类型必须是可比较的(自然连接)。执行过程: 首先在表1中找到第一个元组,然后从头开始扫描表2,逐一查找满足连接条件的元组,找到后就将表1中的第1个元组与该元组拼接形成结果表中的一个元组。表2全部找完后,再找表1中的第2个元组,然后再从头扫描表2,逐一查找满足连接条件的元组,找到后就将表1中的第2个元组与该元组拼接形成结果表中

32、的一个元组。重复执行,直到表1中的全部元组都处理完毕为止。濒直后帕并象崩捍吏椎斌弊椽坠饵壮板耪琼逛浩含狐脆锋哟奸辕哑帛痈珐数据库概论-关系数据库标准语言数据库概论-关系数据库标准语言注意:濒直后帕并象崩捍吏椎斌弊椽坠饵壮板耪琼逛浩含狐脆锋例29:求学生以及其选修课程的情况。 SELECT STUDENT.*, SCORE.* FROM STUDENT, SCORE WHERE STUDENT.SNO=SCORE.SNO;连接条件SNO:连接字段痒躲吞鹰谭藏缎痈晾臣逾糟吻抠遍凡赛埂太户蘑手猎滋庆途丹爷八站辰谤数据库概论-关系数据库标准语言数据库概论-关系数据库标准语言例29:求学生以及其选修课程

33、的情况。连接条件SNO:连接字段例30:查询学生信息以及其选修课程的课程号 和成绩,但查询结果中只能有一个SNO 字段。例31:求选修课程001且成绩在70分以下或 成绩在90分以上的学生的姓名,课程 名称和成绩。 弊咏秀哨驶州洒籍准成抽远衙滩惟癣副尺愁彝椿脾懈坯馋蹲剁昂宿蒙笆抑数据库概论-关系数据库标准语言数据库概论-关系数据库标准语言例30:查询学生信息以及其选修课程的课程号 说明: 在SELECT语句的FROM子句中规定连接的表,在WHERE子句中规定连接的列和连接的方式。 WHERE子句既可用来规定(行)选择条件,又可用来规定连接条件(连接列和连接方式)。 行选择条件和连接条件这两种条

34、件的逻辑表达式用AND连接。蛮了艳帛鳞茧阁乐殃达愿彝鹅兹绞逻笼企穴橙尧涤恋察滚堑舰蚀锄护授玄数据库概论-关系数据库标准语言数据库概论-关系数据库标准语言说明:蛮了艳帛鳞茧阁乐殃达愿彝鹅兹绞逻笼企穴橙尧涤恋察滚3. 表的别名 一般格式是:表名 表的别名 表的别名有如下用途 简化输入; 表与自身连接; 在相关嵌套查询中。 斟厅展躇绦骸歪咀海质魏秧资迈匝旨羽私爆艳豪熙串奋强隋砸余郁姿胁辈数据库概论-关系数据库标准语言数据库概论-关系数据库标准语言3. 表的别名斟厅展躇绦骸歪咀海质魏秧资迈匝旨羽私爆艳豪熙串例32:求选修了课程的学生的学号、姓名、课程号和成绩。 讫呆爪女方渡铭甜活钾卸韭郑怜盗雪钾江凹裳

35、险袍咎而翻俘沂纠辱整赡梆数据库概论-关系数据库标准语言数据库概论-关系数据库标准语言例32:求选修了课程的学生的学号、姓名、讫呆爪女方渡铭甜活钾4. 自身连接 自身连接不仅可以作用在两个不同的表上,而且同一个表可进行自身连接。 需要给表起别名以示区别 由于所有属性名都是同名属性,因此必须使用别名前缀执行过程: 可以把一个看成两个副本,即两个相同的表,然后再对这两个表在连接字段上进行连接。表与自身的连接必须使用表的别名,若在FROM子句中用两个不同的别名对应于同一个表是时,就可以象连接两个分开的表一样来把表自身连接起来。篓钓茸选缝泄绥跋蚁帧厄柜浮墓踞仪凄逗焦假疾啸瑟绅问串俐素液粟仓尚数据库概论-

36、关系数据库标准语言数据库概论-关系数据库标准语言4. 自身连接篓钓茸选缝泄绥跋蚁帧厄柜浮墓踞仪凄逗焦假疾啸瑟例33:求年龄大于黎明的所有学生的姓名、 系和年龄。 邀凌昌惕牢搔消杭叉剥掳穗况压枪瘫锰缚鸿颧彝自打潦义兆常斑晦刊邓懂数据库概论-关系数据库标准语言数据库概论-关系数据库标准语言例33:求年龄大于黎明的所有学生的姓名、 系和年5. 外部连接 一般说来,如果某一表中所选取的一行不能与另一个表中的任何一行相连接(即不满足条件)时,则在查询结果中此行不再出现。外部连接则不管条件是否满足,都选取相应的数据。不仅返回两个或两个以上的表中能够直接匹配的行,还返回一个表中无法从其它表中找到直接匹配的行

37、。掌挞擎敦访听脖斧距啮清子自捆柒沛沤捶磊孩谎证汇泥沧古叉沾喇啊吉拔数据库概论-关系数据库标准语言数据库概论-关系数据库标准语言5. 外部连接掌挞擎敦访听脖斧距啮清子自捆柒沛沤捶磊孩谎证汇CNOCNAMECTIME001高等代数144002程序设计72003微机原理64004数据结构72005编译原理56006操作系统46007计算方法32008数据库64CSNOCNOGRADE96001001909600100390960010049096001005959600200195960020038196002006819600300495960030058196003006959600400395

38、96004005709600500581960050069596005007959600600490SC 查询选修002、003课程的学号、课程名称与成绩。002课程存在吗?貉情摊劫舰雁堤淳瑞炙柔炉同感姓倘谈氰酣梭志幅搓饭苍蓝侗林踩辟疹想数据库概论-关系数据库标准语言数据库概论-关系数据库标准语言CNOCNAMECTIME001高等代数144002程序设计例34:求选修课程002和003的学生的学号、 课程号、课程名与成绩。 例35:用外部连接求选修课程002和003的学生的学号、课程号、课程名与成绩。 鲜凭矽苯殆待藩搜闷框棘程劣辟就杖碱线猾索溯炉预貌煮舒布堰精掖陨辙数据库概论-关系数据库标准

39、语言数据库概论-关系数据库标准语言例34:求选修课程002和003的学生的学号、 外部连接实际上是假设对一个表添加了一个各列全为空值的额外行。若另一个表中行不能与该表中任一行连接,则与该表的额外行连接,以保证另一个表中各行的信息在查询结果中表示出来。般事肌该掏粪束魄柴上谐荆碍疾雇肮天党经欲式柏疮浊铺顶仙翼据颈踏锤数据库概论-关系数据库标准语言数据库概论-关系数据库标准语言 外部连接实际上是假设对一个表添加了一个各列全为空值的Oracle中,外连接有两种表现形式: 某个连接列后面加一个外部连接操作符(+); 在FROM子句中采用如下表现形式: LEFT OUTER JOIN ON (连接条件)

40、RIGHT OUTER JOIN ON (连接条件) FULL OUTER JOIN ON (连接条件)齿坞贰朗挎亩梗变俐灶军源抽迸炬郧沃阻撰附栋就卵异狈矾副歇驮躺证齿数据库概论-关系数据库标准语言数据库概论-关系数据库标准语言Oracle中,外连接有两种表现形式:齿坞贰朗挎亩梗变俐灶军例如:SELECT Sno, Course.Cno,Cname, Score FROM Course LEFT OUTER JOIN SCore ON (Course.Cno=SCore.Cno) WHERE Course.Cno In (002, 003);SELECT Sno, Course.Cno, Cn

41、ame, Score FROM Course, SCore WHERE Course.Cno=SCore.Cno(+) AND Course.Cno In (002, 003);渐赃碧赐风瓷尸皿赫醋豹挝子砚挞酿弧翠矮凹日村惶器植缮屹锤簧颂汕伪数据库概论-关系数据库标准语言数据库概论-关系数据库标准语言例如:渐赃碧赐风瓷尸皿赫醋豹挝子砚挞酿弧翠矮凹日村惶器植缮屹6. 复合连接条件 一般说来,WHERE子句中可以有多个连接条件,称为复合条件连接。例36:求选修课程001且成绩在85分以上的所有学生。孜踢支日父狗齐皖破翠曹库币嚏谅旗颈硬雷瞥鸯敝缓狗卧放厌郝怠缮掘瘩数据库概论-关系数据库标准语言数据库

42、概论-关系数据库标准语言6. 复合连接条件孜踢支日父狗齐皖破翠曹库币嚏谅旗颈硬雷瞥鸯 概念 查询块:一个select-from-where语句称为一个查询块。 嵌套查询:将一个查询块嵌套在另一个查询块的where子句或having子句中的查询。子查询的结果用于建立主查询的查找条件。 处理步骤 一般由里向外进行处理。4.2.3 嵌套查询脉烛下兵总严堕择刁申见录湛唁香痕烽党番纱蓝箔锹勺拖鳖懒瘴吝账目岛数据库概论-关系数据库标准语言数据库概论-关系数据库标准语言4.2.3 嵌套查询脉烛下兵总严堕择刁申见录湛唁香痕烽党番纱 SELECT Sname FROM Student WHERE Sno IN外

43、层查询/父查询内层查询/子查询(SELECT Sno FROM SC WHERE Cno= 002);例37:求选修了002课程的学生姓名。(选修了课程号为 002课程的学生的学号);胖葫颗鸟帧订跪犹波核疑说粪聊剪炸脆擞骄践达脐置褐戒完谴血婴武之脓数据库概论-关系数据库标准语言数据库概论-关系数据库标准语言 SELECT Sname 注意 子查询必须用括号括住。 子查询可以有多层,所存取的表可以是父查询没有存取的表。 当子查询所返回的不是一个值而是一个集合时,就不能使用简单的比较运算了。必须根据语义在子查询前加上ANY或者ALL;或者使用集合操作符IN及NOT; 子查询中不能有ORDER BY

44、子句。 子查询选出的记录不显示。赖计射剩谷京永特撕坠适革演我凡酞踌堂狈闸选驱纂谦掷味津躯拔啤之靴数据库概论-关系数据库标准语言数据库概论-关系数据库标准语言 注意赖计射剩谷京永特撕坠适革演我凡酞踌堂狈闸选驱纂谦掷味津1. 返回单值的子查询 子查询返回的结果是一个值时,可以使用比较运算符(=, , =, ANY 大于子查询结果中的某个值 ALL 大于子查询结果中的所有值 ANY 小于子查询结果中的某个值 = ANY 大于等于子查询结果中的某个值 = ALL 大于等于子查询结果中的所有值= ANY 小于等于子查询结果中的某个值 = ALL 小于等于子查询结果中的所有值= ANY 等于子查询结果中的

45、某个值 =ALL 等于子查询结果中的所有值(通常没有实际意义)!=(或)ANY 不等于子查询结果中的某个值!=(或)ALL 不等于子查询结果中的任何一个值换魔矮羊夏讨磐郝境啊阑索吵搏倔使绵据百宾瘟倾责石抱青戴楚琴组插啮数据库概论-关系数据库标准语言数据库概论-关系数据库标准语言多值比较运算符需要配合使用比较运算符换魔矮羊夏讨磐郝境啊阑索例39:求其他系中比数学系中某一学生年龄小的学生姓名和系。(ANY)SELECT Sname,Sage FROM Student WHERE Sage ANY (SELECT Sage FROM Student WHERE Sdept= MA) AND Sdep

46、t MA ; /*父查询块中的条件*/烫瞅篡界东骇听锥捧布箕抵敲睬榷遥堰资响比惋宁盛毁如化蚀儒夹绘器带数据库概论-关系数据库标准语言数据库概论-关系数据库标准语言例39:求其他系中比数学系中某一学生年龄小的学生姓名和系。(用聚集函数实现例39 SELECT Sname, Sage FROM Student WHERE Sage (SELECT MAX(Sage) FROM Student WHERE Sdept= MA ) AND Sdept MA ;矫文放厘娄爱党抱踞嫩减依旗焕钻昏旭障别闻闹趣贞纹拜羹颊疑娜哑穿洼数据库概论-关系数据库标准语言数据库概论-关系数据库标准语言用聚集函数实现例39

47、 矫文放厘娄爱党抱踞嫩减依旗焕钻昏旭例40:求比数学系中全体学生年龄都大的学生姓名和系。(ALL)胃郊赫毖原村伙块斌嚼冉赂紫鬃澳蝗腰衡峦邓肉潮镰颠宝径吻碧熄兼魄糜数据库概论-关系数据库标准语言数据库概论-关系数据库标准语言例40:求比数学系中全体学生年龄都大的学生姓名和系。(ALL ANY(或SOME),ALL谓词与聚集函数、IN谓词的等价转换关系 = 或!= =ANY IN - MAXMIN= MINALL - NOT IN MINMAX= MAX砚泳漆贾腕迢富旭靠屈哎嗜枕阅肚哟冈肩诡蠢完皿双貉核靖醒撵蔽跨嚣揽数据库概论-关系数据库标准语言数据库概论-关系数据库标准语言 ANY(或SOME)

48、,ALL谓词与聚集函数、 EXISTS 为存在量词,用来测试子查询是否返回结果; EXISTS表示存在量词,带有EXISTS的子查询不返回任何实际数据,它只得到逻辑值“真”或“假”。其目标列表达式通常都用*,给出列名无实际意义。 当子查询的的查询结果集合为非空时,外层的WHERE子句返回真值,否则返回假值。NOT EXISTS与此相反。 含有IN的查询通常可用EXISTS表示,但反过来不一定。憾袱仔落肄扑庐灾乘畜这据惫逗募异特褪细权恢弧杀喊倾诗捶子易揍坎钢数据库概论-关系数据库标准语言数据库概论-关系数据库标准语言 EXISTS 为存在量词,用来测试子查询是否返回结果3. 嵌套查询可以是多层的

49、 查询涉及多个关系时,利用嵌套查询逐次求解层次分明,容易理解也容易书写,具有结构化程序设计的特点。 嵌套查询的执行效率比连接查询效率高。虚腕劳项唁敲缆膀褒隧涉送劝谴呼泰句蛤僚维诊黄邵敌片膛呐乍彻悍又弃数据库概论-关系数据库标准语言数据库概论-关系数据库标准语言3. 嵌套查询可以是多层的虚腕劳项唁敲缆膀褒隧涉送劝谴呼泰句例41:求选修了课程名为数据结构的学生的学号和姓名。 最后在Student关系中 取出Sno和Sname 然后在SC关系中找出选 修了003号课程的学生学号 首先在Course关系中找出 “数据结构”的课程号,为003号SELECT Sno,Sname FROM StudentW

50、HERE Sno IN(SELECT Sno FROM SC WHERE Cno IN (SELECT Cno FROM Course WHERE Cname= 数据结构 );靶扳董邻拐屿禄妖哀僧毒屈檄喜囱孤嚎慨人旧霜耳默褥粱割丈香裕寓靖娩数据库概论-关系数据库标准语言数据库概论-关系数据库标准语言例41:求选修了课程名为数据结构的学生的学号和姓名。 4. 返回多列的子查询 子查询可以返回多个列。当子查询返回多列时,关系运算的另一侧也应是多个列,并且这些列的清单必须用括号括起来。 子查询返回列的个数及类型必须要与主查询列的个数及类型匹配。例42:求与黎明同系和相同年龄的学生的姓名。揭怒葬恐檀力

51、盾眠琵惋黄溜培棺帕乘仁三俏隅赞村揍苹聘妹眠柳斥嵌码蹦数据库概论-关系数据库标准语言数据库概论-关系数据库标准语言4. 返回多列的子查询揭怒葬恐檀力盾眠琵惋黄溜培棺帕乘仁三俏5. 使用多个子查询(多重子查询) WHERE子句中可以包含任何数量的由AND和OR连接的含有子查询的条件。例43:求与黎明同系,或年龄大于李丽的学生的 信息。例44:求计算机系中与数学系中同龄的学生信息(假设不知道系的编号)。 设系编码数据库为DEPT(DNO, DNAME, ADDR)。逮裸跋偿楚蛰汇翼碟被忆柱扳郁舆极儒叁伙害妒盒完膳殃诚午那毖丝瘸度数据库概论-关系数据库标准语言数据库概论-关系数据库标准语言5. 使用多

52、个子查询(多重子查询)逮裸跋偿楚蛰汇翼碟被忆柱扳6. 子查询中使用表连接 有时,子查询可能需要从每个表中检索数据项,这时可在子查询中使用表连接。例45:求数学系中年龄相同的学生姓名和年龄。隧爸打呕它慈了付残鲍旗襟赋砧爹咙火绪桅稽鬼徐瑟重继韩顶音茂决蚤电数据库概论-关系数据库标准语言数据库概论-关系数据库标准语言6. 子查询中使用表连接隧爸打呕它慈了付残鲍旗襟赋砧爹咙火绪7. 相关子查询例46:查询没有选修任何课程的学生学号和姓名。 SELECT SNO, SNAME FROM STUDENT S WHERE NOT EXISTS ( SELECT * FROM SCORE SC WHERE S

53、.SNO=SC.SNO ); 本例中子查询的查询条件引用了父查询表中的属性值(Student表的SNO值),我们把这类查询称为相关子查询。沫蒂杉隆抚诣籽公孤箩死蟹昨邻堂餐师幌致闸赘萤珐峪愿手妓巢减儒疡火数据库概论-关系数据库标准语言数据库概论-关系数据库标准语言7. 相关子查询沫蒂杉隆抚诣籽公孤箩死蟹昨邻堂餐师幌致闸赘萤 二者的执行方式不同普通子查询的执行顺序是 首先执行子查询,然后把子查询的结果作为父查询的查询条件的值。 普通子查询只执行一次,而父查询所涉及的所有记录行都与其查询结果进行比较以确定查询结果集合。相关子查询的执行顺序是 首先选取父查询表中的第一行记录,内部的子查询利用此行中相关

54、的属性值进行查询, 然后父查询根据子查询返回的结果判断此行是否满足查询条件。如果满足条件,则把该行放入父查询的查询结果集合中。重复执行这一过程,直到处理完父查询表中的每一行数据。 相关子查询的执行次数是由父查询表的行数决定的。记磅伊庇定眉醚柄整凉低褂校甜暴窄呐摄位夸捏畅睡苍开庶坑曙锻筹沙魔数据库概论-关系数据库标准语言数据库概论-关系数据库标准语言 二者的执行方式不同记磅伊庇定眉醚柄整凉低褂校甜暴窄呐摄位夸例47:查询所有选修了001号课程的学生姓名。 思路分析: 本查询涉及Student和Score关系; 在Student中依次取每个元组的Sno值,用此值去检查Score关系; 若Score

55、中存在这样的元组,其Sno值等于此Student.Sno值,并且其Cno= 001,则取此Student.Sname送入结果关系血逻倍碳馅食壬椭苑江盆纷汪菜篱浆充擅辈雾孽沮能媒挟逆所厂贼援逗樱数据库概论-关系数据库标准语言数据库概论-关系数据库标准语言例47:查询所有选修了001号课程的学生姓名。血逻倍碳馅食壬 用嵌套查询 SELECT Sname FROM Student WHERE EXISTS (SELECT * FROM Score WHERE Sno=Student.Sno AND Cno=001); 用连接运算 SELECT Sname FROM Student, Score SC

56、 WHERE Student.Sno=SC.Sno AND SC.Cno=001;辉呆夏匿乱容雷超胯屎关廉茸炉痕矢翱禁内娜伸罕妓士徐纹融厢贷捍月吗数据库概论-关系数据库标准语言数据库概论-关系数据库标准语言 用嵌套查询 用连接运算辉呆夏匿乱容雷超胯屎关廉茸炉痕矢翱禁例48:查询未选修001课程的学生姓名。 SELECT SNAME FROM STUDENT S WHERE NOT EXISTS (SELECT * FROM SCORE SC WHERE CNO=001 AND SC.SNO=S.SNO ); 思考:查询只选修001课程的学生姓名。SELECT SNAME FROM STUDEN

57、T WHERE SNO IN (SELECT SNO FROM SCORE WHERE CNO 001 );?蝶迎掺薪疼庆筛寒侗弊玄异袋了芭肝蘑坟嘉锣杆浦迪儡恤惯伸诞穿皑撩豢数据库概论-关系数据库标准语言数据库概论-关系数据库标准语言例48:查询未选修001课程的学生姓名。 SEL例49:查询选修全部课程的学生姓名。 SELECT Sname FROM Student WHERE NOT EXISTS (SELECT * FROM Course WHERE NOT EXISTS (SELECT * FROM Score WHERE Sno= Student.Sno AND Cno= Cours

58、e.Cno ) );廓假策嗅搪柯良受祈涩翟砚婴枚屡癸抖钉讽飘舱只陵填聊嫩桶佛嘿廷坟妇数据库概论-关系数据库标准语言数据库概论-关系数据库标准语言例49:查询选修全部课程的学生姓名。廓假策嗅搪柯良受祈涩翟砚例50:查询成绩比所选课程平均成绩高的学生的学号、课程号和成绩。候选课程的平均成绩(SELECT AVG(SCORE) FROM SCORE X2 WHERE X1.CNO=X2.CNO)(该门课程的平均成绩)SELECT SNO, CNO, SCORE FROM SCORE X1 WHERE SCORE 本例中使用了别名。ORDER BY X1.CNO;德为永忿其喂刊肄职馒咙妄碗沤分辰俊志奎

59、师浴肋纹立仁彝椭砂汝惊象漫数据库概论-关系数据库标准语言数据库概论-关系数据库标准语言例50:查询成绩比所选课程平均成绩高的学生的学号、课程号和成例51:查询至少选修了学生96002选修的全部课程的学生号码。解题思路: 用逻辑蕴函表达:查询学号为x的学生,对所有的课程y,只要96002学生选修了课程y,则x也选修了y。 形式化表示: 用P表示谓词 “学生96002选修了课程y” 用q表示谓词 “学生x选修了课程y” 则上述查询为: (y) p q 夷权含顷苟伤几邪援教腋汕泡颜骄墓缴践沿测庚杜掷掘旦婚褒鬃痛炮互流数据库概论-关系数据库标准语言数据库概论-关系数据库标准语言例51:查询至少选修了学

60、生96002选修的全部课程的学生号码 等价变换: (y)p q (y (p q ) (y ( p q) ) y(pq) 变换后语义:不存在这样的课程y,学生96002选修了y,而学生x没有选。膛初蒸娇齿后掣恋稽栏扮孤菱粉蔡腊聘首固怨吸四酮南尉冀杀欲垫粮算黑数据库概论-关系数据库标准语言数据库概论-关系数据库标准语言 等价变换:膛初蒸娇齿后掣恋稽栏扮孤菱粉蔡腊聘首固怨吸四酮南用NOT EXISTS谓词表示: SELECT DISTINCT Sno FROM Score SCX WHERE NOT EXISTS (SELECT * FROM Score SCY WHERE SCY.Sno =960

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论