vf数据库讲义.docx

上传人:b****3 文档编号:3939646 上传时间:2022-11-26 格式:DOCX 页数:18 大小:25.98KB
下载 相关 举报
vf数据库讲义.docx_第1页
第1页 / 共18页
vf数据库讲义.docx_第2页
第2页 / 共18页
vf数据库讲义.docx_第3页
第3页 / 共18页
vf数据库讲义.docx_第4页
第4页 / 共18页
vf数据库讲义.docx_第5页
第5页 / 共18页
点击查看更多>>
下载资源
资源描述

vf数据库讲义.docx

《vf数据库讲义.docx》由会员分享,可在线阅读,更多相关《vf数据库讲义.docx(18页珍藏版)》请在冰豆网上搜索。

vf数据库讲义.docx

vf数据库讲义

第三章数据库

一、数据库(.DBC)

1.创建数据库:

CREATEDATABASE数据库名

2.打开数据库:

OPENDATABASE数据库名

3.打开数据库设计器:

MODIFYDATABASE数据库名

4.修改数据库:

MODIFYDATABASE数据库名

5.删除数据库:

DELETEDATABASE数据库名

6.关闭数据库:

CLOSEDATABASE

二、表(.DBF)(数据库表和自由表)

数据库表:

属于某个数据库的表称为数据库表。

数据库打开的状态下创建的表为数据库表

自由表:

不属于任何数据库的表称为自由表。

1.创建表:

CREATE表名

◆字段名:

数据库表最多128个字符,自由表最多10个字符。

以字母或汉字开头,不能有空格。

◆字段名类型:

字符型(C),数值型(N),货币型(Y),日期型(D,8个字节),日期时间型(T,8个字节),逻辑型(L,1个字节),浮点型(F),整型(I,4个字节),备注型(M,4个字节,指向文件的指针,存放个人简历等文本),通用型(G,4个字节,存放电子表格等)

2.打开表:

USE表名

3.打开表设计器:

MODIFYSTRUCTURE

4.添加表:

ADDTABLE表名

5.移去表:

REMOVETABLE表名

6.删除表:

DROPTABLE表名

7.关闭表:

USE

三、表结构的操作

1.增加或删除字段:

2.修改字段类型和宽度:

3.如果只读状态,命令CLOSEALL

四、表内容的操作

1.浏览记录:

BROW

LIST

2.增加记录:

APPEND(表尾追加)

INSERT(插入)

3.修改记录:

REPLACE字段名WITH表达式FOR条件

例如:

USE学生

REPLACE年龄WITH年龄+10FOR学号=”001”

REPLACE年龄WITH20FOR学号=”002”

REPLACE性别WITH“女”FOR姓名=”小王”

REPLACEALL年龄WITH年龄+10

4.删除记录:

(1)逻辑删除:

(置删除标记)DELETEFOR条件(如果不用FOR指定条件,则删除当前一条记录。

USE学生

DELETEFOR年龄<20

(2)恢复逻辑删除:

RECALLFOR条件(对逻辑删除的记录可以恢复)

USE学生

RECALLFOR年龄<20

(3)物理删除:

PACK(在逻辑删除的基础上彻底删除,不可恢复)

USE学生

DELETEFOR学号=”001”

PACK

(4)清空记录:

ZAP(清空表中全部记录,表结构仍然存在)

5.显示记录:

DISPLAY(显示当前一条记录)

LIST(显示全部记录)

DISPLAYALL(显示所有记录)

DISPLAYFOR性别=”女”

LISTFOR性别=”女”

6.记录指针定位:

(1)绝对指针定位:

GOTOP

GOBOTTOM

GO2

(2)移动指针:

SKIP(默认向下移动一条)

SKIP2

SKIP-1

(3)条件定位:

LOCATEFOR将指针定位到满足条件的第一条记录上,如果没有满足条件的记录,则指向文件结束位置,即文件尾;继续查找使用CONTINUE命令。

例如:

LOCATEFOR性别=”男”

DISPLAY

CONTINUE

索引(INDEX)

1.索引的类型

(1)主索引(PRIMARYKEY):

主关键字

a)保证记录的唯一性;b)不允许出现重复值和空值;

