DB03数据库教学市公开课金奖市赛课一等奖课件_第1页
DB03数据库教学市公开课金奖市赛课一等奖课件_第2页
DB03数据库教学市公开课金奖市赛课一等奖课件_第3页
DB03数据库教学市公开课金奖市赛课一等奖课件_第4页
DB03数据库教学市公开课金奖市赛课一等奖课件_第5页
已阅读5页,还剩173页未读 继续免费阅读

下载本文档

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

文档简介

1、第3章 关系数据库标准语言SQLSQL概述学生-课程数据库数据定义数据查询数据更新视图第1页3.1 SQL概述 SQL(Structured Query Language) 结构化查询语言,是关系数据库标准语言SQL是一个通用、功效极强关系数据库语言第2页3.1.1 SQL产生与发展SQL标准进展过程 标准 大致页数 公布日期SQL/86 1986.10SQL/89(FIPS 127-1) 120页 1989年SQL/92 622页 1992年SQL99 1700页 1999年SQL 第3页3.1.2 SQL特点1.综合统一集数据定义语言(DDL),数据操纵语言(DML),数据控制语言(DCL

2、)功效于一体。能够独立完成数据库生命周期中全部活动: 定义关系模式,插入数据,建立数据库; 对数据库中数据进行查询和更新; 数据库重构和维护 数据库安全性、完整性控制等用户数据库投入运行后,可依据需要随时逐步修改模式,不影响数据库运行。数据操作符统一第4页2.高度非过程化3.1.2 SQL特点非关系数据模型数据操纵语言“面向过程”,必须制订存取路径SQL只要提出“做什么”,无须了解存取路径。 存取路径选择以及SQL操作过程由系统自动完成。第5页3.面向集合操作方式3.1.2 SQL特点非关系数据模型采取面向统计操作方式,操作对象是一条统计SQL采取集合操作方式 操作对象、查找结果能够是元组集合

3、 一次插入、删除、更新操作对象能够是元组集合第6页4.以同一个语法结构提供各种使用方式3.1.2 SQL特点SQL是独立语言 能够独立地用于联机交互使用方式SQL又是嵌入式语言 SQL能够嵌入到高级语言(比如C,C+,Java)程序中,供程序员设计程序时使用第7页3.1.2 SQL特点5.语言简练,易学易用第8页3.1.3 SQL基本概念SQL支持关系数据库三级模式结构SQL视图2视图1基本表2基本表1基本表3基本表4存放文件2存放文件1外模式模 式内模式第9页基本表本身独立存在表SQL中一个关系就对应一个基本表一个(或多个)基本表对应一个存放文件一个表能够带若干索引存放文件逻辑结构组成了关系

4、数据库内模式物理结构是任意,对用户透明视图从一个或几个基本表导出表数据库中只存放视图定义而不存放视图对应数据视图是一个虚表用户能够在视图上再定义视图3.1.3 SQL基本概念第10页3.2 学生-课程数据库学生-课程模式 S-T : 学生表:Student(Sno,Sname,Ssex,Sage,Sdept)课程表:Course(Cno,Cname,Cpno,Ccredit)学生选课表:SC(Sno,Cno,Grade) 第11页Student表学 号Sno姓 名Sname性 别 Ssex年 龄 Sage所 在 系 Sdept15121151221512315125李勇刘晨王敏张立男女女男20

5、191819CSCSMAIS3.2 学生-课程数据库第12页3.2 学生-课程数据库Course表课程号Cno课程名Cname先行课Cpno学分Ccredit1234567数据库数学信息系统操作系统数据结构数据处理PASCAL语言516764243424第13页3.2 学生-课程数据库SC表学 号Sno 课程号 Cno 成绩 Grade 15121 15121 15121 15122 15122 1 2 3 2 3 92 85 88 90 80第14页3.3 数据定义SQL数据定义功效: 模式定义、表定义、视图和索引定义 第15页3.3.1 模式定义与删除 例1定义一个学生-课程模式S-T C

6、REATE SCHEMA S_T AUTHORIZATION WANG; 为用户WANG定义了一个模式S-T 例2CREATE SCHEMA AUTHORIZATION WANG;隐含为用户名WANG假如没有指定,那么隐含为一、定义模式第16页3.3.1 模式定义与删除定义模式实际上定义了一个命名空间在这个空间中能够定义该模式包含数据库对象,比如基本表、视图、索引等。在CREATE SCHEMA中能够接收CREATE TABLE,CREATE VIEW和GRANT子句。 CREATE SCHEMA AUTHORIZATION |第17页例3 为用户ZHANG创建一个模式TEST,并在其中定义了

