当前位置:文档之家› 第四章 VF关系数据库标准语言SQL教案

第四章 VF关系数据库标准语言SQL教案

第四章关系数据库标准语言SQLSQL:是结构化查询语言,它包括数据查询、数据定义、数据操纵、数据控制四部分。

但在VF中只绍介查询、定义、操纵三个方面。

SQL命令动词:一、查询功能1、SQL语言的核心是查询。

查询的基本形式:SELECT <字段名/表达式> FROM <表名/视图名> WHERE <条件> 由于表是由行和列组成就像数学中所学的坐标由X轴和Y轴构成,所需确定某个点需要说明X 为多少Y为多少。

而表中需要查询某些数据就必需指明行和列,所以在查询时:1FROM<表名/视图名>:说明查询的数据来自于所需要的表或视图。

若某于多个表时,各个表之间用逗号隔开。

2SELECT<字段名/表达式>:说明从表或视图中所查询结果是哪些字段名或表达式的值(各字段名或表达式之间用逗号隔开)即针对表的列来操作(限定列)。

3WHERE<条件>:说明从表或视图中所查询结果是哪些行即记录针对表的行来操作(限定行)。

关于其它短语的说明:可以在3个区域中创建SELECT命令。

1在命令窗口中;2在VFP程序中3在查询设计器中注:当FROM后面来自于多个表时,必须写连接条件(通常根据表的公共字段作为连接条件),此时在书写公共字段之前必须加以别名限定。

定义表的别名方法见教材P137,超连接的格式见教材P140FROM书写不要写成=>FORM二、查询方法:1、简单查询:例:从职工表中检索所有的工资值。

SELECT 工资FROM 职工表或者SELECT * FROM 职工表如果要去掉重复值用:DISTINCT例:检索哪些仓库有工资多于1260元的职工号SELECT DISTICT 仓库号FROM 职工表WHERE工资>12602、单击的连接查询:类似于多个表的查询,与嵌套查询的区别是要查询的结果呆以出自多个表中。

而嵌套查询的结果是基于一个表中。

例:找出工资多于1250元的职工号与他们所在的城市。

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

SELECT 职工号,城市FORM 职工表,仓库表WHERE(工资>1250)AND (职工表.仓库号=仓库表.仓库号)WHERE 地址!=“北京”SELECT * FROM 仓库表WHERE NOT (地址=“北京”)四、排序:命令格式为:ORDER BY 字段名asc/desc例:按职工表中的工资值升序查找出所有职工信息SELECT * FROM 职工表ORDER BY 工资注:ORDER BY 是对最终结果进行排序,不能在子查询中使用。

五、简单的计算查询:例:查询供应商表中所在地的数目;SELECT COUNT(DISTINCT 地址)FROM供应商表六、分组计算查询:格式为:GROUP BY 字段名[HAVING 条件]例:求每个仓库的职工的平均工资。

SELECT 仓库号,AVG(工资)FROM 职工表GROUP BY 仓库号注:GROUP BY 短语一般跟在WHERE短语后面,若没有WHERE短语,就跟在FROM短语后面。

另外,GROUP BY 还可以根据多个属性进行分组,在分组查询时,有时要求查询满足条件的记录时,可以用HAVING短语来限定分组。

七、利用空值查询:SQL支持NULL,所以也可以利用空值进行查询。

NULL值具有以下特点:1不等价于没有任何值;2与0、空格和空字符串不同3排序时具有最大的优先权。

4可以用于计算和大多数的函数中。

5NULL值不改变变量或字段的数据类型。

6NULL值会影响命令、函数、表达式的执行。

例:查询已经确定供应商号的供应商信息:SELECT * FROM 供应商表WHERE 供应商号IS NOT NULL注:查询空值时使用IS NULL =NULL是无效的,空值是一个不确定的值,所以不能用等于号进行比较。

八、自连接与别名查询:注:别名并不是必需的,在关系的自连接操作中,别名是必不可少的,SQL不仅可以以对多个表进行连接操作,还可以将同一关系与其自身进行连接,这种连接就称为自连接,可以进行自连接的关系,实际上它们之间存在着一种特殊的递归联系。

1内外层相互关联的嵌套查询2使用量词和谓词的查询:3超连接查询:4集合并运算;并运算的格式:UNION [ALL] SELCTE Command一、VFP中SQL SELECT的几个特殊选项;1、显示部分结果:命令格式为:TOP nExpr [PERCENT]Top 30注:(1)符号查询条件的所有记录中,选择指定数量或百分比的记录;(2)TOP子句必须与ORDER BY 子句同时使用;当不使用PERCENT时,nExpr可以是1-32767之间的整数,显示查询结果的前几个记录;(3)当使用PERCENT时,nExpr是0.01-99.99之间的实数,显示查询结果的前百分之几个记录。

例:显示工资最高的4位职工的信息。

SELECT * TOP 4 FROM 职工表ORDER 工资DESC二、将查询结果放到数组中:命令格式为:INTO ARRAY ArrayName(数组变量名)可以将查询结果存放到二维数组中,每行对应一条记录。

