黑龙江大学信息与计算中心_第1页
黑龙江大学信息与计算中心_第2页
黑龙江大学信息与计算中心_第3页
黑龙江大学信息与计算中心_第4页
黑龙江大学信息与计算中心_第5页
已阅读5页,还剩72页未读 继续免费阅读

下载本文档

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

文档简介

第五章

关系数据库标准语言SQL

1黑龙江大学信息与计算中心周建军第一节SQL概述

SQL是StructuredQueryLanguage(结构化查询语言)的缩写。可以说查询是SQL语言的重要组成部分,但不是全部,SQL还包含数据定义、数据操纵和数据控制功能等部分。SQL已经成为关系数据库的标准数据语言,该语言具有如下主要特点:黑龙江大学信息与计算中心周建军

1.SQL是一种一体化的语言,它包括了数据定义、数据查询、数据操纵和数据控制等方面的功能,它可以完成数据库活动中的全部工作。

2.SQL语言是一种高度非过程化的语言,它没有必要一步步地告诉计算机“如何”去做,而只需描述清楚用户要“做什么”,SQL语言就可以将要求交给系统,系统自动完成全部工作。黑龙江大学信息与计算中心周建军

3.SQL语言非常简洁。虽然SQL语言功能很强,但它只有为数不多的几条命令。SQL的语法也非常简单,它很接近自然语言(英语),因此容易学习、掌握。

4.SQL语言可以直接以命令方式交互使用,也可以嵌入到程序设计语言中以程序方式使用。黑龙江大学信息与计算中心周建军

VisualFoxPro在SQL方面支持数据定义、数据查询和数据操纵功能,但在具体实现方面也存在一些差异。另外,由于VisualFoxPro自身在安全控制方面的缺陷,所以它没有提供数据控制功能。黑龙江大学信息与计算中心周建军第二节

查询功能

SQL的核心是查询。SQL的查询命令是SELECT命令,VisualFoxPro的SQLSELECT命令的常用语法格式如下:

SELECT……

FROM……

[WHERE……]

[GROUPBY……][HAVING……]

[UNION[ALL]……]

[ORDERBY……]黑龙江大学信息与计算中心周建军其中各短语的含义如下:

·SELECT说明要查询的数据;

·FROM说明要查询的数据来自哪个(些)表,可以基于单个表或多个表进行查询;

·WHERE说明查询条件,即选择元组的条件;

·GROUPBY短语用于对查询结果进行分组,可以利用它进行分组汇总;黑龙江大学信息与计算中心周建军·HAVING短语必须跟随GROUPBY使用,它用来限定分组必须满足的条件;

·ORDERBY短语用来对查询的结果进行排序。

以上短语是学习和理解SQLSELECT命令必须要掌握的,还有一些短语是VisualFoxPro特有的。黑龙江大学信息与计算中心周建军

1.简单查询

简单查询由SELECT和FROM短语构成(无条件查询)或由SELECT、FROM和WHERE短语构成(条件查询)。

例:

从职工关系中检索仓库WH2的所有工资值。

SELECT工资FROM职工WHERE仓库号="WH2"

这里,SELECT指出要查询工资数据,FROM指出该数据取自职工表,WHERE指出条件仓库号等于WH2(用WHERE短语指定的查询条件可以是任意复杂的逻辑表达式)。黑龙江大学信息与计算中心周建军这里由于没有使用DISTINCT,所以不会去掉结果中的重复值。如果要去掉重复值只需要指定DISTINCT短语:

SELECTDISTINCT工资FROM职工WHERE仓库号="WH2"

注意:在SQL命令中用WHERE指定条件,而在传统的FoxPro中用FOR或WHILE指定条件,在使用时不要混淆。

黑龙江大学信息与计算中心周建军例:检索仓库关系中的所有元组。

SELECT*FROM仓库

该命令是从仓库表中检索出全部数据。其中“*”是通配符,表示所有属性(字段),这里的命令等同于:

SELECT仓库号,城市,面积FROM