7、一个表TAB1。3.3.1 模式定义与删除CREATE SCHEMA TEST AUTHORIZATION ZHANG CREATE TABLE TAB1(COL1 SMALLINT, COL2 INT, COL3 CHAR(20), COL4 NUMERIC(10,3), COL5 DECIMAL(5,2) );第18页3.3.1 模式定义与删除二、删除模式DROP SCHEMA CASCADE(级联)删除模式同时把该模式中全部数据库对象全部删除RESTRICT(限制)假如该模式中定义了下属数据库对象(如表、视图等),则拒绝该删除语句执行。当该模式中没有任何下属对象时才能执行。第19页例4

8、DROP SCHEMA ZHANG CASCADE; 删除模式ZHANG 同时该模式中定义表TAB1也被删除3.3.1 模式定义与删除第20页3.3.2 基本表定义、删除与修改一、定义基本表CREATE TABLE ( , , );假如完整性约束条件包括到该表多个属性列,则必须定义在表级上,不然既能够定义在列级也能够定义在表级第21页3.3.2 基本表定义、删除与修改例5建立“学生”表Student,学号是主码,姓名取值唯一。CREATE TABLE Student (Sno CHAR(9) PRIMARY KEY, /* 列级完整性约束条件*/ Sname CHAR(20) UNIQUE,

9、/* Sname取唯一值*/ Ssex CHAR(2), Sage SMALLINT, Sdept CHAR(20) ); 第22页3.3.2 基本表定义、删除与修改例6 建立一个“课程”表CourseCREATE TABLE Course ( Cno CHAR(4) PRIMARY KEY, Cname CHAR(40), Cpno CHAR(4) , Ccredit SMALLINT, FOREIGN KEY (Cpno) REFERENCES Course(Cno) ); Cpno是外码被参考表是Course被参考列是Cno本例说明参考表和被参考表能够是同一个表第23页3.3.2 基本表

10、定义、删除与修改例7 建立一个“学生选课”表SCCREATE TABLE SC (Sno CHAR(9), Cno CHAR(4), Grade SMALLINT, PRIMARY KEY (Sno,Cno),/* 主码由两个属性组成,必须作为表级完整性进行定义*/ FOREIGN KEY (Sno) REFERENCES Student(Sno), /* 表级完整性约束条件,Sno是外码,被参考表是Student */ FOREIGN KEY (Cno) REFERENCES Course(Cno) /* 表级完整性约束条件, Cno是外码,被参考表是Course*/ ); 第24页3.3.

11、2 基本表定义、删除与修改二、数据类型SQL中域概念用数据类型来实现定义表属性时 需要指明其数据类型及长度 选取哪种数据类型需要考虑: 取值范围 要做哪些运算 第25页3.3.2 基本表定义、删除与修改数据类型含义CHAR(n)长度为n定长字符串VARCHAR(n)最大长度为n变长字符串INT长整数(也能够写作INTEGER)SMALLINT短整数NUMERIC(p,d)定点数,由p位数字(不包含符号、小数点)组成,小数后面有d位数字REAL取决于机器精度浮点数Double Precision取决于机器精度双精度浮点数FLOAT(n)浮点数,精度最少为n位数字DATE日期,包含年、月、日,格式

12、为YYYY-MM-DDTIME时间,包含一日时、分、秒,格式为HH:MM:SS第26页三、模式与表3.3.2 基本表定义、删除与修改每一个基本表都属于某一个模式一个模式包含多个基本表定义基本表所属模式方法一:在表名中显著地给出模式名 Create table “S-T”.Student(.); /*模式名为 S-T*/Create table “S-T”.Cource(.);Create table “S-T”.SC(.); 方法二:在创建模式语句中同时创建表 方法三:设置所属模式第27页创建基本表(其它数据库对象也一样)时,若没有指定模式,系统依据搜索路径来确定该对象所属模式 RDBMS会使

13、用模式列表中第一个存在模式作为数据库对象模式名 若搜索路径中模式名都不存在,系统将给犯错误 显示当前搜索路径: SHOW search_path; 搜索路径当前默认值是:$user, PUBLIC 3.3.2 基本表定义、删除与修改第28页DBA用户能够设置搜索路径,然后定义基本表 SET search_path TO “S-T”,PUBLIC; Create table Student(.); 结果建立了S-T.Student基本表。RDBMS发觉搜索路径中第一个模式名S-T存在,就把该模式作为基本表Student所属模式。3.3.2 基本表定义、删除与修改第29页四、修改基本表3.3.2

14、基本表定义、删除与修改修改基本表是指对已经定义基本表增加新属性名(列),增加新完整性约束条件、修改原有列定义或删除已经有完整性约束条件等。ALTER TABLE ADD 完整性约束 DROP ALTER COLUMN ;第30页例8向Student表增加“入课时间”列,其数据类型为日期型。ALTER TABLE Student ADD S_entrance DATE;不论基本表中原来是否已经有数据,新增加列一律为空值。例9将年纪数据类型由字符型(假设原来数据类型是字符型)改为整数。ALTER TABLE Student ALTER COLUMN Sage INT;例10增加课程名称必须取唯一值