c)一个表只能创建一个主索引;d)只有数据库表可以创建主索引。

(2)候选索引(CANDIDATE)

a))保证记录的唯一性;b)不允许出现重复值和空值;

c)一个表可以创建多个候选索引;d)数据库表和自由表都可以创建候选索引。

(3)普通索引(REGULAR)

(4)惟一索引(UNIQUE)

2.建立索引

(1)表设计器创建

(2)命令创建:

USE学生

INDEXON学号TAG学号

INDEXON学号TAG学号CANDIDATE

(3)删除索引:

DELETETAG学号

DELETETAGALL

数据完整性(数据库表)

1.实体完整性:

用主索引或候选索引来保证记录的唯一性,称为实体完整性。

2.域完整性:

通过定义字段数据类型、字段宽度和字段有效性规则等实现数据的域完整性。

例如:

性别

规则:

性别=”男”OR性别=”女”(性别$”男女”)

信息:

”性别必须是男或女”

默认值:

”男”

例如:

成绩

规则:

成绩>=60AND成绩<=100

信息:

”成绩在60-100之间”

默认值:

80

注意:

规则是逻辑表达式,信息是字符表达式,默认值与字段类型一致。

3.参照完整性:

父表和子表之间的相互制约规则称为参照完整性。

更新:

级联,限制,忽略

删除:

级联,限制,忽略

插入:

限制,忽略

级联:

限制:

忽略:

工作区:

最小工作区号是1,最大32767,0是未使用的工作区

第四章SQL语言(结构化查询语言STRUCTUREDQUERYLANGUAGE)

功能:

数据查询:

SELECT

数据操纵:

INSERT,UPDATE,DELETE

数据定义:

CREATE,ALTER,DROP

一、查询功能(核心SELECT)

基本结构:

SELECT结果FROM表WHERE条件

◆SELECT说明要查询的数据

◆FROM说明要查询的数据来自哪些表

◆WHERE说明查询条件

◆GROUPBY对结果进行分组

◆HAVING短语必须跟随GROUPBY使用,用来限定分组的条件

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

仓库:

职工:

仓库号城市面积仓库号职工号工资

WH1北京370WH2E11220

WH2上海500WH1E31210

WH3广州200WH2E41250

WH4武汉400WH3E61230

WH1E71250

订购单:

供应商:

职工号供应商号订购单号订购日期供应商号供应商名地址

E3S7OR672001/06/23S3振华电子厂西安

E1S4OR732001/07/08S4华通电子公司北京

E7S4OR762001/05/25S6607厂郑州

E6NULLOR77NULLS7爱华电子厂北京

E3S4OR792001/06/13

E1NULLOR80NULL

E3NULLOR90NULL

E3S3OR912001/07/13

1.简单查询(一个表)

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

结构:

SELECT结果FROM表WHERE条件

1查找城市:

SELECT城市FROM仓库

查找城市和面积:

SELECT城市,面积FROM仓库

查找所有信息:

SELECT*FROM仓库

该命令是从仓库中检索出全部数据。

其中“*”是通配符,表示所有字段。

查找工资:

SELECT工资FROM职工

清除重复记录:

SELECTDISTINCT工资FROM职工

②条件:

检索仓库WH2的所有工资

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

检索工资多于1230的职工信息

SELECT*FROM职工WHERE工资>1230(如果工资类型错误,则操作类型不匹配)

检索工资大于1220且工资小于1250的职工信息

SELECT*FROM职工WHERE工资>1220AND工资<1250

3与函数结合:

检索仓库号以W开头的仓库信息

SELECT*FROM仓库WHERELEFT(仓库号,1)=”W”

检索仓库号尾数为2的仓库信息

SELECT*FROM仓库WHERESUBSTR(仓库号,3,1)=”2”

检索在2001年的订购单信息