仓库黑龙江大学信息与计算中心周建军2.简单的联接查询

联接是关系的基本操作之一,联接查询是一种基于多个关系的查询。

例:找出工作在面积大于400的仓库的职工号以及这些职工工作所在的城市。

这里所要求检索的信息分别出自职工(职工号属性)和仓库(城市属性)两个关系,这样的检索肯定是基于多个关系的,这样的查询一般用联接查询来实现。黑龙江大学信息与计算中心周建军

SELECT职工号,城市FROM仓库,职工

WHERE(面积>400)AND(职工.仓库号=仓库.仓库号)

这里的(职工.仓库号=仓库.仓库号)是查询联接条件,(面积>400)是查询限定条件。黑龙江大学信息与计算中心周建军注意:

1)在VisualFoxPro的SQL命令中分号是续行符号。

2)当FROM之后的多个关系中含有相同的属性名时,这时必须用关系前缀直接指明属性所属的关系,如职工.仓库号,“.”前面是关系名,后面是属性名。黑龙江大学信息与计算中心周建军3.简单嵌套查询

如果查询所要求的结果出自一个关系,但相关的条件却涉及多个关系,则可以利用嵌套查询来完成。

例:哪些城市至少有一个仓库的职工的工资为1250元?

这个例子要求查询仓库表中的城市信息,而查询条件是职工表的工资字段值,为此可以使用如下的嵌套查询:SELECT城市FROM仓库WHERE仓库号IN;

(SELECT仓库号FROM职工WHERE工资=1250)黑龙江大学信息与计算中心周建军

在这个命令中含有两个SELECT-FROM-WHERE查询块,即内层查询块和外层查询块,内层查询块检索到工资为1250的职工所在的仓库号值,而外层查询则利用这些仓库号值检索出仓库所在的城市。这里的IN相当于集合运算符∈。为了表示否定,即集合的不属于可以使用NOTIN。黑龙江大学信息与计算中心周建军前一个例子的内层查询结果是一个集合,所以外层查询的条件要使用内层查询的结果时必须使用IN运算符。如果内层的查询结果是一个值,则可以使用比较运算符,如下例。

例:找出和职工E4挣同样工资的所有职工。

SELECT职工号FROM职工WHERE工资=;

(SELECT工资FROM职工WHERE职工号=“E4”)

内层查询的结果是职工E4的工资值,所以这里可以用“=”进行比较。黑龙江大学信息与计算中心周建军4.几个特殊运算符

在SQL的表达式中可以使用一些特殊运算符,它们是BETWEEN…AND和LIKE等。

例:检索出工资在1220元到1240元范围内的职工信息。

这个查询的条件是值在什么范围之内,显然可以使用BETWEEN…AND,为此有如下查询语句:

SELECT*FROM职工WHERE工资BETWEEN1220AND1240黑龙江大学信息与计算中心周建军这里BETWEEN…AND…意思是“在…和…之间”,这个查询的条件等价于:

(工资>=1220)AND(工资<=1240)显然使用BETWEEN…AND表达条件更清晰、更简洁。

为了表示“不在…之间”可以使用NOTBETWEEN…AND…,例如:

SELECT*FROM职工WHERE工资NOTBETWEEN1220AND1240黑龙江大学信息与计算中心周建军例:从供应商关系中检索出全部公司的信息(不要工厂或其他供应商的信息)。

这是一个字符串匹配的查询,显然应该使用LIKE运算符:

SELECT*FROM供应商WHERE供应商名LIKE“%公司”

这里的LIKE是字符串匹配运算符,通配符“%”表示0个或多个字符,另外还有一个通配符“_”(下划线)表示一个字符。黑龙江大学信息与计算中心周建军5.排序

在SQLSELECT中使用ORDERBY短语对查询结果排序,并可以用ASC指出按升序排序(默认),用DESC指出按降序排序,可以按一列或多列排序。

例:先按仓库号升序排序、再按工资降序排序检索出全部职工信息。

SELECT*FROM职工ORDERBY仓库号ASC,