15、约束条件。ALTER TABLE Course ADD UNIQUE(Cname); 3.3.2 基本表定义、删除与修改第31页五、删除基本表 3.3.2 基本表定义、删除与修改DROP TABLE RESTRICT| CASCADE;RESTRICT:删除表是有限制。欲删除基本表不能被其它表约束所引用假如存在依赖该表对象,则此表不能被删除CASCADE:删除该表没有限制。在删除基本表同时,相关依赖对象一起删除 第32页 例11 删除Student表 DROP TABLE Student CASCADE ;基本表定义被删除,数据被删除表上建立索引、视图、触发器等普通也将被删除 3.3.2 基本

16、表定义、删除与修改第33页3.3.2 基本表定义、删除与修改例12选择CASCADE时删除表,视图也自动被删除 DROP TABLE Student CASCADE; -NOTICE: drop cascades to view IS_StudentSELECT * FROM IS_Student;-ERROR: relation IS_Student does not exist 第34页序号 标准及主流数据库处理方式依赖基本表对象SQL99Kingbase ESORACLE 9iMS SQLSERVER RCRCC1.索引无要求2.视图保留保留保留3.DEFAULT,PRIMARY KEY

17、,CHECK(只含该表列)NOT NULL 等约束4.Foreign Key5.TRIGGER6.函数或存放过程保留保留保留保留保留DROP TABLE时,SQL99 与 3个RDBMS处理策略比较R表示RESTRICT , C表示CASCADE 表示不能删除基本表,表示能删除基本表,保留表示删除基本表后,还保留依赖对象 3.3.2 基本表定义、删除与修改第35页3.3.3 索引建立与删除建立索引目标:加紧查询速度谁能够建立索引DBA或表属主(即建立表人)DBMS普通会自动建立以以下上索引 PRIMARY KEY UNIQUE谁维护索引DBMS自动完成使用索引DBMS自动选择是否使用索引以及使

18、用哪些索引第36页RDBMS中索引普通采取B+树、HASH索引来实现B+树索引含有动态平衡优点 HASH索引含有查找速度快特点采取B+树,还是HASH索引 则由详细RDBMS来决定索引是关系数据库内部实现技术,属于内模式范围 CREATE INDEX语句定义索引时,能够定义索引是唯一索引、非唯一索引或聚簇索引 3.3.3 索引建立与删除第37页一、建立索引 3.3.3 索引建立与删除语句格式:CREATE UNIQUE CLUSTER INDEX ON (, );UNIQUE表明此索引每一个索引值只对应唯一数据统计。CLUSTER表示要建立索引是聚簇索引。所谓聚簇索引是指索引项次序与表中统计物

19、理次序一致索引组织第38页3.3.3 索引建立与删除CREATE CLUSTER INDEX Stusname ON Student(Sname);在最经常查询列上建立聚簇索引以提升查询效率 一个基本表上最多只能建立一个聚簇索引 经常更新列不宜建立聚簇索引例13 在Student表Sname(姓名)列上建立一个聚簇索引第39页 例14为学生-课程数据库中Student,Course,SC三个表建立索引。CREATE UNIQUE INDEX Stusno ON Student(Sno);CREATE UNIQUE INDEX Coucno ON Course(Cno);CREATE UNIQU

20、E INDEX SCno ON SC(Sno ASC,Cno DESC); Student表按学号升序建唯一索引Course表按课程号升序建唯一索引SC表按学号升序和课程号降序建唯一索引3.3.3 索引建立与删除第40页3.3.3 索引建立与删除二、删除索引 DROP INDEX ;删除索引时,系统会从数据字典中删去相关该索引描述。例15 删除Student表Stusname索引DROP INDEX Stusname;第41页3.4 数据查询语句格式: SELECT ALL|DISTINCT , FROM , WHERE GROUP BY HAVING ORDER BY ASC|DESC ;第

21、42页3.4.1 单表查询一、 选择表中若干列查询指定列例1 查询全体学生学号与姓名。SELECT Sno,SnameFROM Student;例2 查询全体学生姓名、学号、所在系。SELECT Sname,Sno,SdeptFROM Student;第43页选出全部属性列:在SELECT关键字后面列出全部列名 将指定为 *例3 查询全体学生详细统计。SELECT Sno,Sname,Ssex,Sage,Sdept FROM Student; 或SELECT * FROM Student; 3.4.1 单表查询第44页3.4.1 单表查询SELECT子句可认为:算术表达式字符串常量函数列别名