SELECT*FROM订购单WHEREYEAR(订购日期)=2001

4多个条件:

检索在WH1或WH2工作且工资小于1250的职工号

SELECT职工号FROM职工WHERE(仓库号=”WH1”OR仓库号=”WH2”)AND工资<1250

或者:

SELECT职工号FROM职工WHERE仓库号IN(“WH1”,”WH2”)AND工资<1250

2.连接查询(两个或多个表)

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

结构:

SELECT结果FROM表1,表2WHERE表1.相同字段=表2.相同字段AND条件

1检索工资大于1230的职工所在的城市及工资

这里所要求检索的信息分别出自职工和仓库两个表,这样的检索肯定是基于多个关系的,这样的查询一般用连接查询来实现。

SELECT城市,工资FROM仓库,职工WHERE仓库.仓库号=职工.仓库号AND工资>1230

SELECT仓库.仓库号,城市,工资FROM仓库,职工WHERE仓库.仓库号=职工.仓库号AND

工资>1230

注意:

(1)这里,仓库.仓库号=职工.仓库号是连接条件

(2)如果字段不唯一(两个表中有相同字段),一定要限定表名。

例如:

仓库.仓库号,“.”是从属关系,前面是表名,后面是字段名。

(3)换行用分号“;”续行

②查找工作在面积大于400的仓库的职工号和所在的城市

SELECT职工号,城市FROM仓库,职工WHERE仓库.仓库号=职工.仓库号AND面积>400

③多个表:

SELECT*FROM仓库,职工,订购单WHERE仓库.仓库号=职工.仓库号AND职工.职工号=订购单.职工号AND订购单.供应商号=供应商.供应商号AND工资>1200

3.嵌套查询

①一个表

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

结构:

SELECT结果FROM表WHERE字段=/>/<(SELECT字段FROM表WHERE条件)

查找工资大于平均工资的职工信息

SELECT*FROM职工WHERE工资>(SELECTAVG(工资)FROM职工)

查找和职工E4挣同样工资的职工

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

②两个表

结构:

SELECT结果FROM表1WHERE相同字段IN(SELECT相同字段FROM表2WHERE条件)

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

连接:

SELECT城市FROM仓库,职工WHERE仓库.仓库号=职工.仓库号AND工资=1250

嵌套:

SELECT城市FROM仓库WHERE仓库号IN(SELECT仓库号FROM职工WHERE工资=1250)

查找在上海工作的职工的工资

SELECT工资FROM职工WHERE仓库号IN(SELECT职工号FROM仓库WHERE城市=”上海”)

查找没有职工的仓库信息(否定)

SELECT*FROM仓库WHERE仓库号NOTIN(SELECT仓库号FROM职工)

4.特殊运算符

①BETWEEN。

AND

检索工资在1220元到1240元的职工信息

这个查询的条件是值在什么范围之内,显然可以使用BETWEEN…AND

SELECT*FROM职工WHERE工资BETWEEN1220AND1250

等价于:

SELECT*FROM职工WHERE工资>=1220AND工资<=1250

否定:

SELECT*FROM职工WHERE工资NOTBETWEEN1220AND1250

等同于:

SELECT*FROM职工WHERE工资<1220OR工资>1250

②LIKE运算符通配符%代表0个或多个字符,_代表一个字符

查找职工号以E开头的信息

SELECT*FROM职工WHERE职工号LIKE“E%”

SELECT*FROM职工WHERE仓库号LIKE“%2”

检索全部公司的信息

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

检索供应商名中带有“电“的信息

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

③NOT

检索地址不是北京的供应商信息

SELECT*FROM供应商WHERE地址!

=”北京”

SELECT*FROM供应商WHERENOT地址=”北京”

5.排序ORDERBY

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

单项排序:

SELECT*FROM仓库ORDERBY面积(默认升序)

SELECT*FROM职工ORDERBY工资DESC(降序)

多项排序:

SELECT*FROM职工ORDERBY工资,仓库号DESC(先按工资升序,再按仓库号降序)