工资DESC

注意:ORDERBY是对最终的查询结果进行排序,不可以在子查询中使用该短语。黑龙江大学信息与计算中心周建军6.简单的计算查询

SQL不仅具有一般的检索能力,而且还可以直接对检索结果进行计算,比如检索职工的平均工资、检索某个仓库中职工的最高工资值等。用于计算检索的函数有:

·COUNT--计数

·SUM--求和

·AVG--计算平均值

·MAX--最大值

·MIN--求最小值黑龙江大学信息与计算中心周建军7.分组与计算查询

利用GROUPBY子句进行分组计算查询使用的非常广泛。可以按一列或多列分组,还可以用HAVING进一步限定分组的条件。

例:求每个仓库的职工的平均工资。

SELECT仓库号,AVG(工资)FROM职工;

GROUPBY仓库号

在这个查询中,首先按仓库号属性进行分组,然后再计算每个仓库的平均工资。GROUPBY子句一般跟在WHERE子句之后,没有WHERE子句时跟在FROM子句之后。另外,还可以根据多个属性进行分组。黑龙江大学信息与计算中心周建军在分组查询时,有时要求分组满足某个条件时才检索,这时可以用HAVING子句来限定分组。

例:求至少有两个职工的每个仓库的平均工资。

SELECT仓库号,COUNT(*),AVG(工资)FROM职工;

GROUPBY仓库号HAVINGCOUNT(*)>=2

黑龙江大学信息与计算中心周建军

HAVING子句总是跟在GROUPBY子句之后,不可以单独使用。

HAVING子句和WHERE子句不矛盾,在查询中是先用WHERE子句限定元组,然后进行分组,最后再用HAVING子句限定分组。黑龙江大学信息与计算中心周建军8.利用空值查询

例:找出尚未确定供应商的订购单。SELECT*FROM订购单WHERE供应商号ISNULL

注意:查询空值时要使用ISNULL,而=NULL是无效的,因为空值不是一个确定的值,所以不能用“=”这样的运算符进行比较。不是空值使用ISNOTNULL,如:

SELECT*FROM订购单WHERE供应商号ISNOTNULL

该命令检索的是已经确定了供应商的订购单信息。黑龙江大学信息与计算中心周建军9.自联接查询

为了说明自联接,我们在职工关系中加入“姓名”和“经理”两个字段:

职工(仓库号,职工号,姓名,工资,经理)其中“职工号”和“经理”两个属性出自同一个值域,同一元组的这两个属性值是“上、下级”关系。

例:根据新的职工关系列出上一级经理及其职员(被其领导)的清单。

SELECTS.姓名,"领导",E.姓名FROM职工S,职工E;

WHERES.职工号=E.经理黑龙江大学信息与计算中心周建军这里实际是通过定义别名形成了两个逻辑关系,一个是经理关系S,一个是职员关系E,结果在关系S和E上的联接实现了我们的检索要求。另外,在SELECT短语中可以有常量,如这里的“领导”。黑龙江大学信息与计算中心周建军10.内外层互相关嵌套查询

嵌套查询不仅可以是外层查询依赖于内层查询的结果,而内层查询与外层查询无关,也可以是内、外层互相关的查询。这时内层查询的条件需要外层查询提供值,而外层查询的条件需要内层查询的结果。黑龙江大学信息与计算中心周建军例如在订购单表中加入一个新字段“总金额”,说明完成该订购单所应付出的总金额数。新的订购单表的结构如下:

订购单(职工号,供应商号,订购单号,订购日期,总金额)

例:列出每个职工经手的具有最高总金额的订购单信息。

SELECTout.职工号,out.供应商号,out.订购单号,out.订购日期,out.总金额;

FROM订购单outWHERE总金额=;

(SELECTMAX(总金额)FROM订购单inner1

WHEREout.职工号=inner1.职工号)