22、查询经过计算值 第45页3.4.1 单表查询例4 查全体学生姓名及其出生年份。SELECT Sname,-Sage /*假定当年年份为*/ FROM Student;输出结果: Sname -Sage 李勇 1984 刘晨 1985 王敏 1986 张立 1985 第46页3.4.1 单表查询例5 查询全体学生姓名、出生年份和所在系,要求用小写字母表示全部系名SELECT Sname, Year of Birth:,-Sage, ISLOWER(Sdept) FROM Student;输出结果: Sname Year of Birth: -Sage ISLOWER(Sdept) 李勇 Year

23、 of Birth: 1984 cs 刘晨 Year of Birth: 1985 is 王敏 Year of Birth: 1986 ma 张立 Year of Birth: 1985 is 第47页3.4.1 单表查询使用列别名改变查询结果列标题:SELECT Sname NAME,Year of Birth: BIRTH, -Sage BIRTHDAY,LOWER(Sdept) DEPARTMENT FROM Student;输出结果: NAME BIRTH BIRTHDAY DEPARTMENT - - - - 李勇 Year of Birth: 1984 cs 刘晨 Year of

24、Birth: 1985 is 王敏 Year of Birth: 1986 ma 张立 Year of Birth: 1985 is第48页二、 选择表中若干元组3.4.1 单表查询1. 消除取值重复行 假如没有指定DISTINCT关键词,则缺省为ALL 例6 查询选修了课程学生学号。SELECT Sno FROM SC;等价于:SELECT ALL Sno FROM SC;执行上面SELECT语句后,结果为: Sno1512115121151211512215122第49页指定DISTINCT关键词,去掉表中重复行 SELECT DISTINCT Sno FROM SC; 执行结果: Sno

254.1 单表查询第50页2.查询满足条件元组3.4.1 单表查询查 询 条 件谓 词比 较=,=,=,!=,!,!;NOT+上述比较运算符确定范围BETWEEN AND,NOT BETWEEN AND确定集合IN,NOT IN字符匹配LIKE,NOT LIKE空 值IS NULL,IS NOT NULL多重条件(逻辑运算)AND,OR,NOT表3.4 惯用查询条件第51页(1) 比较大小例7 查询计算机科学系全体学生名单。SELECT Sname FROM Student WHERE Sdept=CS; 例8 查询全部年纪在20岁以下学生姓名及其年纪。SELECT Sn

26、ame,Sage FROM Student WHERE Sage 20;例9 查询考试成绩有不及格学生学号。SELECT DISTINCT SnoFROM SCWHERE Grade60;3.4.1 单表查询第52页3.4.1 单表查询(2)确定范围谓词: BETWEEN AND NOT BETWEEN AND 例10 查询年纪在2023岁(包含20岁和23岁)之间学生 姓名、系别和年纪SELECT Sname,Sdept,SageFROM StudentWHERE Sage BETWEEN 20 AND 23; 例11 查询年纪不在2023岁之间学生姓名、系别和年纪SELECT Sname,

27、Sdept,SageFROM StudentWHERE Sage NOT BETWEEN 20 AND 23; 第53页3.4.1 单表查询(3) 确定集合谓词:IN , NOT IN 例12 查询信息系(IS)、数学系(MA)和计算机科学系(CS)学生姓名和性别。SELECT Sname,SsexFROM StudentWHERE Sdept IN ( IS,MA,CS );例13 查询既不是信息系、数学系,也不是计算机科学系学生姓名和性别。SELECT Sname,Ssex FROM Student WHERE Sdept NOT IN ( IS,MA,CS );第54页3.4.1 单表查

28、询(4)字符匹配谓词: NOT LIKE ESCAPE 1)匹配串为固定字符串 例14 查询学号为15121学生详细情况。 SELECT * FROM Student WHERE Sno LIKE 15121;等价于: SELECT * FROM Student WHERE Sno = 15121;第55页 2) 匹配串为含通配符字符串例15 查询全部姓刘学生姓名、学号和性别。SELECT Sname,Sno,Ssex FROM Student WHERE Sname LIKE 刘% ;例16 查询姓欧阳且全名为三个汉字学生姓名。SELECT Sname FROM Student WHERE

29、Sname LIKE 欧阳_ _;3.4.1 单表查询第56页3.4.1 单表查询例17 查询名字中第2个字为阳字学生姓名和学号。SELECT Sname,Sno FROM Student WHERE Sname LIKE _ _阳% ;例18 查询全部不姓刘学生姓名。SELECT Sname,Sno,Ssex FROM Student WHERE Sname NOT LIKE 刘%;第57页3) 使用换码字符将通配符转义为普通字符 例19 查询DB_Design课程课程号和学分。SELECT Cno,Ccredit FROM Course WHERE Cname LIKE DB_Design

