![数据库选修课-关系数据库_第1页](http://file4.renrendoc.com/view/f8bea4d349542a742f3150e3f4f4756d/f8bea4d349542a742f3150e3f4f4756d1.gif)
![数据库选修课-关系数据库_第2页](http://file4.renrendoc.com/view/f8bea4d349542a742f3150e3f4f4756d/f8bea4d349542a742f3150e3f4f4756d2.gif)
![数据库选修课-关系数据库_第3页](http://file4.renrendoc.com/view/f8bea4d349542a742f3150e3f4f4756d/f8bea4d349542a742f3150e3f4f4756d3.gif)
![数据库选修课-关系数据库_第4页](http://file4.renrendoc.com/view/f8bea4d349542a742f3150e3f4f4756d/f8bea4d349542a742f3150e3f4f4756d4.gif)
![数据库选修课-关系数据库_第5页](http://file4.renrendoc.com/view/f8bea4d349542a742f3150e3f4f4756d/f8bea4d349542a742f3150e3f4f4756d5.gif)
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Page1计教中心数据库原理及应用§2关系数据库姚普选Page2内容关系模型
关系及关系模式
关系模型的数据操作
数据完整性约束
关系代数
关系运算
关系代数的运算种类
三种关系运算SQL语言§2.1关系模型关系模型由三部份组成
数据结构、数据操作、完整性约束1.关系模型的数据结构:数据的逻辑结构_二维表学生选修课程mn概念模型关系模式表示为
关系名(属性名1,属性名2,…,属性名n)例:学生(学号,姓名,性别,年龄,班级,学院)注意:关系模式是型(type),描述一个关系的结构关系是值,是元组的集合描述某一时刻关系模式的内容故关系模式是相对稳定的,静态的;而关系是随时间变化的,动态的关系可用来表示实体(如学生,课程等)也可用来表示实体间的联系(如选课)关系的性质每列都是不可再分的基本字段(原子属性)一列中各个分量具有相同的性质和意义;
列名是唯一的(不同不二名)
行的次序可任意交换,不会改变关系的意义
列的次序可任意交换,不会改变关系的意义元组代表了一个实体因此表中不允许出现相同的行故,判别两个关系是否相等,与属性次序、元组次序、关系名均无关若仅这三点有别,其余完全相同,可认为两个关系相等2.关系模型的数据操作
数据操作——包括对表、行、列的操作主要操作包括查询、添加(或插入)、删除、修改例如:查找来自于江苏的02级学生的信息
关系模型的数据操作的特点:关系模型的操作对象是集合操作对象和操作结果都是关系(表)用户只要指明干什么,而不必考虑怎么干细节由DBMS处理SQL语言实现关系数据库操作
RDBMS支持SQL语言3.关系模型的数据完整性约束完整性约束:规定了特定数据模型中数据必须满足的条件无论对数据进行什么操作,其结果都必须满足完整性约束的条件完整性约束的目的:
•使对数据的操作能够正确进行
•使数据有意义例如:
学号既不能为空也不能重复年龄不大于60岁学生所属班级名称不能写成根本不存在的班级考试成绩是0-100之间的整数四类完整性约束实体完整性,引用完整性,值域完整性,用户定义的完整性实体完整性(EI,EntityIntegrity)
强制保证表的主码的完整性
通过主码实现:主码的任一属性都不能取空值“空”(null)指无值(或不知道)0不是null。null≠”null”∵主码是区分各个实体和联系的惟一标识为空则意味着可存在不以主码为标识的实体,与主码定义矛盾引用(参照)完整性(RI,ReferentialIntegrity)插入、修改或删除数据时,维护各表间数据一致性主要通过主码与外码实现若二表通过主码与外码建立了联系,则:外码所在表(子表)不能引用主码所在表(主表)中不存在的数据主表中数据变化时,子表中相关数据相应变化。反之也一样有时外码可取空值。如“学生”关系的“宿舍号”例:“学生”、“专业”二实体表示为关系
学生(学号,姓名,性别,专业号,出生日期)
专业(专业号,专业名)引用完整性值域完整性(DI,DomainIntegrity)限制属性值的范围。例如:
性别只能是”男”或”女”,年龄不大于30等
Access中的“有效性规则”:“男”or“女”
<=30
SQL语句的Where子句中写:性别=“男”or“女”年龄<=30属性值可为空,例如,学生管理信息系统中,新生报到后要记录其住宿房号,若该生不在学校住宿,则宿舍号可为空用户定义的完整性实现应用系统的业务规则,由用户自行定义如:项目书的名称必须以“XM”开头折扣额不能大于销售额,等等DBMS提供了用户自定义完整性的手段:约束(constraint)标识列(identitycolumn)默认值(default)规则(rule)触发器(trigger)数据类型验证(datatype)索引(index)存储过程(storedprocedure)Page13§2.2关系代数1.关系代数简介关系模型:提供一组完备的关系运算,支持关系数据库检索和修改(插入、更新、删除)操作关系运算方法分为两类:关系代数:关系数据操纵的传统表达方式,
以集合代数运算方法对关系进行数据操作以若干个关系为运算对象,运算结果产生新关系关系演算:以谓词表达式描述关系操作的条件和要求
Page14关系代数运算的种类:二元二元按列辅助专门的关系运算按行按行运算说明不等于≠小于等于≤大于等于≥等于=小于<或∨与∧除连接投影广义笛卡尔积×交∩差-大于>比较运算符∪传统的集合运算符并非逻辑运算符选择专门的关系运算符含义运算符
Page152.关系运算并运算:R∪S
元组属于R或S差运算:R-S
元组属于R交运算:R∩S
元组既属R
又属于S⑴集合运算(按元组)设关系R、S度(属性个数)为n,相应属性值取自同一个域
Page16⑵三种关系运算:选择、投影、连接例7-4:“学生”关系
Access数据库中的“学生”表
Page17选择运算:
按条件从一个或多个关系中
抽取若干个元组组成新关系,
新关系是原关系的子集。
例如,条件:性别=“女”
Page18投影运算:从一个或多个关系中
选择一些属性组成新关系,
新关系是原关系子集例:学生关系在学号、姓名、
性别、班级四个属性上投影
Page19连接运算:连接运算:将两个关系中满足条件的元组连接起来组成新关系等连接:取两关系笛卡尔积中A、B属性值相等的元组R.C=S.TRSPage20
§2.3SQL语言介绍SQL(StructuredQueryLanguage,结构化查询语言)
ISO命名为国际标准数据库语言提供了数据定义、数据查询、数据操纵和数据控制语句,是一种综合性的数据库语言,可独立完成数据库生命周期中的全部活动用户可直接键入SQL命令来操纵数据库,也可将其嵌入高级语言(C、Pascal、Java等)程序中使用各种RDBMS一般都支持SQL或提供SQL接口。其影响已超出数据库领域,扩展到了其他领域Page211.SQL对关系数据库的支持SQL视图1视图2基表1基表2基表3基表4存储文件1存储文件2外模式模式内模式从DBMS的角度看,数据库系统有一个严谨的体系结构,从而保证其功能得以实现SQL语言支持三级模式结构
Page22说明:由基表构成关系数据库的“模式”基表是实际的表,一个基对应一个关系;一个或多个表对应一个存储文件;存储文件的逻辑结构组成关系数据库内模式;视图是从一个或多个表中导出的表,为虚表,数据库只存放其定义而数据仍在原表中视图和基表都是关系用户使用SQL语言对基表和视图进行查询、更新等各种操作
SQL语言功能概要四类功能:数据定义:CREATE、DROP、ALTER创建表、索引、查询数据操纵:INSERT、UPDATE、DELETE
插入、更新、删除数据查询:SELECT
查询数据控制:GRANT、REVOTE
授予、收回权限阅读:SQL语言的发展SQL:StructuredQueryLanguage1974年IBM公司Boyce和Chamberlin提出1975-1979年IBM在SystemR关系数据库系统原型中实现1986年10月成为ANSI标准:SQL-861987年6月接纳为ISO标准1989年4月ISO较为完整的SQL-89标准1992年8月ISO推出更完善的SQL-92标准1999年ISO推出新的SQL-99标准阅读:SQL语言的特点一体化集数据定义语言DDL、数据操纵语言DML和数据控制语言DCL于一体,综合管理功能于一身高度非过程化用户只需提出“做什么”,而不需指明“怎么做”面向集合的操作方式操作的数据不是一条记录,而是记录的集合同样语法提供两种使用方式用户可直接键盘交互方式使用SQL命令,也可将SQL语句嵌入其他高级语言(VB、Delphi、VC、Java等)语言简洁,容易掌握命令(语句)只有9条,语法接近于自然语言2.SQL语言的数据类型不同数据库产品所支持的数据类型稍有差别(以SQLServer2000为例)两大类:•
系统数据类型系统内含的•用户自定义数据类型
在系统数据类型的基础上建立使用系统存储过程sp_addtype定义SQLServer2000的系统数据类型如下:1)数值型
数据类型说明精确整数型Bigint8字节,-263~263-1Int4字节,-231~231-1Smallint2字节,-215~215-1Tinyint1字节,0~255精确数值型Decimal(p,q)或Numeric(p,q)-10^38+1~1038-1p为总位数,q为小数位数位型Bit存储二进制0或1近似浮点型Float-1.79E+308~1.79E+308Real-3.4E+38~3.4E+382)字符型
数据类型说明定长字符串Char(n)n=1~8000变长字符串Varchar(n)n=1~8000文本Text最多231-1个字符定长UnicodeNchar(n)n=1~4000变长UnicodeNvarchar(n)n=1~4000Unicode文本Ntext最多230-1个字符定长二进制字符Binary(n)n=1~8000变长二进制字符Varbinary(n)n=1~8000任意二进制数据Image最多231-1个字节,约2GB3)日期时间型数据类型说明Datetime8字节,1753年1月1日~9999年12月31日精度百分之三秒Smalldatetime4字节,1900年1月1日~2079年6月6日,精度1分钟日期:英文数字Oct252005数字加分隔符2005-10-25或2005/12/25纯数字20051025时间:24小时制15:28:5612小时制3:28:56PM4)货币型数据类型说明Money8字节,-263~263-1,精确度为4位小数,最多19位数字Smallmoney4字节,-214748.3648~214748.3647,精确度为4位小数SQL语言的数据定义语句操作对象创建删除修改
表
CREATETABLE
DROPTABLE
ALTERTABLE
视图
CREATEVIEWDROPVIEW
索引
CREATEINDEXDROPINDEX
触发器
CREATETRIGGER存储过程CREATEPROCEDURE§2.3SQL语言数据定义功能1.表的定义与删除1)建立表结构_基本语法:列名——表中列的名字类型——该列数据类型约束——该列完整性约束条件:NOTNULL列值不能为空(不能用于表级约束)DEFAULT<常量>指定列的默认值(不能用于表级约束)UNIQUE列值不能重复CHECK<表达式>限定列的取值范围PRIMARYKEY指定本列为主码FOREIGNKEY本列为引用其他表的外码,用法如下
FOREIGNKEY[列名]REFERENCES外表名(外表列名)
CREATETABLE表名
(列名类型约束,…),[表级约束]例:创建student表CREATETABLEstudent(Snochar(7)PRIMARYKEY,Snamechar(10)NOTNULL,Ssexchar(2)CHECK(Ssex='男'ORSsex='女'),SagetinyintCHECK(Sage>=15ANDSage<=45),Sdeptchar(20)DEFAULT'计算机系')默认为‘计算机系’字符串,长度为20所在系Sdept15~45整数年龄Sage‘男’或‘女’字符串,长度为2性别Ssex非空字符串,长度为10姓名Sname主码字符串,长度为7学号Sno约束数据类型说明列名例:创建course表CREATETABLEcourse(Cnochar(10)NOTNULL,Cnamechar(20)NOTNULL,CcredittinyintCHECK(Ccredit>0),SemestertinyintCHECK(Semester>0),PeriodintCHECK(Period>0),PRIMARYKEY(Cno))取值大于0整数学时Period取值大于0整数学期Cemester取值大于0整数学分Ccredit非空字符串,长度为20课程名Cname主码字符串,长度为10课程号Cno约束数据类型说明列名例:创建SC表CREATETABLESC(Snochar(7)NOTNULL,Cnochar(10)NOTNULL,GradetinyintCHECK(Grade>=0ANDGrade<=100),PRIMARYKEY(Sno,Cno),FOREIGNKEY(Sno)REFERENCESstudent(Sno),FOREIGNKEY(Cno)REFERENCEScourse(Cno))取值0~100整数成绩Grade主码,引用course的外码字符串,长度为10课程号Cno主码,引用student的外码字符串,长度为7学号Sno约束数据类型说明列名说明:删除表时会将表结构和表中的数据一起删除例:删除test表
DROPTABLEtest2)删除表(DROPTABLE)基本语法:DROPTABLE表名3)修改表结构基本语法:例1:为SC表添加“选课类别”列:XKLBchar(4)
ALTERTABLESCADDXKLBchar(4)例2:将新添加的XKLB列的类型改为char(6)
ALTERTABLESCALTERCOLUMNXKLBchar(6)ALTERTABLE表名
[ALTERCOLUMN列名
新类型]修改列定义|[ADD[COLUMN]列名类型约束]增加新列|[DROPCOLUMN列名]删除列|[ADDPRIMARYKEY(列名列表)]增加主码约束|[ADDFOREIGNKEY(列名)REFERENCES
外表名
(列名)]增加外码约束更新:插入、删除、修改表中插入一行数据:
insertintostudent(…)VALUES(…)修改(更新)表中数据:
UPDATEstudentSETSage=Sage+1删除数据:
DELETESCWHEREGrade<60清空整个表:
TRUNCATETABLESC§2.4SQL语言数据定义功能1.插入数据基本语法:列名表——表中的列名的列表,列名之间用逗号分隔未指定列名表时,值列表中值的顺序须与表中定义列的顺序一致,且每列都要有值(或为空)值列表——相应列的值,值之间用逗号分隔值列表中的值要与列名表中的列按位置顺序对应,且应满足约束条件INSERT[INTO]表名
[(列名表)]VALUES(值列表)例:学生记录(9512101,李勇,男,19,计算机系)插入student表insertintostudent(Sno,Sname,Ssex,Sage,Sdept)VALUES('9512101','李勇','男',19,'计算机系')2.更新数据基本语法:例1:所有学生年龄加1
UPDATEstudentSETSage=Sage+1
例2:‘9512101’学生年龄加1UPDATEstudentSETSage=Sage+1WHERESno='9512101'SET子句——指定要改的列及改后的值,可一次修改多列WHERE子句——指定要修改表中哪些记录,如果省略,则所有记录的指定列都被修改UPDATE表名
SET列名=表达式
[,…][WHERE条件
]3.删除数据基本语法:例1:删除所有学生的选课记录
DELETEFROMSC
例2:删除所有不及格学生的选课记录
DELETESCWHEREGrade<60WHERE子句——指定要删除表中哪些记录,如果省略,则所有记录都被删除,仅保留表的结构DELETE[FROM]表名
[WHERE条件
]4.清空整个表基本语法:TRUNCATETABLE表名说明:表中所有记录都被删除,仅保留表的结构。要删除所有数据,TRUNCATE比DELETE速度快例:删除所有学生的选课记录
TRUNCATETABLESC查询表中记录:SELECT语句,可完成单表查询、多表联合查询、视图查询查询结果可0行、1行或多行,是一个记录集§2.5SQL语言数据查询功能基本语法:SELECT[ALL/DISTINCT]
目标列名列表FROM表名列表WHERE条件GROUPBY列名列表HAVING组的筛选条件ORDERBY列名列表SELECT语句的说明参数描述ALL满足条件的所有记录都将被返回,包括重复的记录(默认,可以省略)DISTINCT返回记录中不出现重复的记录。这个子句在每个SELECT子句中只使用一次FROM指定数据从哪几个表中获取WHERE从表中选取记录的条件GROUPBY返回的记录将按照某一个或几个列的值分组HAVING结果集中每个组必须满足的条件。该子句只和GROUPBY子句联合使用ORDERBY查询结果按某列或几列的值升序(ASC)或降序(DESC)排列2.5.1简单查询简单查询:单表查询SELECT子句中指定要查询的列:例1:查询全体学生的学号与姓名
SELECTSno,Sname
FROMstudent例2:查询全体学生的姓名、学号与所在系
SELECTSname,Sno,Sdept
FROMstudent1.查询指定的列查询全部列法1:目标列名列表中列出所有的列例:查询全体学生的记录
SELECTSno,Sname,Ssex,Sage,SdeptFROMstudent法2:星号‘*’代替目标列名列表同上例:
SELECT*FROMstudent查询经过计算的列目标列名列表中可包含表达式、常量或函数例1:查询全体学生的出生年份
SELECTSname,2006-SageFROMstudent
例2:列出每个学生的学号、所选课程号、课程综合成绩:综合成绩=(成绩×0.8)+20
SELECTSno,Cno,Grade*0.8+20FROMSC例3:查询全体学生出生年份,Sname列标题显示为“姓名”,出生年份列标题显示为“出生年份”
SELECTSname
AS'姓名',2006-Sage'出生年份'FROMstudent
避免查询结果中的重复行使用DISTINCT子句可避免重复行例:查询student表中的学生都属于哪些系不使用DISTINCT:
SELECTSdeptFROMstudent使用DISTINCT:
SELECTDISTINCTSdeptFROMstudent查询结果按列的值排序使用ORDERBY子句,可将查询结果按某列或某几列的值升序(ASC)或降序(DESC)排列例:查询学生学号、姓名、年龄,按年龄升序排列
SELECTSno学号,Sname姓名,Sage年龄
FROMstudent
ORDERBYSageASC注:默认情况下为升序,故ASC可以省略
降序排序时DESC不能省略2.选择表中若干元组(行)查询条件表达式谓词比较=、>、>=、<、<=、<>(或!=)、NOT<比较运算符>确定范围BETWEEN…AND、NOTBETWEEN…AND确定集合IN、NOTIN相似字符串匹配LIKE、NOTLIKE空值ISNULL、ISNOTNULL多重条件AND、OR查询过程中,可以使用筛选条件,使得查询结果中只包含满足条件的元组(记录行)查询满足条件的元组是通过WHERE子句实现的。WHERE子句中常用的查询条件如下:带条件的查询-比较大小例1:查询计算机系全体学生的姓名
SELECTSnameFROMstudent
WHERESdept='计算机系'
例2:查询所有不小于20岁的学生的姓名及年龄
SELECTSname,SageFROMstudent
WHERESage>=20
带条件的查询-确定范围条件:列名|表达式[NOT]BETWEEN下限AND上限例:查询年龄20~25岁间的学生的姓名及年龄
SELECTSname,SageFROMstudent
WHERESageBETWEEN20AND25等价于:
SELECTSname,SageFROMstudent
WHERESage>=20ANDSage>=25带条件的查询-确定集合用于查找列值属于指定集合的元组条件格式:
列名[NOT]IN(常量1,常量2,…,常量n)例:查询信息系和计算机系学生的姓名和性别
SELECTSname,SsexFROMstudentWHERESdeptIN('信息系','计算机系')带条件的查询-相似字符串匹配用于查询指定列中与匹配模板相似的元组条件:
列名[NOT]LIKE匹配字符串模板模板中可包含如下四种通配符:_
代表任意单个字%
代表任意长度的字符串(包括0个)[]
匹配[]中的任意一个字符
如[xyz]表示匹配x、y、z中的任意一个[^]
不匹配[]中任意一个字符相似字符串匹配(Cont.)例1:查询姓“李”的学生的信息
SELECT*FROMstudentWHERESnameLIKE'李%'例2:查询姓“王”、姓“贾”的学生的信息
SELECT*FROMstudentWHERESnameLIKE'[王贾]%'例3:查询学号第2、3位为52的学生的信息
SELECT*FROMstudentWHERESnoLIKE'_52%'带条件的查询-空值空值(NULL):不确定的值比较一个值是否为空,不能用普通比较运算符
必须使用“IS[NOT]NULL”来判断例:查询无考试成绩的学生的学号和相应课程号
SELECTSno,CnoFROMSCWHEREGradeISNULL
带条件的查询-多重条件多条件查询:使用逻辑运算符AND、OR构成条件表达式例:查询计算机系年龄在20岁以下的
学生的学号、姓名和性别
SELECTSno,Sname,SsexFROMstudentWHERESdept='计算机系'ANDSage<20
3.使用计算函数汇总数据计算函数:也称为聚合函数或聚集函数
可对一组值进行计算并返回计算值COUNT(*)统计表中元组个数COUNT(列名)统计本列列值个数SUM(列名)计算列值总和(列须数值型AVG(列名)计算列值平均值(列须数值型MAX(列名)求列值中最大值MIN(列名)求列值中最小值注:除COUNT(*)外,其他函数忽略NULL值使用计算函数汇总数据例1:统计学生表中学生的人数
SELECTCOUNT(*)FROMstudent例2:统计选修了课程的学生的人数
SELECTCOUNT(DISTINCTSno)FROMSC例3:计算C01课程的学生平均成绩
SELECTAVG(Grade)FROMSCWHERECno='C01'例4:查询选修C01课程的学生的最高分和最低分
SELECTMIN(Grade),MAX(Grade)FROMSCWHERECno='C01'4.对查询结果进行分组计算GROUP子句:依据某几列的值对结果分组注意:若用GROUP子句,则目标列名列表中每个列为分组依据列或计算函数。即非聚集字段全部出现在GROUP子句中,否则将出错格式:GROUPBY分组依据列名列表[HAVING组筛选条件]例1:统计每门课程选课人数,列出课程号和人数
SELECTCnoAS课程号,COUNT(Sno)AS选课人数
FROMSC
GROUPBYCno
例2:查询每名学生的选课门数和平均成绩
SELECTSnoAS学号,COUNT(*)AS选课数,AVG(Grade)AS平均成绩FROMSCGROUPBYSno例3:要求同例2,以下语句错误!SELECTSno学号,Cno课程号,COUNT(*)选课数,AVG(Grade)平均成绩
FROMSC
GROUPBYSno因:每组只有一条记录,
该记录中Cno值不确定(有多个值)结果分组(Cont.)用HAVING子句可以对组的结果进行筛选例:查询选修了3门以上课程的学生的学号
SELECTSnoAS学号
FROMSC
GROUPBYSnoHAVINGCOUNT(*)>32.5.2多表连接查询多表连接查询:多个相关联表中获取信息实际上是计算多个表的笛卡尔积(一种关系运算)连接查询主要包括内连接、自连接和外连接1.内连接使用内连接:两个表的相关字段满足连接条件,则从两个表中提取数据并拼接成新记录内连接格式:FROM表1[INNER]JOIN表2
ON连接条连接条件的一般格式:
表名1.列名1<比较运算符>表名2.列名2注意:参与比较的两个列在语义上必须相同
多表连接查询-内连接(Cont.)例如,两表根据条件number=scale进行内连接numbername1张山2李斯scaleAddress1北京1上海2西安2成都结果numbernamescaleAddress1张山1北京1张山1上海2李斯2西安2李斯2成都例1:查询每名学生的情况及其选课情况。
SELECT*FROMstudentJOINSCONstudent.Sno=SC.Sno注意:结果中有重复的Sno列例2:查询计算机系学生选课情况,
列出学生的姓名、课程号和成绩SELECTSname,Cno,GradeFROMstudentJOINSCONstudent.Sno=SC.SnoWHERESdept='计算机系'可为表指定别名,以简化书写。但一旦指定别名,用到该表名的地方都必须使用别名例3:查询信息系选修VB的课程的学生的成绩列出学号、姓名、课程名和成绩
SELECTa.Sno,a.Sname,c.Cname,b.GradeFROMstudentaJOINSCbONa.Sno=b.SnoJOINcoursecONc.Cno=b.CnoWHEREa.Sdept='信息系'ANDc.Cname='VB编程语言'2.多表连接查询-自连接自连接:特殊的内连接,把一个表自己与自己做内连接
即物理上一个表,逻辑上是两个表使用自连接时必须为自连接的表起两个别名,使之在逻辑上成为两个表自连接的格式:
SELECT<别名1|别名2>.列名1,<别名1|别名2>.列名2FROM表名[AS]别名1JOIN表名[AS]别名2ON连接条件
…(其它子句)2.多表连接查询-自连接(Cont.)例:查询与李勇在同一个系的学生的姓名和系名
SELECTS2.Sname,S2.Sdept
FROMstudentS1JOINstudentS2ONS1.Sdept=S2.SdeptWHERES1.Sname='李勇'ANDS2.Sname!='李勇'3.多表连接查询-外连接在内连接中,只有满足连接条件的元组才在结果中。结果中需要不满足连接条件的元组时:外连接外连接只限制一个表的数据必须满足连接条件,而另一个表中的数据可以不满足连接条件外连接格式:
FROM表1LEFT|RIGHT[OUTER]JOIN表2ON连接条件LEFT[OUTER]JOIN称为左外连接,它限制表2中的数据必须满足连接条件,表1不限RIGHT[OUTER]JOIN称为右外连接,它限制表1中的数据必须满足连接条件,表2不限多表连接查询-外连接例:查询学生选课情况,包括选课及未选课的学生
SELECTa.Sno,Sname,Cno,Grade
FROMstudentaLEFTJOINSCONa.Sno=SC.Sno可知:LEFTJOIN:左表(表1)数据全在结果中RIGHTJOIN:右表(表2)数据全在结果中不满足条件的那个表的列在结果中的值均为NULL2.5.4子查询子查询:嵌入某个SELECT、INSERT、UPDATE或DELETE语句中的SELECT语句子查询可以嵌套多层子查询允许出现在任何能够使用表达式的地方,
一般位于外层语句的WHERE子句或HAVING子句中,与比较运算符或逻辑运算符一起构成查询条件嵌套查询的一般处理方法:
先处理子查询,其结果作为父查询的条件涉及多表的查询,可连接查询,也可嵌套查询若查询结果来自一个关系,适用于嵌套查询1.使用子查询进行基于集合的测试
子查询返回的结果是一个集合用IN(或NOTIN)操作符比较集合中的数据例1:查询与宋江在同一个系的学生
SELECTSno,Sname,SdeptFROMstudentWHERESdept
IN(SELECTSdeptFROMstudentWHERESname='宋江‘)ANDSname!='宋江'例2:查询成绩小于60分的学生及其课程
SELECTa.Sno,Sname,Sdept,b.Cname,GradeFROMstudentaJOINSCONa.Sno=SC.SnoJOINcoursebONb.Cno=SC.CnoWHEREa.Sno
IN
(SELECTSnoFROMSCWHEREGrade<60)ANDGrade<602.使用子查询进行比较测试要求子查询返回的结果是单一值,不能是集合用比较运算符与子查询返回的值进行比较例:查询选修了c02课程且成绩大于此课程平均成绩的学生,列出学号和成绩。
SELECTSno,GradeFROMSCWHERECno='c02'ANDGrade>
(SELECTAVG(Grade)FROMSCWHERECno='c02‘)3.使用子查询进行存在性测试
先执行外层查询,再执行子查询
子查询返回的是一个逻辑值(真或假)
用EXISTS(或NOTEXISTS)确定外层查询的数据是否是满足要求的结果
子查询不需指定列名,一般用星号(*)代替。例:查询选择了c01课程的学生姓名
SELECTSnameFROMstudentaWHEREEXISTS(SELECT*FROMSCWHERESno=a.SnoANDCno='c01‘)
小结SQL语言的发展常用数据类型数据定义语句:表的建立、修改、删除数据的增、删、改操作数据查询操作单表查询无条件、条件、分组、排序、聚集函数计算多表连接查询内连接、自连接、左外连接、右外连接子查询练习题1.利用本章提供的三个表(Student、Course和SC)实现如下操作,写出相应的SQL语句,并上机验证结果a)查询SC表中的全部记录b)查询计算机系学生的姓名、年龄c)查询成绩小于60分的学生的学号、姓名、课程名和分数d)统计每门课程的选课人数和考试最高分e)查询哪些课程没有学生选修,列出课程号和课程名练习题2.写出创建下表的SQL语句,表名为test,
表结构如下:COL1:字符型,主码COL2:整型,允许空值COL3:字符型,长度为10,不允许空值3.用ALTER语句修改上题创建的表结构:a)增加一个新列COL4,货币类型,允许空值b)将COL3的长度改为203.2视图
内容视图概念
定义视图
删除视图
§2.6视图视图:数据库基本表中取出的数据组成的逻辑窗口,其它表中导出的虚表数据库中只存放视图的定义,不存放其包含的数据,这些数据仍存放在原来的基本表中视图对应于数据库结构中的外模式视图可以建立在基本表上,也可以建立在其他的视图上,即可以在一个视图之上再定义视图一个基本表上可以建立多个视图。一个视图也可以建立在多个基本表上从视图中查询与从表中查询的语句基本相同视图的示意图基本表1基本表2视图视图有很多优点:简化操作多表间查询时,通过视图实现,将复杂查询封装在视图内部,用户不必学习复杂的数据库查询技术增加了数据安全性授权用户才能使用视图;而且只能查询授权的列分割数据通过列名表纵向分割,通过WHERE横向分割提供逻辑独立性对视图进行修改时,不必修改使用视图的应用程序定义视图的CREATEVIEW语句的一般格式:
CREATEVIEW视图名[(视图列名表)]AS
子查询语句其中子查询可是任意SELECT语句,但要注意:子查询中通常不含ORDERBY和DISTINCT子句定义视图时要么指定全部视图列,要么全部省略。若省略视图的属性列名,则其列名同子查询列名如下三种情况须明确指定组成视图的所有列名:•某个目标列是计算函数或列表达式;•多表连接时选出了几个同名列作为视图的字段;•需要在视图中为某个列选用新的更合适的列名。1.定义单源表视图单源表视图:视图来自一个基本表的部分行、列可查询和修改数据操作例:建立信息系学生的视图
CREATEVIEWV_IS_StudentASSELECTSno,Sname,Sage FROMStudentWHERESdept='信息系‘CREATEVIEW语句的结果仅保存视图定义对视图查询时,才按其定义从相应基本表中查询数如:SELECT*FROMIS_Student2.定义多源表视图多源表视图:视图来自于多个表的数据。多源表视图一般只用于查询,不用于修改数据例:建立信息系选了‘c01’号课程的学
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 导游资格-导游资格证每日一练
- 贫困生申请书认定
- 重开业申请书
- 企业内部系统使用权限规范
- 2024-2025学年山东省百师联考高二上学期期中考试物理试题(解析版)
- 100以内加减乘除趣味游戏册1000题(可打印)
- 电动车驱动系统技术专利研究
- 初中学生申请书
- 校园国旗护卫队申请书
- 外研版高中英语选择性必修第四册UNIT5 Period1课件
- 2025年中国铜画市场调查研究报告
- 山西省太原市2024-2025学年九年级上学期期末历史试题(含答案)
- 2024年全国体育专业单独招生考试数学试卷试题真题(含答案)
- 2025届高三八省联考语文试卷分析 课件
- 2025年江苏连云港灌云县招聘“乡村振兴专干”16人高频重点提升(共500题)附带答案详解
- 教务主任在教务管理经验大会上发言稿
- 2025年度检修计划
- 2024-2025学年冀教版数学五年级上册期末测试卷(含答案)
- 商业综合体市场调研报告
- 自动体外除颤器
- 《微生物学发展史》课件
评论
0/150
提交评论