黑龙江大学信息与计算中心周建军在这个查询中,外层查询和内层查询使用同一个关系,给它们分别指定别名out和inner1。外层查询提供out关系中的每个元组的职工号值给内层查询使用;内层查询利用这个职工号值,确定该职工经手的具有最高总金额的订购单的总金额;随后外层查询再根据out关系的同一元组的总金额值与该总金额值进行比较,如果相等,则该元组被选择。黑龙江大学信息与计算中心周建军11.使用量词和谓词的嵌套查询

在嵌套查询中还可以有如下两种形式:

<表达式><比较运算符>[ANY|ALL|SOME](子查询)和

[NOT]EXISTS(子查询)

ANY、ALL和SOME是量词,其中ANY和SOME是同义词,在进行比较运算时只要子查询中有一行能使结果为真,则结果就为真;而ALL则要求子查询中的所有行都使结果为真时,结果才为真。黑龙江大学信息与计算中心周建军

EXISTS是谓词,EXISTS或NOTEXISTS是用来检查在子查询中是否有结果返回(即存在元组或不存在元组)。

例:检索那些仓库中还没有职工的仓库的信息。

这里的查询是没有职工或不存在职工,所以可以使用谓词NOTEXISTS:

SELECT*FROM仓库WHERENOTEXISTS;

(SELECT*FROM职工WHERE仓库号=仓库.仓库号)黑龙江大学信息与计算中心周建军例:检索那些仓库中至少已经有一个职工的仓库的信息。

SELECT*FROM仓库WHEREEXISTS;

(SELECT*FROM职工WHERE仓库号=仓库.仓库号)

注意:

1)这里的内层查询引用了外层查询的表,只有这样使用谓词EXISTS或NOTEXISTS才有意义。所以这类查询也都是内、外层互相关嵌套查询。黑龙江大学信息与计算中心周建军

2)[NOT]EXISTS只是判断子查询中是否有或没有结果返回,它本身并没有任何运算或比较。

例:检索有职工的工资大于或等于WH1仓库中任何一名职工的工资的仓库号。

这个查询可以使用ANY或SOME量词。

SELECTDISTINCT仓库号FROM职工WHERE工资>=ANY;

(SELECT工资FROM职工WHERE仓库号=“WH1”)黑龙江大学信息与计算中心周建军例:检索有职工的工资大于或等于“WH1”仓库中所有职工的工资的仓库号。

这个查询使用ALL量词。

SELECTDISTINCT仓库号FROM

职工WHERE工资>=ALL

(SELECT工资FROM职工WHERE仓库号=“WH1”)黑龙江大学信息与计算中心周建军12.超联接查询

SQL还支持更广泛的关系联接运算,我们称之为超联接。原来的联接是只有满足联接条件,相应的结果才会出现在结果表中;而超联接是首先保证一个表中满足条件的元组都在结果表中,然后将满足联接条件的元组与另一个表的元组进行联接,不满足联接条件的则将应来自另一表的属性值置为空值。黑龙江大学信息与计算中心周建军

VisualFoxPro中支持各种SQLSELECT联接运算的语法格式如下:

SELECT……

FROMTableINNER|LEFT|RIGHT|FULLJOINTable

ONJoinCondition

WHERE……

其中:

·INNERJOIN等价于JOIN,为普通的联接;黑龙江大学信息与计算中心周建军·LEFTJOIN为左联接,即第一个表中的记录不管是否满足联接条件将都在目标表或查询结果中出现,第二个表中不满足联接条件的记录的对应部分为NULL;

·RIGHTJOIN为右联接,即第二个表中的记录不管是否满足联接条件将都在目标表或查询结果中出现,第一个表中不满足联接条件的记录的对应部分为NULL;黑龙江大学信息与计算中心周建军·FULLJOIN可以称为全联接,即两个表中的记录不管是否满足联接条件将都在目标表或查询结果中出现,不满足联接条件的记录的对应部分为NULL;

·ONJoinCondition指定联接条件。

从以上格式可以看出,它的联接条件在ON短语中给出(而不在WHERE短语中),联接类型在FROM短语中给出。黑龙江大学信息与计算中心周建军例:普通联接,即只有满足联接条件的记录才出现在查询结果中。