30、 ESCAPE ; 例20 查询以DB_开头,且倒数第3个字符为 i课程详细情况。SELECT * FROM Course WHERE Cname LIKE DB_%i_ _ ESCAPE ; ESCAPE 表示“ ” 为换码字符 3.4.1 单表查询第58页(5) 包括空值查询3.4.1 单表查询谓词: IS NULL 或 IS NOT NULL “IS” 不能用 “=” 代替 例21 一些学生选修课程后没有参加考试,所以有选课统计,但没有考试成绩。查询缺乏成绩学生学号和对应课程号。SELECT Sno,Cno FROM SC WHERE Grade IS NULL 例22 查全部有成绩学生

31、学号和课程号。SELECT Sno,Cno FROM SC WHERE Grade IS NOT NULL;第59页(6) 多重条件查询3.4.1 单表查询逻辑运算符:AND和 OR来联结多个查询条件 AND优先级高于OR 能够用括号改变优先级可用来实现各种其它谓词 NOT IN NOT BETWEEN AND 第60页3.4.1 单表查询例23 查询计算机系年纪在20岁以下学生姓名SELECT Sname FROM Student WHERE Sdept= CS AND Sage20;第61页3.4.1 单表查询改写例12例12 查询信息系(IS)、数学系(MA)和计算机科学系(CS)学生姓

32、名和性别。SELECT Sname,Ssex FROM Student WHERE Sdept IN ( IS,MA,CS )可改写为:SELECT Sname,Ssex FROM Student WHERE Sdept= IS OR Sdept= MA OR Sdept=CS;第62页3.4.1 单表查询三、ORDER BY子句 ORDER BY子句能够按一个或多个属性列排序升序:ASC;降序:DESC;缺省值为升序当排序列含空值时ASC:排序列为空值元组最终显示DESC:排序列为空值元组最先显示 第63页例24 查询选修了3号课程学生学号及其成绩,查询结果按分数降序排列。SELECT Sn

33、o,Grade FROM SC WHERE Cno= 3 ORDER BY Grade DESC;例25 查询全体学生情况,查询结果按所在系系号升序排列,同一系中学生按年纪降序排列。SELECT * FROM Student ORDER BY Sdept,Sage DESC; 3.4.1 单表查询第64页3.4.1 单表查询四、聚集函数 聚集函数:计数COUNT(DISTINCT|ALL *)COUNT(DISTINCT|ALL )计算总和SUM(DISTINCT|ALL ) 计算平均值AVG(DISTINCT|ALL )最大最小值 MAX(DISTINCT|ALL ) MIN(DISTINC

34、T|ALL )第65页3.4.1 单表查询例26 查询学生总人数。SELECT COUNT(*) FROM Student;例27 查询选修了课程学生人数。SELECT COUNT(DISTINCT Sno) FROM SC;例28 计算1号课程学生平均成绩。SELECT AVG(Grade) FROM SC WHERE Cno= 1;第66页3.4.1 单表查询例29 查询选修1号课程学生最高分数。SELECT MAX(Grade) FROM SC WHER Cno=1;例30 查询学生15012选修课程总学分数。SELECT SUM(Ccredit) FROM SC,Course WHER

35、 Sno=15012 AND SC.Cno=Course.Cno; 第67页3.4.1 单表查询五、GROUP BY子句 GROUP BY子句分组:细化聚集函数作用对象未对查询结果分组,聚集函数将作用于整个查询结果对查询结果分组后,聚集函数将分别作用于每个组 作用对象是查询中间结果表按指定一列或多列值分组,值相等为一组第68页3.4.1 单表查询例31 求各个课程号及对应选课人数。SELECT Cno,COUNT(Sno) FROM SC GROUP BY Cno; 查询结果: Cno COUNT(Sno) 1 22 2 34 3 44 4 33 5 48第69页例32 查询选修了3门以上课程

36、学生学号。SELECT Sno FROM SC GROUP BY Sno HAVING COUNT(*) 3; 3.4.1 单表查询第70页HAVING短语与WHERE子句区分:作用对象不一样WHERE子句作用于基表或视图,从中选择满足条件元组HAVING短语作用于组,从中选择满足条件组。 3.4.1 单表查询第71页3.4.2 连接查询 连接查询:同时包括多个表查询连接条件或连接谓词:用来连接两个表条件普通格式:. . BETWEEN . AND .连接字段:连接谓词中列名称连接条件中各连接字段类型必须是可比,但名字无须是相同第72页3.4.2 连接查询 嵌套循环法(NESTED-LOOP)

37、首先在表1中找到第一个元组,然后从头开始扫描表2,逐一查找满足连接件元组,找到后就将表1中第一个元组与该元组拼接起来,形成结果表中一个元组。表2全部查找完后,再找表1中第二个元组,然后再从头开始扫描表2,逐一查找满足连接条件元组,找到后就将表1中第二个元组与该元组拼接起来,形成结果表中一个元组。重复上述操作,直到表1中全部元组都处理完成 连接操作执行过程第73页3.4.2 连接查询 一、等值与非等值连接查询 等值连接:连接运算符为: =例33 查询每个学生及其选修课程情况SELECT Student.*,SC.* FROM Student,SC WHERE Student.Sno = SC.S