SELECT*FROM职工ORDERBY仓库号DESC,工资,职工号

6.简单的计算查询

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

用于计算检索的函数有:

COUNT():

计数;SUM():

求和;AVG():

平均;MAX():

最大值;MIN():

最小值

求所有职工的平均工资

SELECTAVG(工资)FROM职工

虚字段的用法:

AS,在结果中会出现虚字段一项

SELECTAVG(工资)AS平均工资FROM职工

求所有职工的工资总和

SELECTSUM(工资)FROM职工

求WH2仓库的最高工资

SELECTMAX(工资)FROM职工WHERE仓库号=”WH2”

求WH1仓库的工资总和

SELECTSUM(工资)FROM职工WHERE仓库号=”WH1”

求职工表中的职工个数

SELECTCOUNT(职工号)FROM职工

求职工表中的仓库个数

SELECTCOUNT(DISTINCT仓库号)FROM职工

求所有元组个数

SELECTCOUNT(*)FROM职工

7.分组GROUPBY(每个、各组、按、以。

为单位)

利用GROUPBY子句进行分组计算查询使用得非常广泛。

可以按一列或多列分组,还可以用HAVING进一步限定分组的条件。

①求每个仓库的职工信息

SELECT*FROM职工GROUPBY仓库号

注意:

分组后各组取最后一条结果

②求每个仓库的职工的平均工资

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

注意:

按照什么字段分组,结果中要有分组的字段。

③GROUPBY子句与WHERE子句的先后顺序

SELECT*FROM职工WHERE仓库号=”WH1”GROUPBY仓库号

注意:

GROUPBY子句一般跟在WHERE子句之后,没有WHERE子句时跟在FROM之后。

在分组查询时,有时要求分组满足某个条件时才检索,这时可以用HAVING子句来限定分组。

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

(对分组进行限定用HAVING子句)

SELECT仓库号,AVG(工资)FROM职工GROUPBY仓库号HAVINGCOUNT(职工号)>=2

注意:

对分组进行进一步限定用HAVING子句,HAVING字句总是跟着GROUPBY子句之后,不可以单独使用。

HAVING子句和WHERE子句不矛盾,在查询中先用WHERE,再用GROUPBY,最后用HAVING

⑤分组GROUPBY与排序ORDERBY的顺序

SELECT*FROM职工GROUPBY仓库号ORDERBY工资DESC

注意:

先分组后排序

⑥虚字段的用法:

检索每个仓库中的平均工资,并且按平均工资降序排列

方法一:

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

方法二:

SELECT仓库号,AVG(工资)AS平均工资FROM职工GROUPBY仓库号ORDERBY平均工资

注意:

函数不能用来直接排序、分组或比较,必须用虚字段,2表示结果中第二个字段,AS虚字段后查询结果中会出现平均工资这个字段,因此可以识别。

8.空值查询(NULL)

找出尚未确定供应商的订购单。

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

注意:

查询空值时要使用ISNULL,而=NULL是无效的,因为空值不是一个确定的值,所以不能用=。

不是空值使用ISNOTNULL

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

9.别名查询

SELECT职工号,面积FROM职工Z,仓库CWHEREZ.仓库号=C.仓库号

10.量词和谓词的嵌套查询

量词:

ANY、SOME、ALL,其中ANY和SOME是同义词,在比较运算时只要子查询中有一行能使结果为真,则结果就为真;而ALL则要求子查询中的所有行都使结果为真时,结果才为真。

谓词:

EXISTS、NOTEXISTS是用来检查在子查询中是否有结果返回。

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

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

SELECT仓库号FROM职工WHERE工资>=ANY(SELECT工资FROM职工WHERE仓库号=”WH1”)

等价于:

SELECT仓库号FROM职工WHERE工资>=(SELECTMIN(工资)FROM职工WHERE仓库号=”WH1”)

②检索有职工的工资大于或等于WH1仓库中所有职工的工资的仓库号。

这个查询可以使用ALL量词

SELECT仓库号FROM职工WHERE工资>=ALL(SELECT工资FROM职工WHERE仓库号=”WH1”)