SELECT仓库.仓库号,城市,面积,职工号,工资;

FROM仓库JOIN职工;

ON

仓库.仓库号=职工.仓库号

例:左联接,即除满足联接条件的记录出现在查询结果中外,第一个表中不满足联接条件的记录也出现在查询结果中。黑龙江大学信息与计算中心周建军

SELECT仓库.仓库号,城市,面积,职工号,工资;

FROM仓库LEFTJOIN职工;

ON仓库.仓库号=职工.仓库号

例:右联接,即除满足联接条件的记录出现在查询结果中外,第二个表中不满足联接条件的记录也出现在查询结果中。

SELECT仓库.仓库号,城市,面积,职工号,工资;

FROM仓库RIGHTJOIN职工;

ON仓库.仓库号=职工.仓库号黑龙江大学信息与计算中心周建军例:全联接,即除满足联接条件的记录出现在查询结果中外,两个表中不满足联接条件的记录也出现在查询结果中。

SELECT仓库.仓库号,城市,面积,职工号,工资;

FROM仓库FULLJOIN职工;

ON仓库.仓库号=职工.仓库号

黑龙江大学信息与计算中心周建军13.集合的并运算

SQL支持集合的并(UNION)运算,即可以将两个SELECT语句的查询结果通过并运算合并成一个查询结果。为了进行并运算,要求这样的两个查询结果具有相同的字段个数,并且对应字段的值要出自同一个值域(相同的数据类型和取值范围)。

例:如下语句的结果是城市为北京和上海的仓库信息:

SELECT*FROM仓库WHERE城市="北京";

UNIONSELECT*FROM仓库WHERE城市="上海"黑龙江大学信息与计算中心周建军14.VisualFoxProSQLSELECT的几个特殊选项

1)只显示前几项记录

查询时可以不显示全部满足条件的记录,而只显示前几个记录,这时TOPnExpr[PERCENT]短语非常有用,其中nExpr是数字表达式,当不使用PERCENT时,nExpr是1至32767间的整数,说明显示前几个记录;当使用PERCENT时,nExpr是0.01至99.99间的实数,说明黑龙江大学信息与计算中心周建军显示结果中前百分之几的记录。需要注意的是TOP短语要与ORDERBY短语同时使用才有效。

例:显示工资最高的三位职工的信息,即按降序排序、只显示前3条记录。

SELECT*TOP3FROM职工ORDERBY工资DESC

例:显示工资最低的那30%职工的信息,即按升序排序、只显示前30%的记录。黑龙江大学信息与计算中心周建军SELECT*TOP30PERCENTFROM职工ORDERBY工资

2)将查询结果存放到数组中

可以使用INTOARRAYArrayName短语将查询结果存放到数组中,ArrayName可以是任意的数组变量名。一般将存放查询结果的数组作为二维数组来使用,每行一条记录,每列对应于查询结果的一列。查询结果存放在数组中,可以非常方便地在程序中使用。黑龙江大学信息与计算中心周建军例:如下语句将查询到的职工信息存放在数组tmp中:

SELECT*FROM职工INTOARRAYtmp

tmp(1,1)存放的是第一条记录的仓库号字段值,tmp(1,3)存放的是第一条记录的工资字段值等。

3)将查询结果存放在临时文件中

使用短语INTOCURSORCursorName可以将查询结果存放到临时数据库文件中,其中CursorName是临时文件名。黑龙江大学信息与计算中心周建军该短语产生的临时文件是一个只读的DBF文件,当查询结束后该临时文件是当前文件,可以像一般的DBF文件一样使用(当然是只读),当关闭文件时该文件将自动删除。

例:如下语句将查询到的职工信息存放在临时DBF文件tmp中:

SELECT*FROM职工INTOCURSORtmp黑龙江大学信息与计算中心周建军一般利用INTOCURSOR短语存放一些临时结果,比如一些复杂的汇总可能需要分阶段完成,需要根据几个中间结果再汇总等,这时利用该短语存放中间结果就非常合适,当使用完后这些临时文件会自动删除。