38、no;第74页3.4.2 连接查询 Student.SnoSnameSsexSageSdeptSC.SnoCnoGrade15121李勇男20CS1512119215121李勇男20CS1512128515121李勇男20CS1512138815122刘晨女19CS1512229015122刘晨女19CS15122380查询结果:第75页自然连接:例34 对例33用自然连接完成。SELECT Student.Sno,Sname,Ssex,Sage,Sdept,Cno,Grade FROM Student,SC WHERE Student.Sno = SC.Sno;3.4.2 连接查询 第76页

39、二、本身连接 3.4.2 连接查询 本身连接:一个表与其自己进行连接需要给表起别名以示区分因为全部属性名都是同名属性,所以必须使用别名前缀例35查询每一门课间接先修课(即先修课先修课)SELECT FIRST.Cno,SECOND.Cpno FROM Course FIRST,Course SECOND WHERE FIRST.Cpno = SECOND.Cno;第77页3.4.2 连接查询 FIRST表(Course表) Cno CnameCpnoCcredit 1数据库 5 4 2数学 2 3信息系统 1 4 4操作系统 6 3 5数据结构 7 4 6数据处理 2 7PASCAL语言 6

40、4第78页 SECOND表(Course表) Cno CnameCpnoCcredit 1数据库 5 4 2数学 2 3信息系统 1 4 4操作系统 6 3 5数据结构 7 4 6数据处理 2 7PASCAL语言 6 43.4.2 连接查询 第79页查询结果:CnoPcno1735563.4.2 连接查询 第80页三、外连接3.4.2 连接查询 外连接与普通连接区分普通连接操作只输出满足连接条件元组外连接操作以指定表为连接主体,将主体表中不满足连接条件元组一并输出例36 改写例33SELECT Student.Sno,Sname,Ssex,Sage,Sdept,Cno,Grade FROM S

41、tudent LEFT OUT JOIN SC ON (Student.Sno=SC.Sno);第81页执行结果: Student.SnoSnameSsexSageSdeptCnoGrade15121李勇男20CS19215121李勇男20CS28515121李勇男20CS38815122刘晨女19CS29015122刘晨女19CS38015123王敏女18MANULLNULL15125张立男19ISNULLNULL3.4.2 连接查询 第82页左外连接列出左边关系(如本例Student)中全部元组 右外连接列出右边关系中全部元组 3.4.2 连接查询 第83页四、复合条件连接3.4.2 连接

42、查询 复合条件连接:WHERE子句中含多个连接条件例37查询选修2号课程且成绩在90分以上全部学生SELECT Student.Sno, Sname FROM Student, SC WHERE Student.Sno = SC.Sno AND /* 连接谓词*/ SC.Cno= 2 AND SC.Grade 90; /* 其它限定条件 */第84页例38查询每个学生学号、姓名、选修课程名及成绩SELECT Student.Sno,Sname,Cname,Grade FROM Student,SC,Course /*多表连接*/ WHERE Student.Sno = SC.Sno and S

43、C.Cno = Course.Cno;3.4.2 连接查询 第85页3.4.3 嵌套查询嵌套查询概述一个SELECT-FROM-WHERE语句称为一个查询块将一个查询块嵌套在另一个查询块WHERE子句或HAVING短语条件中查询称为嵌套查询 第86页3.4.3 嵌套查询 SELECT Sname /*外层查询/父查询*/ FROM Student WHERE Sno IN (SELECT Sno /*内层查询/子查询*/ FROM SC WHERE Cno= 2 );第87页3.4.3 嵌套查询子查询限制不能使用ORDER BY子句层层嵌套方式反应了 SQL语言结构化有些嵌套查询能够用连接运算

44、替换第88页3.4.3 嵌套查询嵌套查询求解方法不相关子查询: 子查询查询条件不依赖于父查询由里向外 逐层处理。即每个子查询在上一级查询处理之前求解,子查询结果用于建立其父查询查找条件。第89页3.4.3 嵌套查询相关子查询:子查询查询条件依赖于父查询首先取外层查询中表第一个元组,依据它与内层查询相关属性值处理内层查询,若WHERE子句返回值为真,则取此元组放入结果表然后再取外层表下一个元组重复这一过程,直至外层表全部检验完为止第90页3.4.3 嵌套查询一、带有IN谓词子查询例39 查询与“刘晨”在同一个系学习学生。 此查询要求能够分步来完成 确定“刘晨”所在系名 SELECT Sdept

