版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第四章关系数据库实现及使用关系代数SQL语言本章要点退出第四章关系数据库实现及应用4.1关系代数4.2关系演算4.3SQL语言概貌4.4SQL数据定义功能4.5SQL数据查询语句4.6SQL查询语句的加强4.7视图4.8SQL数据更新语句4.9SQL数据控制功能4.10嵌入式SQL4.11查询优化关系代数是一种抽象的查询语言,是关系数据操纵语言的一种传统表达方式,它是用对关系的运算来表达查询。按照表达查询的方式可分为两大类。第一类是用对关系的运算来表达查询的方式,称为关系代数。第二类是用谓词来表达查询要求的方式称为关系演算。关系代数一、传统的集合运算包括四种运算:并(∪)、交(∩)、差(-)、广义笛卡尔积(×)。1.并(Union)设关系R和关系S具有相同的目n,且相应的属性取自同一个域。则关系R和关系S的并记为R∪S,其结果仍为n目关系,由属于R或属于S的元组组成。关系代数如R和S的元组分别用两个圆表示,则R∪S的集合如图4.1所示虚影部分元组。关系代数图4.1集合R∪S集合RS关系代数关系代数2、交(Intersection)设关系R和关系S具有相同的目n,且相应的属性取自同一个域。关系R和关系S的交记为R∩S,结果仍为n目关系,由既属于R又属于S的元组组成。如R和S的元组分别用两个圆表示,则R∩S集合运算结果可用图4.2示意,则两圆相交部分元组表示R与S的交。关系代数关系代数RS图4.2集合R∩S关系代数关系代数3、差(Difference)
设关系R和关系S具有相同的目n,且相应的属性取自同一个域。定义关系R和关系S的差记为R-S,其结果仍为n目关系,由属于R而不属于S的元组组成。关系代数关系代数
如R和S的元组分别用两个圆表示,则R-S的集合如图4.3所示。比较图4.1.2和图4.1.3,显然R=(R∩S)∪(R-S)或R-S=R-(R∩S)。RS图4.3集合R-S关系代数4.笛卡尔积(ExtendedCartesianProduct)两个分别为n,m的关系R和S的广义笛卡尔积R×S是一个(n×m)元组的集合。元组的前n个分量是R的一个元组,后m个分量是S的一个元组.若R有K1个元组,S有K2个元组,则R×S有K1×K2个元组。记为R×S关系代数二、专门的关系运算包括四种运算即选择(σ)、投影(∏)、连接()和除法(÷),是关系数据库数据维护、查询、统计等操作的基础。1.选择(Selection)设有关系R,在关系R中求取满足给定条件F的元组组成新的关系的运算称为选择。记作:σF(R)关系代数
在σF(R)中,f是一个条件表达式,其值为“真”或“假”。σ
F
(R)是从关系R中选取使条件表达式F为真的元组。这是以行为处理单位进行的运算。条件表达式F是由常量、变量及算术比较符{>,≥,<,≤,=,≠}和逻辑运算符(∧,∨,)等构成。关系代数关系代数关系代数式为:σ单价≥5(营业库),结果如下表所示:2.投影(Projection)
设有关系R(A,B,C,D),在关系R中求指定的若干个属性列组成新的关系的运算称作投影,记作∏A(R)。其中A为欲选取的属性的列表。可以用:列名1,列名2……形式表示,也可以用[1],[2],……形式表示。这是以列作为处理单位进行的运算,示意图如图4.4所示的阴影部分,a∈{A},c∈{A},d∈{A}。关系代数关系代数关系R(a,c,d)在A上的投影,即∏A(R),A包括:a,c,d等域。关系代数∏[3],[4](营业库),结果:注意:在投影后如出现重复元组,应只保留一个
关系代数【例4.7】求“营业库”中所有单价大于5元的商品品名和单价,求关系运算式。关系运算式:∏品名,单价(σ单价≥5(营业库)
表4.9从表4.6再作投影品名单价钢笔10.00圆珠笔6.00笔记本8.00关系代数3.连接(Join)从两个分别为n,m元的关系R和S的广义笛卡尔积中选取满足给定条件F的元组组成新的关系称为R和S的连接,记作RS(F=AθB)。其中A和B分别为R和S上度数相等且可比的属性列,θ是算术比较符(>,≥,<,≤,=,≠)。AθB例如:关系R和S如表4.10,4.11所式,求RS,连接结果如图所示。A=C关系代数4.除(Division)给定关系R(x,y)与S(y)其中x,y为属性集(也可为单属性),R中的y和S中的y可以有不同的属性名,但必须出自相同的域集。在求解R÷S时,对R按x的值分组,然后检查每一组,如某一组中的y包含S中全部的y,则取该组中的x的值作为商关系中的一个元组,否则不取。如此求出R÷S的商。关系代数关系代数第四章关系数据库实现及应用4.1关系代数4.2关系演算4.3SQL语言概貌4.4SQL数据定义功能4.5SQL数据查询语句4.6SQL查询语句的加强4.7视图4.8SQL数据更新语句4.9SQL数据控制功能4.10嵌入式SQL4.11查询优化关系演算以数理逻辑中的谓词演算为基础。谓词(Predicate)指明一个条件,通过对它的求解可得出下列之一的值:“真”、“假”、“未知”。常见的谓词例如:比较谓词:>,≥,<,≤,=,≠;包含谓词:IN;存在谓词:EXISTS关系演算一、元组关系演算用表达式{t|Q(t)}来表示,其中t为元组变量,Q(t)是由关系名、元组变量、常量及运算符组成的公式。{t|Q(t)}表示使Q(t)为“真”的元组的集合。关系演算
关系代数的运算均可用关系演算表达式来表示(反之亦然)表示如下:1)并:R∪S={t|R(t)∨S(t)}2)交:R∩S={t|R(t)∧S(t)}3)差:R-S={t|R(t)∧S(t)}4)投影:∏i1,i2,…ik(R)={tk|(u)(R(u)∧t[1]=u[i1]∧…t[k]=u[ik])}关系演算5)选择:其中F’是由F用t[i]代替运算对象i得到的等价公式。6)连接={t(n+m)|(u(n))(v(m))(R(u)∧s(v)∧t[1]=u[1]∧t[2]=u[2]∧…t[n]=u[n]∧t[n+1]=v[1]∧…t[n+m]=v[m]∧)关系演算关系演算【例4.10】根据表4.2营业库显示所有品名及其单价。C0l={t(2)|(u)(营业库(u))∧t[1]=u[品名]∧t[2]=u[单价]}二、域关系演算用表达式{x1,x2,…xk|(x1,x2,…xk)}来表示,其中x1,x2,…xk是域变量,是由关系、域变量、常量及运算符组成的式子。{x1,x2,…xk|(x1,x2,…xk)}表示所有使(x1,x2,…xk)为“真”的那些x1,x2,…xk组成的元组的集合。每一个关系代数表达式有一个等价的域演算表达式,反之亦然。关系演算关系演算【例4.11】如果有关系:学生(学号,姓名,年龄,性别),求用域关系演算式表示年龄大于20的学生的学号,姓名,年龄。解:{<学号,姓名,年龄>|性别(<学号,姓名,年龄,性别>学生∧年龄>20)}第四章关系数据库实现及应用4.1关系代数4.2关系演算4.3SQL语言概貌4.4SQL数据定义功能4.5SQL数据查询语句4.6SQL查询语句的加强4.7视图4.8SQL数据更新语句4.9SQL数据控制功能4.10嵌入式SQL4.11查询优化SQL(StructuredQueryLanguage):指结构化查询语言,但成为关系数据库标准语言之后它已成为一种综合的、通用的、功能极强的关系数据库语言。SQL语言概貌
SQL语言概貌(1)一体化的特点。(2)语言简洁,易学易用。(3)高度非过程化。(4)极强适应性。(5)SQL语言支持关系数据库三级模式的结构。第四章关系数据库实现及应用4.1关系代数4.2关系演算4.3SQL语言概貌4.4SQL数据定义功能4.5SQL数据查询语句4.6SQL查询语句的加强4.7视图4.8SQL数据更新语句4.9SQL数据控制功能4.10嵌入式SQL4.11查询优化一、基本表的定义和修改
SQL数据定义功能包括:定义基本表定义视图定义索引SQL数据定义功能1、定义基本表的语句:CREATETABLE表名(列名1类型)[NOTNULL][,列名2类型][NOTNULL]…)[其他参数]“其他参数”指与物理存储有关的参数,随具体系统不同而不同;“[]”表示可选项;“|”表示多选一项,对于其两边内容,用户只能且必需选一项。SQL数据定义功能SQL数据定义功能一般的SQL支持的数据类型有:INTEGER全字长(31bits精度)的二进制整数。SMALLINT半字长(精度为15bits)的二进制整数。DECIMAL([p,q])压缩十进制数,共p位,小数点后有q位(15≥P≥q≥0,q=0时可省略)。FLOAT双字长的浮点数。CHAR(n)长度为n的定长字符串。VARCHAR(n)变长字符串,最大长度为n。
SQL数据定义功能SQL支持空值(NULL)的概念.空值是不知道的或不确定的值,除了候选关键字外,任何列可以有空值。如不允许空值,则应指定该列NOTNULL
2、修改基本表定义语句
ALTERTABLE表名ADD列名类型例如ALTERTABLE学生ADD班级CHAR(4)在修改基本表定义的列的语句中不允许NOTNULL。
ALTERTABLE表名RENAMECOLUMN原列名TO新列名用于更改某列名。SQL数据定义功能
ALTERTABLE
表名ALTERCOLUMN
列名类型[(宽度)[,小数位]]修改字段类型、字段或数值型字段宽度和数值型字段小数点后位数。ALTERTABLE
表名
DROPCOLUMN
列名从表中删去一列。SQL数据定义功能3、删除基本表的语句
DROPTABLE表例如:DROPTABLE学生将把一个基本表的定义连同其中记录、索引及它导出的所有视图全部删除或不可引用。SQL数据定义功能二、索引的建立和删除1、索引的建立
CAEATE[UNIQUE]INDEX索引名ON基本表名(列名[次序][,列名[次序]]…)[其他参数]
索引可以建立在一列或几列上,其中次序可取:ASC(升序)或DESC(降序),缺省值为升序。UNIQUE表示每一个索引值只对应唯一的数据记录。用中括号[]表示是可选项。例如CREATEINDEX学生索引ON学生(班级DESC,学生号)。SQL数据定义功能2.删除索引的语句DROPINDEX索引名例如DROPINDEX学生索引SQL数据定义功能第四章关系数据库实现及应用4.1关系代数4.2关系演算4.3SQL语言概貌4.4SQL数据定义功能4.5SQL数据查询语句4.6SQL查询语句的加强4.7视图4.8SQL数据更新语句4.9SQL数据控制功能4.10嵌入式SQL4.11查询优化一、语句格式SQL语言数据库查询语句一般格式是:SELECT*|<表达式>FROM基本表|视图[WHERE条件表达式1][GROUPBY列名1[HAVLNG条件表达式2]……][ORDERBY列名2[ASC/DESC]……]注意:这是一条SQL语句SQL数据查询语句SQL数据查询语句
“目标列”的格式可以是以下格式:1)列名1,列名2……其中列名1,列名2为FROM子句中所指基本表或视图中的列名;如果FROM子句中指定多个表,且列名有相同的时,则列名应写为“表名.列名”的形式。SQL数据查询语句2)上述每一项可以是表达式,“目标列”允许使用SQL提供的集合函数形成表达式。常用的集合函数如下:COUNT(*)计算记录条数COUNT(列名)计算一列值的个数SUM(列名)计算某一列值的总和,该列必须为数值类型AVG(列名)计算某一列值的平均值,该列必须为数值类型MAX(列名)计算某一列值的最大值,该列必须为数值类型MIN(列名)计算某一列值的最小值,该列必须为数值类型如无HAVING子句,上述函数完成对全表统计,否则作分组统计。
SQL数据查询语句SQL数据查询语句3)DISTINCT列名1[,列名2…]表示在最终结果表中,属性相同的元组只保留一条。在书写时,允许使用通配符“*”、“?”。“*”表示任意一字符串。“?”表示任意一个字符。“基本表或视图”格式如下所示:表名1(或视图名1)[别名1][,表名2(或视图名2)[别名2]]…SQL数据查询语句如果{<表达式>}由列名构成,将实现关系投影运算。如果FROM中指定的是一个表,WHERE的描述将实现选择运算。如果FROM中指定的是多个表,WHERE的描述中将包括连接运算。SQL数据查询语句二、对单一表查询语句示例下列示例中使用的基本表的结构假设为:学生(学生号,姓名,性别,出生年份,班级,寝室号)课程(课程号,课程名,先行课程名)成绩(学生号,课程号,分数)其中出生年份和分数为整型,其他为字符类型SQL数据查询语句例4.12求所有学生表数据。SELECT*FROM学生例4.13求所有学生姓名的列表。SELECT姓名FROM学生例4.14如当前系统设定的年份为YEAR1求显示所有学生姓名、年龄。SELECT姓名,YEAR1-出生年份FROM学生SQL数据查询语句例4.15求显示学生人数和学生平均年龄。SELECTCOUNT(*),AVG(YEAR1-出生年份)FROM学生例4.16求所有学生班级的列表。SELECTDISTINCT班级FROM学生因为每个学生班级均有许多学生,为在列表中不出现重复班级名,故使用了“DISTINCT”。SQL数据查询语句例4.17显示一个学生表,要求先按班级,在班级相同时按学生号排序。SELECT*FROM学生ORDERBY班级,学生号例4.18求全体男生信息。SELECT*FROM学生WHERE性别=‘男’例4.19求1980年以前出生的女生姓名、性别、出生年份。SELECT姓名,性别,出生年份FROM学生WHERE性别=‘女’AND出生年份<1980SQL数据查询语句例4.20假设没有安排寝室学生的寝室号为空值,求没有安排寝室学生姓名。SELECT姓名FROM学生WHERE寝室号ISNULL涉及空值的谓词的一般形式是:列名IS[NOT]NULL。在条件表达式中还经常使用谓词IN、BETWEEN、LIKE。SQL数据查询语句例4.21求200101班和200103班的学生表。实现语句1:SELECT*FROM学生
WHERE班级IN(‘200101’,‘200103’)实现语句2:SELECT*FROM学生
WHERE班级=‘200101’OR班级=‘200103’谓词IN实际是一系列逻辑关系词“OR”的缩写。也可用谓词NOTIN表示不在某集合之中。SQL数据查询语句例4.22求出生年份在1982至1985年间的学生姓名和出生年份。SELECT姓名,出生年份FROM学生WHERE出生年份BETWEEN1982AND1985SQL数据查询语句例4.23找出所有2001级学生。SELECT*FROM学生WHERE班级LIKE‘2001%’使用谓词LIKE时,列名必须为各种字符串类型。可采用一些通配字符:_(下横线)表示任意一单个字符。%(百分号)表示任意长度字符串。SQL数据查询语句例4.23求选修课程超过了三门的学生号SELECT学生号FROM成绩GROUPBY学生号HAVINGCOUNT(*)>3以上查询实现了关系运算中投影与选择两种运算。SQL数据查询语句三、对两个以上表的连接查询例4.25求所有学生信息,包括他所学的课程的课程号和成绩,并按课程号和成绩排名。SELECT学生.*,成绩.*FROM学生,成绩WHERE学生.学生号=成绩.学生号ORDERBY课程号,分数DESCSQL数据查询语句例4.26求分数为优良(80分数及以上)的所有成绩组成的表,要求显示内容包括姓名、课程名和分数。SELECT姓名,课程名,分数FROM学生,成绩,课程
WHERE学生.学号=成绩.学号
AND成绩.课程号=课程.课程号AND分数>=80SQL数据查询语句___自连接例4.27求每门课程的先行课的先行课。SELECT表1.课程名,表2.先行课程名FROM课程表1,课程表2WHERE表1.课程号=表2.课程号别名例4.28求既选修了课程号为C1,又选修了课程号为C2这两门课的学生的学生号。SELECT表1.学生号FROM成绩表1,成绩表2WHERE表1.学生号=表2.学生号AND表1.课号=‘C1’AND表2.课号=‘C2’SQL数据查询语句___自连接SQL数据查询语句__嵌套查询
嵌套查询亦称为子查询,它是指一个SELECT-FROM-WHERE查询块可以嵌入到另一个查询块之中的查询。例4.29求选修了课程号为‘C1’的学生姓名。SELECT姓名FROM学生WHERE学号IN(SELECT学号FROM成绩
WHERE课程号=‘C1’)SQL数据查询语句例4.30求选修了课程名为‘C语言’的学生姓名。SELECT姓名FROM学生WHERE学号IN
(
SELECT学号FROM成绩
WHERE课程号IN(SELECT课程号FROM课程
WHERE课程名=‘C语言’))SQL数据查询语句例4.31由表4.3所示关系,求表成绩1和成绩2的两个关系的交。SELECT*FROM成绩1WHERE学生号IN(SELECT学生号FROM成绩2WHERE成绩1.课程号=成绩2.课程号
AND成绩1.分数=成绩2.分数)SQL数据查询语句例4.32由表4.3所示关系,求成绩1-成绩2两个关系的差。SELECT*FROM成绩1WHERE学生号NOTIN(SELECT学生号FROM成绩2WHERE成绩1.课程号=成绩2.课程号
AND成绩1.分数=成绩2.分数)SQL数据查询语句两个SELECT-FROM-WHERE查询块如果目标列相同,可利用谓词UNION构成一个查询,实现关系并运算,其格式如下:SELECT目标列1FROM表1WHERE条件表达式1UNIONSELECT目标列2FROM表2WHERE条件表达式2SQL数据查询语句目标列1与目标列
2名字不要求一样,但列数对应列类型和宽度必须一样,结果中的列名按第一个查询块中列名查询时将去掉重复元组。例4.33求营业库1和营业库2两个关系的并。SELECT*FROM营业库1UNIONSELECT*FROM营业库2SQL数据查询语句__关系除法
一般用于实现关系除法,需利用存在量词EXISTS和NOTEXISTS。这类查询称为相关子查询(CorrelatedSubquery)。相关子查询中查询条件依赖于外层查询中的某个值,因此不能只处理一次,而要内外交错反复求值。应用EXISTS查询语句定义见下例。例4.35求选修了课程号为‘C1’的学生姓名SELECT姓名FROM学生WHEREEXISTS(SELECT*FROM成绩
WHERE成绩.学号=学生.学号AND
课程号=‘C1’)SQL数据查询语句__关系除法SQL数据查询语句__关系除法在SQL中没有全称量词(Forall),但是带全称量词的谓词都可转换成等价的带存在量词的谓词:
例4.36求选修了全部课程的学生姓名。SELECT姓名FROM学生WHERENOTEX1STS(SELECT*FROM课程WHERENOTEX1STS(SELECT*FROM成绩
WHERE成绩.学号=学生.学号AND
成绩.课程号=课程.课程号))SQL数据查询语句__关系除法更一般的关系除法问题如下例。例4.37求至少选修了学生号为S1的学生所选修的全部课程的学生的学生号。本问题含义是对成绩表按学生号分组,如每组课程号包含了学生号为S1,所选修的全部课程的课程号则取该组学生号列入结果表。SQL数据查询语句SQL没有蕴函(Implication)逻辑运算。但是蕴函逻辑运算可作如下变换,
其意义是说如p包含在q中,则一定不存在:“包含在p内的元素”却“不在q之中”的情况。上例也就可如下表述:求这样一些学生学号,不存在这样的情况,即S1选修了的课程CY,他却没有选修。SQL数据查询语句如果用p表示谓词“学生s1选修课程cy”,用q表示谓词“学生Sx选修课程Cy”,则上述查询可表示为:SELECTDISTINCT学生号FROM成绩表1WHERENOTEXISTS(SELECT*FROM成绩表2WHERE表2.学生号=‘S1’ANDNOTEXISTS(SELECT*FROM成绩表3WHERE表3.学生号=表1.学生号AND
表3.课程号=表2.课程号))许多数据库产品对SQL查询语句进一步扩展。以下结合SQLServer摘要介绍:1.输出列更名运算SELECT[DISTINCT][<别名1>]<表达式1>[AS<新列名1>][,<别名2>]<表达式2>[AS<新列名2>]…]FROM……“AS新列名”指定查询结果中列的重新定义的标题。SQL查询语句的加强
2.输出定向有许多应用要求根据查询语句产生一个新表并将查询结果送到新表中等,其方法是在语句中增加子句:INTO<表名>SQL查询语句的加强
3.外部连接实现外连接的方法是在FROM子句中增加有关连接的语句成分,格式为:<表名1><连接类别>OUTERJOIN<表名2>根据连接类别不同具体分为:SQL查询语句的加强左外连接,格式为:<表名1>LEFTOUTERJOIN<表名2>,意义为可供选作输出内容的记录除了满足连接条件的记录之外,还要加上那些左表(表名1)中不满足连接条件的记录。右外连接,格式为:<表名1>RIGHTOUTERJOIN<表名2>,意义为可供选作输出内容的记录除了满足连接条件的记录之外,还要加上那些右表(表名2)中不满足连接条件的记录。全外连接,格式为:<表名1>OUTEROUTERJOIN<表名2>,意义为可供选作输出内容的记录除了满足连接条件的记录之外,还要同时加上那些左表(表名1)中不满足连接条件的记录以及右表(表名2)中不满足连接条件的记录。SQL查询语句的加强例4.38求根据表4.2生成一个新表:统计表,包括所有单价大于5元的记录,并要求增加二列:金额、说明,其中金额=数量×单价,说明要求10个字符宽,以空格填充。SELECT*,数量*单价AS金额,“”AS说明
FROM营业库WHERE单价>5INTO统计表SQL查询语句的加强例4.39求生成按课程成绩的分析统计表,包括每门课平均分、最高分、最低分,存放在表TMP中。SELECT课程号,AVG(分数)AS平均分,MAX(分数)AS最高分,MIN(分数)AS最低分
FROM成绩
GROUPBY课程号
INTOTMPSQL查询语句的加强
例4.40对于表4.2营业库,求生成统计表,要求按商品代码分组,显示每笔记录,对每组记录显示之后求该组“数量”数据之和,并在其中品名栏内标注“小计”字样。SQL查询语句的加强
例4.41求生成按课程成绩的分析表,包括所有学生姓名,班级,课程号,分数。要求没有成绩的学生情况也能显示。SELECT学生.姓名,学生.班级,成绩.课程号,成绩.分数FROM学生LEFTOUTERJOIN成绩第四章关系数据库实现及应用4.1关系代数4.2关系演算4.3SQL语言概貌4.4SQL数据定义功能4.5SQL数据查询语句4.6SQL查询语句的加强4.7视图4.8SQL数据更新语句4.9SQL数据控制功能4.10嵌入式SQL4.11查询优化视图和表不同之处在于,它并没有真正地存储数据,它所存取的数据必须依附于所关联的数据表,它是一种虚的映射关系。
SQL建立视图的语句格式:
CREATEVIEW视图名[(字段名[,字段名]…]AS子查询[WITHCHECKOPTION]视图所用字段名可以与基本表中字段名不一致。视图当字段名不一致或子查询中目标列列名是函数、一般表达式或子查询中目标列有相同列名时,在视图定义中必须指出视图的各个字段名,也可以不列出,默认与子查询结果相同。视图在子查询中一般不能包括DISTINCT,INTO,ORDER等,不能涉及临时表。WITHCHECKOPTION选项表示在通过视图对基本表进行插入和更新操作时必须满足子查询中WHERE语句中规定的条件。视图视图例4.42将学生表、成绩表、课程表连接后取部分字段建立视图。CREATEVIEW学生成绩ASSELECT姓名,课名,分数FROM学生,成绩,课程WHERE学生.学生号=成绩.学生号AND
成绩.课程号=课程.课程号视图例4.43例4.39我们可改为视图方式。CREATEVIEW成绩统计(课程号,平均分,最高分,最低分)ASSELECT课程号,AVG(分数),MAX(分数),MIN(分数)FROM成绩
GROUPBY课程号再查看成绩统计表。使用如下语句:SELECT*FROM成绩统计
删除视图语句格式为:
DROPVIEW视图名一个基本表的删除,由它导出的视图将自动删除。当一个视图被删去后,由它导出的其他视图也将自动删除或变为不可引用。视图不仅可用于查询,还可借助视图实现对基本表的插入、修改和删除操作。视图在关系优化过程中,我们将一个实际数据改为多个表存储,使用户面对的是复杂的数据结构,而视图可不改变数据存储结构同时又使用户面对的是简单的数据结构,视图将其中连接操作对用户隐藏起来,就使用户对数据使用大大简化,更容易操作。视图在一些数据库系统中,利用视图可建立两个不同数据库系统的联系和通信。例如VFP中,可十分容易地建立ORACLE、ACCESS、SQLSERVER等系统中的表的视图,称之为“远程视图”。VFP的程序可对这些视图如同基本表一样作查询、录入、修改、删除等操作,并借之实现对相关数据库系统中表的操作,使得程序设计大大简化。视图视图视图的作用:(1)视图对于数据库的重构提供了一定程度的逻辑独立性(2)简化用户观点,隐藏了表之间的连接(3)方便用户,使用户从不同角度看待数据(4)提供数据安全功能(5)在一些数据库系统中,利用视图可建立两个不同数据库系统的联系和通信第四章关系数据库实现及应用4.1关系代数4.2关系演算4.3SQL语言概貌4.4SQL数据定义功能4.5SQL数据查询语句4.6SQL查询语句的加强4.7视图4.8SQL数据更新语句4.9SQL数据控制功能4.10嵌入式SQL4.11查询优化一、修改(UPDATE)语句格式:UPDATE表名SET字段=表达式
[,字段=表达式]…[WHERE条件表达式]例4.44将营业库中所有单价高于5元的商品单价减少10%。UPDATE营业库SET单价=单价*0.9WHERE单价>5SQL数据更新语句SQL数据更新语句二、删除(DELETE)语句格式:DELETEFROM表名
[WHERE条件表达式]
例4.45清空成绩表。
DELETEFROM成绩例4.46清空89级学生成绩记录。DELETEFROM成绩WHERE学生号IN(SELECT学生号FROM学生WHERE班级LIKE“1989%”)SQL数据更新语句三、插入(INSERT)语句格式1:INSERTINTO表名[(字段名[,字段名)…)]VALUES(表达式[,表达式]…)格式2:INSERTINTO表名[(字段名[,字段名]…)]
子查询SQL数据更新语句例4.47录入一个学生记录到学生表中,假设已将其学号、姓名、性别、出生年份和班级数据分别赋值给变量xh1、xm1、xbl、csnf1、bj1。INSERTINTO学生(学号,姓名,性别,出生年份,班级)VALUES(xh1,xm1,xbl,csnf1,bj1)SQL数据更新语句例4.48欲由表4.1的营业库1和营业库2生成表4.2的营业库表且增加金额一栏,可先基于营业库1生成一个新表,在新表中增加“金额”字段,再将营业库2的数据添加到生成的新表中。用如下两条语句完成。SELECT*,数量*单价AS金额
FROM营业库1INTO营业库INSERTINTO营业库SELECT*,数量*单价FROM营业库2SQL数据更新语句四、视图的更新若一个视图是从单个基本表导出,且只是去掉了基本表的某些行和某些列(不包括候选关键字),我们称这类视图为行列子集视图。例如:建立女学生视图S_V1。CREATEVIEWS_V1ASSELECT学生号,性别FROM学生WHERE性别=‘女’SQL数据更新语句对于行列子集视图允许通过它更新基本表。对视图的更新,实质是通过视图实现对基本表的更新。但如果视图中某些字段对应的是对基本表按某种表达式运算的结果,或者视图是基于多表建立的,将不能通过这样的视图实现对基本表的更新。SQL数据更新语句例如删除女学生视图s_v1中学号为200101的学生。DELETEFROMs_v1WHERE学号=‘200101’;转换为对基本表的更新:DELETEFROM学生WHERE学生号=‘200101’AND性别='女';SQL数据更新语句视图更新的限制:目前各DBMS一般都只允许对行列子集视图进行更新,并有以下限制:(1)若视图是由两个以上基本表导出的,则此视图不允许更新。(2)若视图的字段来自表达式或常数,则不允许对此视图执行INSERT和UPDATE操作,但允许执行DELETE操作。(3)若视图的字段来自集函数,则此视图不允许更新。(4)若视图定义中含有GROUPBY子句,则此视图不允许更新。(5)若视图定义中含有DISTINCT任选项,则此视图不允许更新。(6)若视图定义中有嵌套查询,并且内层查询的FROM子句中的表是相同的,则此视图不允许更新。(7)一个不允许更新的视图所导出的视图不允许更新。第四章关系数据库实现及应用4.1关系代数4.2关系演算4.3SQL语言概貌4.4SQL数据定义功能4.5SQL数据查询语句4.6SQL查询语句的加强4.7视图4.8SQL数据更新语句4.9SQL数据控制功能
4.10嵌入式SQL4.11查询优化SQL数据控制功能SQL具有授权语句,实现对数据库使用的控制。其语句格式为:GRANT权力[,权力]…[ON对象类型对象名]TO用户[,用户]…[WITHGRANTOPTION][IDENTIFIEDBY口令]SQL数据控制功能其中,所授的权力可分为两类:1.进入数据库系统权力2.使用他人数据的权力。1.进入数据库系统权力,建立自己的数据权力。这些权力由系统管理员授予。包括:
CONNECT连接到数据库的权力
CREATETAB建立数据库的权力或在数据库中建立表的权力。DBA,系统管理员的权力。SQL数据控制功能例4.49授予用户USER1进入数据库系统权力。GRANTCONNECTTOUSER1例4.50将数据库学生系统中建立表的权力授予用户USER1。GRANTCREATETABONDATABASE学生系统TOUSER1SQL数据控制功能2.使用他人数据的权力。一般由数据表的拥有者授予,这些权力包括:
SELECT 查询权限
INSERT 插入新记录权限
DELETE 删除记录权限
UPDATE(属性名[,属性名]…) 对有关列修改权限
ALTER 修改表结构权限
INDEX 建立索引权限
ALL 以上所有权限SQL数据控制功能SQL数据控制功能例4.51设成绩表由USER1所建,则USER1可发出命令将对成绩表查询、修改的权力授予USER2。GRANT
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 信阳农林学院《外贸单证制作》2026-2027学年第一学期期末试卷含解析
- 湖北省咸宁市马桥中学2027届八上物理期末学业质量监测模拟试题含解析
- 2027届云南省昭通市昭阳区苏家院镇中学八年级物理第一学期期末教学质量检测模拟试题含解析
- 某钢铁厂轧钢安全规范
- 2026年内蒙古乌兰察布市北京八中学分校八年级数学第一学期期末复习检测试题含解析
- 2026年6月28日内蒙古兴安盟人才引进面试真题及答案解析(上午卷)
- 起重伤害事故现场处置方案培训课件
- 《地球板块的缓慢运动》教案-2026-2027学年浙教版(新教材)初中科学七年级上册
- 2025年上海烟草集团有限责任公司招聘拟录用人员(第二批)笔试历年参考题库附带答案详解
- 2025山东钢都置业有限公司招聘4人笔试历年参考题库附带答案详解
- 苏州博特蒙电机有限公司扩建生产和研发无 刷永磁电机项目报告表
- DBJ50-T-200-2024 建筑桩基础技术标准
- 船舶电气系统的可靠性分析
- UL489标准中文版-2019断路器UL标准中文版
- (高清版)JTG 3810-2017 公路工程建设项目造价文件管理导则
- 人教版四年级数学下册期末试卷-
- 《民宿文化与运营》课件-第四章 民宿建设
- JC-T 2536-2019水泥-水玻璃灌浆材料
- 矿井瓦斯灾害防治
- 2024届新疆第二师华山中学高二化学第二学期期末质量检测试题含解析
- 英语48个国际音标课件(单词带声、附有声国际音标图)
评论
0/150
提交评论