例:将查询到的AA信息存放在数组ABC中。

SELECT *FROM AA INTO ARRAY ABC三、将查询结果放到临时文件中:命令格式为:INTO CURSOR CursorName(临时文件名)例:将查询到的职工信息存放到临时文件ABC中。

SELECT * FROM 职工表INTO CURSOR ABC注:INTO CURSOR短语一般用于存放一些临时结果,当使用完后这些临时文件会自动删除。

四、将查询结果存放到永久表中:命令格式为:INTO DBF|TABLE 表名例:将工资最高的那30%的职工信息存放到一个永久表中。

SELECT * TOP 30 PERCENT FROM 职工表INTO TABLE ABC ORDER BY DESC。

五、将查询结果存放到文本文件中:命令格式为:TO FILE 文件名例:将工资最高的那30%的职工信息存放到一文本文件AA中。

SELECT * TOP 30 PERCENT FROM 职工表ORDER BY 工资DESC TO FILE ABC数据的操作SQL数据操作:包括数据插入、更新和删除。

一、插入记录:1、格式1:INSERT INTO <表名>[字段名表] VALUES(<表达式1>,<表达式2>,……)功能:在表中插入新记录:例:在供应商表关系中插入元组:(E4,S3,OR02,2002/01/22,13000)INSERT INTO 供应商表VALUES (“E4”,”S3”,”OR02”,{^2002-01-22},13000)2、格式2:INSERT INTO <表名> FROM ARRAY <数组名>功能:在表中插入新记录,数据来自于指定的数组名二、修改记录:命令格式:UPDATE <表名> SET <被修改的字段名>=<表达式> [WHERE <条件> ] 功能:用新的值去更新表中的记录例:将“选课”表中“学生号”为001号的学生成绩增加10分UPDATE 选课SET 成绩=成绩+10 WHERE 学生号=“001”注:一般使用WHERE子句指定条件,以更新满足条件的一些记录的字段值,并且一次可以更新多个字段;如果不使用WHERE子句,则更新全部记录,UPDATE命令只能用来更新单个表中的记录。

三、删除记录:命令格式:DELETE FROM <表名> [WHERE<条件>]功能:逻辑删除表中记录例:要删除“选课”表中成绩小于60分的记录DELECT FROM 选课WHERE 成绩<60注:FROM指定从哪个表中删除数据,WHERE指定被删除的记录所满足的条件,如果不使用WHERE子句,则删除该表中的全部记录。

带有删除标记的记录在PACK命令之前并不从表中做物理删除,可以用RECALL FOR命令恢复带有删除标记的记录。

注:这三个SQL语句对表操作的命令与第三章VF中对表操作命令的区别。

四、数据定义:表的定义——创建表:命令格式:CREATE TABLE|DBF <表名> (<字段名> <类型>(<字段宽度>), ……)说明:1理解数据的说明;2理解创建方法;3撑握如下短语:PRIMARY KEY(建立主索引);CHECK(设置规则);ERROR(设置错误信息);DEFAULT (默认值);FREE(建立自由表;UNIQUE(建立候选索引);NULL或NOT NULL(是否允许为NULL值)等例:用命令创建学生表。

该表分别由字段学生号、姓名、性别、年龄构成,并且以学生为主索引,为年龄字段指定了有效性规则(年龄≥19)和显示的错误信息;CREATE TABLE 学生(学生号N(3)PRIMARY KEY,姓名C(3),性别L(1),年龄N(2)CHECK(年龄>=19)ERROR“年龄必须满19岁”)五、表的删除:命令格式为:DROP TABLE <表名>功能:从磁盘上删除指定表文件注:执行了DROP TABLE语句之后,所有与被删除表有关的主索引、默认值、验证规则都将丢失。

当前数据库中的其它表若与被删除的表有关联,这些规则和关系也都将无效。

六、表结构的修改:命令格式为:ALTER TABLE 有三种格式:注:第三种命令格式是对前两种命令格式的补充,可以更改字段名,也可以删除字段还可以定义,修改和删除表级别的有效性规则。

1.增加字段Alter table 表名 add <字段名类型(宽度)> [check 表达式 [error ’出错信息’]] Alter table 表名 add <字段名类型(宽度)> [default 默认值]2.给字段设置有效性规则Alter table 表名 alter字段名 set check 表达式 [error ’出错信息’]Alter table 表名 alter字段名 set default默认值3.修改字段名或者删除字段名Alter table 表名 rename column 原字段名 to 要修改的字段名Alter table 表名 drop column 要删除的字段名例:为“选课”表的字段“成绩”更改字段名为“选课成绩”ALTER TABLE 选课RENAME 成绩TO 选课成绩例:删除“成绩”字段ALTER TABLE 选课DROP COLUMN 成绩例:将“选课”表的学生号和选课号设置为候选索引,索引名为SSALTER TABLE 选课ADD UNIQUE 学生号+选课号TAG SS例:删除候选索引SSALTER TABLE 选课DROP UNIQUE TAG SS。

相关主题