45、FROM Student WHERE Sname= 刘晨 ; 结果为: CS第91页3.4.3 嵌套查询 查找全部在CS系学习学生。 SELECT Sno,Sname,Sdept FROM Student WHERE Sdept= CS; 结果为:SnoSnameSdept15121李勇CS15122刘晨CS第92页3.4.3 嵌套查询将第一步查询嵌入到第二步查询条件中SELECT Sno,Sname,Sdept FROM Student WHERE Sdept IN (SELECT Sdept FROM Student WHERE Sname=刘晨); 此查询为不相关子查询。第93页 用本身

46、连接完成例39查询要求 SELECT S1.Sno,S1.Sname,S1.Sdept FROM Student S1,Student S2 WHERE S1.Sdept = S2.Sdept AND S2.Sname = 刘晨;3.4.3 嵌套查询第94页3.4.3 嵌套查询例40查询选修了课程名为“信息系统”学生学号和姓名SELECT Sno,Sname 最终在Student关系中 FROM Student 取出Sno和Sname WHERE Sno IN (SELECT Sno 然后在SC关系中找出选 FROM SC 修了3号课程学生学号 WHERE Cno IN (SELECT Cno

47、 首先在Course关系中找出 FROM Course “信息系统”课程号,为3号 WHERE Cname= 信息系统 ) );第95页用连接查询实现例40 SELECT Student.Sno,Sname FROM Student,SC,Course WHERE Student.Sno = SC.Sno AND SC.Cno = Course.Cno AND Course.Cname= 信息系统 ;3.4.3 嵌套查询第96页二、带有比较运算符子查询3.4.3 嵌套查询当能确切知道内层查询返回单值时,可用比较运算符(,=,=,!=或)。与ANY或ALL谓词配合使用第97页例:假设一个学生只可

48、能在一个系学习,而且必须属于一个系,则在例39能够用 = 代替IN :SELECT Sno,Sname,Sdept FROM Student WHERE Sdept = (SELECT Sdept FROM Student WHERE Sname= 刘晨);3.4.3 嵌套查询第98页子查询一定要跟在比较符之后 错误例子: SELECT Sno,Sname,Sdept FROM Student WHERE ( SELECT Sdept FROM Student WHERE Sname= 刘晨 ) = Sdept;3.4.3 嵌套查询第99页3.4.3 嵌套查询例41找出每个学生超出他选修课程平

49、均成绩课程号。SELECT Sno, Cno FROM SC x WHERE Grade =(SELECT AVG(Grade) FROM SC y WHERE y.Sno=x.Sno);相关子查询 第100页3.4.3 嵌套查询可能执行过程: 1. 从外层查询中取出SC一个元组x,将元组xSno值(15121)传送给内层查询。 SELECT AVG(Grade) FROM SC y WHERE y.Sno=15121;2. 执行内层查询,得到值88(近似值),用该值代替内层查询,得到外层查询: SELECT Sno, Cno FROM SC x WHERE Grade =88; 第101页3

50、.4.3 嵌套查询3. 执行这个查询,得到 (15121,1) (15121,3) 4.外层查询取出下一个元组重复做上述1至3步骤,直到外层SC元组全部处理完成。结果为: (15121,1) (15121,3) (15122,2)第102页3.4.3 嵌套查询三、带有ANY(SOME)或ALL谓词子查询 谓词语义ANY:任意一个值ALL:全部值第103页 ANY大于子查询结果中某个值 ALL大于子查询结果中全部值 ANY小于子查询结果中某个值 = ANY大于等于子查询结果中某个值 = ALL大于等于子查询结果中全部值= ANY小于等于子查询结果中某个值 = ALL小于等于子查询结果中全部值=

51、ANY等于子查询结果中某个值 =ALL等于子查询结果中全部值(通常没有实际意义)!=(或)ANY不等于子查询结果中某个值!=(或)ALL不等于子查询结果中任何一个值3.4.3 嵌套查询需要配合使用比较运算符第104页3.4.3 嵌套查询例42 查询其它系中比计算机科学某一学生年纪小学生姓名和年纪 SELECT Sname,Sage FROM Student WHERE Sage ANY (SELECT Sage FROM Student WHERE Sdept= CS) AND Sdept CS ; /*父查询块中条件 */第105页结果:执行过程: 1.RDBMS执行此查询时,首先处理子查询

52、,找出 CS系中全部学生年纪,组成一个集合(20,19) 2. 处理父查询,找全部不是CS系且年纪小于20 或 19学生3.4.3 嵌套查询SnameSage王敏18张立19第106页 SELECT Sname,Sage FROM Student WHERE Sage (SELECT MAX(Sage) FROM Student WHERE Sdept= CS) AND Sdept CS;用聚集函数实现例423.4.3 嵌套查询第107页3.4.3 嵌套查询例43 查询其它系中比计算机科学系全部学生年纪都小学生姓名及年纪。方法一:用ALL谓词 SELECT Sname,Sage FROM St