等价于:

SELECT仓库号FROM职工WHERE工资>=(SELECTMAX(工资)FROM职工WHERE仓库号=”WH1”)

③检索哪些仓库中还没有职工的仓库信息。

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

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

等价于:

SELECT*FROM仓库WHERE仓库号NOTIN(SELECT仓库号FROM职工)

④检索哪些仓库中至少已经有一个职工的仓库信息。

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

等价于:

SELECT*FROM仓库WHERE仓库号IN(SELECT仓库号FROM职工)

注意:

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

11.超连接查询

SQL还支持更广泛的关系连接运算,我们称之为超连接。

原来的连接是只有满足连接条件,相应的结果才会出现在结果表中;而超连接是首先保证一个表中满足条件的元组都出现在结果中,然后将满足条件的元组与另一个表的元组进行连接,不满足连接条件的则将用来自另一表的属性值置为空值。

INNERJOIN等价于JOIN,为内连接或普通连接。

LEFTJOIN为左连接,即第一个表中的记录不管是否满足连接条件将都在查询结果中出现,第二个表中不满足连接条件的记录对应为NULL。

RIGHJION为右连接,即第二个表中的记录不管是否满足连接条件将都在查询结果中出现,第一个表中不满足连接条件的记录对应为NULL。

FULLJOIN为全连接,即两个表中的记录不管是否满足连接条件都将出现在结果中,不满足连接条件的记录对应为NULL。

1普通连接,即只有满足连接条件的记录才出现在结果中。

SELECT*FROM仓库JOIN职工ON仓库.仓库号=职工.仓库号

等价于:

SELECT*FROM仓库INNERJOIN职工ON仓库.仓库号=职工.仓库号

SELECT*FROM仓库,职工WHERE仓库.仓库号=职工.仓库号

2左连接,即除了满足连接条件的记录出现在结果中外,第一个表中不满足连接条件的记录也出现在结果中。

SELECT*FROM仓库LEFTJOIN职工ON仓库.仓库号=职工.仓库号

③右连接,即除了满足连接条件的记录出现在结果中外,第二个表中不满足连接条件的记录也出现在结果中。

SELECT*FROM仓库RIGHTJOIN职工ON仓库.仓库号=职工.仓库号

④全连接,即除了满足连接条件的记录出现在结果中外,两个表中不满足连接条件的记录都出现在结果中。

SELECT*FROM仓库FULLJOIN职工ON仓库.仓库号=职工.仓库号

注意:

JOIN连接格式在连接多个表时的书写方法要特别注意。

在这种格式中,JOIN和ON的顺序是很重要的,特别要注意JOIN的顺序要和ON的顺序(相应的连接条件)正好相反。

例如下面是一个基于四个关系的连接查询。

SELECT*FROM供应商JOIN订购单JOIN职工JOIN仓库ON职工.仓库号=仓库.仓库号ON订购单.职工号=职工.职工号ON供应商.供应商号=订购单.供应商号

12.集合的并运算(UNION)

SQL支持集合的并运算,运算符UNION,即可以将两个SELECT语句的查询结果通过并运算合并成一个查询结果。

为了进行并运算,要求这样的两个查询结果具有相同的字段个数,并且对应字段的值要出自同一个值域(相同的数据类型和取值范围)。

例:

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

SELECT*FROM仓库WHERE城市=”北京”UNIONSELECT*FROM仓库WHERE城市=”上海”

13.显示部分结果

查询时可以不显示全部满足条件的记录,而只显示前几个记录,这时可以使用TOP短语,TOP短语要与ORDERBY短语同时使用才有效。

例:

显示工资最高的三位职工的信息。

即按降序排序,只显示前3条记录。

SELECT*TOP3FROM职工ORDERBY工资DESC

显示工资最低的30%的职工信息。

即按升序排序,只显示前30%的记录。

SELECT*TOP30%FROM职工ORDERBY工资

14

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 总结汇报 > 工作总结汇报

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1