4)将查询结果存放到永久表中

使用短语INTODBF|TABLETableName可以将查询结果存放到永久表中(DBF文件)。黑龙江大学信息与计算中心周建军例:将查询结果存放在表highsal中可以使用如下语句:

SELECT*TOP3FROM职工INTOTABLEhighsalORDERBY工资DESC

INTODBF和INTOTABLE是等价的。

5)将查询结果存放到文本文件中

使用短语TOFILEFileName[ADDITIVE]可以将查询结果存放到文本文件中,其中FileName给出了文本文件名(默认扩展名是TXT)。黑龙江大学信息与计算中心周建军如果使用ADDITIVE,结果将追加在原文件的尾部,否则将覆盖原有文件。

例:如下语句将查询结果以文本的形式存储在文本文件tmp.txt中:

SELECT*TOP3FROM职工TOFILEtmpORDERBY工资DESC

注意:如果TO短语和INTO短语同时使用,则TO短语将会被忽略。黑龙江大学信息与计算中心周建军

6)将查询结果直接输出到打印机

使用短语TOPRINTER[PROMPT]可以直接将查询结果输出到打印机,如果使用了PROMPT选项,在开始打印之前会打开打印机设置对话框。黑龙江大学信息与计算中心周建军第三节

操作功能

SQL的操作功能是指对数据库中数据的操作功能,主要包括数据的插入、更新和删除三个方面的内容。

1.插入操作

VisualFoxPro支持两种SQL插入命令的格式,可以说第一种格式是标准格式,第二种格式是VisualFoxPro的特殊格式。黑龙江大学信息与计算中心周建军第一种格式是:

INSERTINTOdbf_name[(fnamel[,fname2,...])]

VALUES(eExpression1[,eExpression2,...])

第二种格式是:

INSERTINTOdbf_nameFROMARRAYArrayName|FROMMEMVAR

其中:

·INSERTINTOdbf_name说明向由dbf_name指定的表中插入记录;黑龙江大学信息与计算中心周建军

·当插入的不是完整的记录时,可以用fname1,fname2,...指定字段:

·VALUES(eExpression1[,eExpression2,...])给出具体的记录值;

·FROMARRAYArrayName说明从指定的数组中插入记录值;

·FROMMEMVAR说明根据同名的内存变量来插入记录值,如果同名的变量不存在,那么相应的字段为默认值或空值。

例:如下命令往订购单关系中插入一个元组:黑龙江大学信息与计算中心周建军INSERTINTO订购单VALUES(“E7”,“S4”,“OR01”,{^2001-05-25})其中“{^2001-05-25}”是日期型字段“订购日期”的值,请注意这里日期型数据的表示方式。

对以上的情况,假设供应商尚未确定,那么只能先插入“职工号”和“订购单号”两个属性的值,这时可用如下命令:

INSERTINTO订购单(职工号,订购单号)VALUES(“E7”,“OR01”)这时另外两个属性的值为空值。黑龙江大学信息与计算中心周建军例:

假设在数组arr1中有一组订购单记录,则可以用如下命令把它们插入到表中:

INSERTINTO订购单FROMARRAYarr1黑龙江大学信息与计算中心周建军2.更新操作

SQL的数据更新命令格式如下:

UPDATETableName

SETColumn_Name1=eExpression1[,Column_Name2=eExpression2...]

WHERECondition

一般使用WHERE子句指定条件,以更新满足条件的记录的字段值,并且一次可以更新多个字段;如果不使用WHERE子句,则更新全部记录。黑龙江大学信息与计算中心周建军例:给WH1仓库的职工提高10%的工资。

UPDATE职工SET工资=工资*1.10;

WHERE仓库号="WH1"黑龙江大学信息与计算中心周建军3.删除操作

SQL从表中删除数据的命令格式如下:

DELETEFROMTableName[WHERECondition]