53、udent WHERE Sage ALL (SELECT Sage FROM Student WHERE Sdept= CS) AND Sdept CS;第108页3.4.3 嵌套查询 方法二:用聚集函数 SELECT Sname,Sage FROM Student WHERE Sage (SELECT MIN(Sage) FROM Student WHERE Sdept= CS) AND Sdept CS;第109页3.4.3 嵌套查询表3.5 ANY(或SOME),ALL谓词与聚集函数、IN谓词等价转换关系 = 或!= =ANY IN - MAXMIN= MINALL - NOT IN M

54、INMAX= MAX第110页3.4.3 嵌套查询四、 带有EXISTS谓词子查询1. EXISTS谓词存在量词 带有EXISTS谓词子查询不返回任何数据,只产生逻辑真值“true”或逻辑假值“false”。若内层查询结果非空,则外层WHERE子句返回真值若内层查询结果为空,则外层WHERE子句返回假值由EXISTS引出子查询,其目标列表示式通常都用* ,因为带EXISTS子查询只返回真值或假值,给出列名无实际意义2. NOT EXISTS谓词若内层查询结果非空,则外层WHERE子句返回假值若内层查询结果为空,则外层WHERE子句返回真值第111页例44查询全部选修了1号课程学生姓名。 思绪分

55、析:本查询包括Student和SC关系在Student中依次取每个元组Sno值,用此值去检验SC关系若SC中存在这么元组,其Sno值等于此Student.Sno值,而且其Cno= 1,则取此Student.Sname送入结果关系3.4.3 嵌套查询第112页用嵌套查询 SELECT Sname FROM Student WHERE EXISTS (SELECT * FROM SC WHERE Sno=Student.Sno AND Cno= 1 ); 3.4.3 嵌套查询第113页用连接运算SELECT SnameFROM Student, SCWHERE Student.Sno=SC.Sno

56、 AND SC.Cno= 1;3.4.3 嵌套查询第114页例45 查询没有选修1号课程学生姓名。SELECT Sname FROM Student WHERE NOT EXISTS (SELECT * FROM SC WHERE Sno = Student.Sno AND Cno=1);3.4.3 嵌套查询第115页不一样形式查询间替换一些带EXISTS或NOT EXISTS谓词子查询不能被其它形式子查询等价替换全部带IN谓词、比较运算符、ANY和ALL谓词子查询都能用带EXISTS谓词子查询等价替换 3.4.3 嵌套查询第116页例:例39查询与“刘晨”在同一个系学习学生。 能够用带EXI

57、STS谓词子查询替换: SELECT Sno,Sname,Sdept FROM Student S1 WHERE EXISTS (SELECT * FROM Student S2 WHERE S2.Sdept = S1.Sdept AND S2.Sname = 刘晨);3.4.3 嵌套查询第117页3.4.3 嵌套查询例46 查询选修了全部课程学生姓名。 SELECT Sname FROM Student WHERE NOT EXISTS (SELECT * FROM Course WHERE NOT EXISTS ( SELECT * FROM SC WHERE Sno= Student.S

58、no AND Cno= Course.Cno ) );第118页3.4.4 集合查询集合操作种类并操作UNION交操作INTERSECT差操作EXCEPT参加集合操作各查询结果列数必须相同;对应项数据类型也必须相同 第119页例48 查询计算机科学系学生及年纪小于19岁学生。方法一:SELECT * FROM Student WHERE Sdept= CS UNION SELECT * FROM Student WHERE Sage=19;UNION:将多个查询结果合并起来时,系统自动去掉重复元组。UNION ALL:将多个查询结果合并起来时,保留重复元组 3.4.4 集合查询第120页3.4

59、.4 集合查询方法二:SELECT DISTINCT * FROM Student WHERE Sdept= CS OR Sage=19;第121页例49 查询选修了课程1或者选修了课程2学生。SELECT Sno FROM SC WHERE Cno= 1 UNION SELECT Sno FROM SC WHERE Cno= 2 ;3.4.4 集合查询第122页例50 查询计算机科学系学生与年纪小于19岁学生交集SELECT * FROM Student WHERE Sdept=CS INTERSECT SELECT * FROM Student WHERE Sage=19 3.4.4 集合

60、查询第123页3.4.4 集合查询例50 实际上就是查询计算机科学系中年纪小于19岁学生SELECT * FROM Student WHERE Sdept= CS AND Sage=19;第124页例51 查询选修课程1学生集合与选修课程2学生集合交集SELECT Sno FROM SC WHERE Cno= 1 INTERSECT SELECT Sno FROM SC WHERE Cno=2 ;3.4.4 集合查询第125页例51实际上是查询既选修了课程1又选修了课程2学生SELECT Sno FROM SC WHERE Cno= 1 AND Sno IN (SELECT Sno FROM

温馨提示

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

评论

0/150

提交评论