FROM指定从哪个表中删除数据,WHERE指定被删除的记录所满足的条件,如果不使用WHERE子句,则删除该表中的全部记录。

例:删除仓库关系中仓库号是WH2的元组。

DELETEFROM仓库WHERE仓库号="WH2"黑龙江大学信息与计算中心周建军注意:在VisualFoxPro中,SQLDELETE命令同样是逻辑删除记录,如果要物理删除记录需要继续使用PACK命令。黑龙江大学信息与计算中心周建军第四节

定义功能1.表的定义

在VisualFoxPro中可以使用SQL的CREATETABLE命令建立表,并且完全可以完成表设计器的功能。CREATETABLE命令除了建立表的基本功能外,它还包括满足实体完整性的主关键字(主索引)PRIMARYKEY、定义域完整性的CHECK约束及出错提示信息ERROR、定义默认值的DEFAULT等关键词,另外还有描述表之间联系的FOREIGNKEY和REFERENCES关键词。黑龙江大学信息与计算中心周建军使用CREATETABLE命令建立数据库表时一定要先打开数据库。

例:用SQLCREATE命令建立仓库表。

CREATETABLE仓库(

仓库号C(5)PRIMARYKEY,

城市C(10),

面积ICHECK(面积>0)ERROR"面积应该大于0!")黑龙江大学信息与计算中心周建军这里用的TABLE和DBF是等价的,前者是标准SQL的关键词,后者是VisualFoxPro的关键词。如上命令在当前打开的数据库中建立了仓库表,其中仓库号是主关键字(主索引,用PRIMARYKEY说明),用CHECK为面积字段值说明了有效性规则(面积>0),用ERROR为该有效性规则说明了出错提示信息“面积应该大于0!”。黑龙江大学信息与计算中心周建军例:用SQLCREATE命令建立职工表。

CREATETABLE职工(仓库号C(5),

职工号C(5)PRIMARYKEY,

工资ICHECK(工资>=1000AND工资<=5000)

ERROR“工资值的范围在1000-5000!”DEFAULT1200,

FOREIGNKEY仓库号TAG仓库号REFERENCES仓库)黑龙江大学信息与计算中心周建军如上命令除了用PRIMARYKEY说明了主关键字,用CHECK说明了有效性规则,用ERROR说明了出错信息外,还用DEFAULT为工资字段值说明了默认值(1200)。另外还用短语:

FOREIGNKEY仓库号TAG仓库号REFERENCES仓库说明了职工表与仓库表的联系,“FOREIGNKEY仓库号”将使该表在仓库号字段上建立一个普通索引,同时说明该字段是联接字段,通过引用仓库表的主索引“仓库号”(TAG仓库号REFERENCES仓库)与仓库建立联系。黑龙江大学信息与计算中心周建军注意:

1)用SQLCREATE命令新建的表自动在最低可用工作区打开,并可以通过别名引用。新表的打开方式为独占方式(忽略SETEXCLUSIVE的当前设置);

2)如果建立自由表(当前没有打开的数据库或使用了FREE),则很多选项在命令中不能使用,如NAME、CHECK、DEFAULT、FOREIGNKEY、PRIMARYKEY和REFERENCES等。黑龙江大学信息与计算中心周建军2.表的删除

删除表的SQL命令是:

DROPTABLEtable_name

DROPTABLE

直接从磁盘上删除tablename所对应的DBF文件。如果tablename是数据库中的表并且相应的数据库是当前数据库,则从数据库中删除了表;否则虽然从磁盘上删除了DBF文件,但是在数据库(记录在DBC文件)中的信息却没有删除,此后会出现错误提示。所以要删除数据库中的表时,最好在数据库中进行操作(即数据库是当前打开的数据库)。黑龙江大学信息与计算中心周建军3.表结构的修改

修改表结构的命令是ALTERTABLE,该命令有三种格式。

第一种格式用来添加(ADD)新的字段或修改(ALTE

温馨提示

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

最新文档

评论

0/150

提交评论