5.1 SQL概述
考点1 概述
1概念 SQL是结构化查询语言Structured Query Language的缩写。它包括数据查询、数据定义、数据操纵和数据控制4部分。Visual FoxPro在SQL方面支持数据定义、数据查询和数据操纵功能。另外,由于Visual FoxPro自身在安全控制方面的缺陷,所以它没有提供数据控制功能。 2 SQL语言的特点 (1)一种一体化的语言。 (2)一种高度非过程化的语言。 (3)语言非常简洁。 (4)可以直接以命令方式交互使用,也可以以程序方式使用。
5.2 查询功能
SQL的核心是查询,基本形式由SELECT-FROM-WHERE查询块组成,多个查询块可嵌套执行,如表5-1所示。
表5-1 SQL命令动词
考点2 简单查询
1简单查询 简单查询是由SELECT和FROM短语构成的无条件查询,或由SELECT,FROM和WHERE短语构成的条件查询。 2简单的连接查询 连接是关系的基本操作之一,连接查询是一种基于多个关系的查询。 3嵌套查询 嵌套查询所要求的结果出自一个关系,但关系的条件却涉及多个关系。其内层基本上也是一个SELECT-FROM-WHERE查询语句。这种简单嵌套查询,可使用谓词IN或NOT IN来判断在外层的查询条件中是否包含内层查询的结果。
考点3 特殊运算符号
1 BETWEEN…AND… 含义:该查询的条件是在……范围之内,相当于用AND连接的一个逻辑表达式。 2 LIKE 含义:它是一个字符串匹配运算符,与之搭配使用的通配符包括“*”和“?”。
考点4 排序
使用SQL SELECT可以将查询结果进行排序,排序的短语是ORDER BY。 格式:ORDER BY Order_Item[ASCIDESC][,Order_Item[ASC|DESC]…] 说明:可以按升序(ASC)或降序(DESC)排序,允许按一列或多列排序。
考点5 计算查询
1简单的计算查询 SQL不仅具有一般的检索能力,而且还有计算方式的检索,用于计算检索的函数有:COUNT(计数)、SUM(求和)、AVG(计算平均值)、MAX(求最大值)及MIN(求最小值)。 2分组与计算查询 在SQL SELECT中可以利用GROUP BY子句进行分组计算查询。 格式:GROUP BY GroupColumn[,GroupColumn…][HAVING FilterCondition] 说明:可以按一列或多列分组,还可以用HAVING子句进一步限定分组的条件。它必须跟在GROUP BY子句之后,不可单独使用,与WHERE子句并不矛盾。
考点6 别名和自连接查询
(1)SQL语句允许在二OM短语中为关系定义别名,格式为:一 <关系名><别名> (2) SQL不仅可以对多个关系进行连接操作,也可以将同一关系与其自身进行连接,这种连接就称为自连接。在关系的自连接操作中,别名是必不可少的。
考点7 使用量词和谓词的查询
与嵌套查询或子查询有关的运算符,除了IN和NOT IN运算符外,还有两类与子查询有关的运算符,它们有以下两种格式。 (1)<表达式><比较运算符>[ANY I ALL | SOME](子查询) (2)[NOT]EXISTS(子查询) EXISTS是谓词,EXISTS或NOT EXISTS是用来检查在子查询中是否有结果返回,即存在元组或不存在元组。其本身并没有进行任何运算或比较,只用来返回子查询结果。
考点8 超链接查询
(1)在新的SQL标准中支持两个新的关系连接运算符,这两个新的连接运算是左连接(*=)和右连接=*):首先保证一个表中满足条件的元组都在结果表中,然后将满足连接条件的元组与另一个表的元组进行连接,不满足连接条件的则应将来自另一个表的属性值置为空值。在一般SQL中超链接运算符是“*=”(左连接)和“=*”(右连接)。 (2)在Visual FoxPro中不支持超链接运算符“*=”和“=*”,Visual FoxPro有专门的连接运算。下面拼出SQL中超链接的部分语句格式: SELECT… FROM Table INNER|LEFT|RIGHT|FULL JOIN Table ON JoinCondition WHERE…
考点9 Visual FoxPro中SQL SELECT的几个特殊选项
(l)显示部分结果,格式为: TOP nExpr[PERCENT] (2)将查询结果存放到数组中,格式为: INTO ARRAY ArrayName (3)将查询结果存放到临时文件中,格式为: INTO CURSOR CursorName (4)将查询结果存放到永久表中,格式为: INTO DBF|TABLE TableName (5)将查询结果存放到文本文件中,格式为: TO FILE FileName[ADDITIVE] (6)将查询结果直接输出到打印机,格式为: TO PRINTER[PROMPT]
5.3 操作功能
考点10 插入
Visual FoxPro支持两种SQL插入命令的格式,一种是标准格式,另一种是特殊格式。 1标准格式 INSERT INTO dbf name[(frame 1[,fname2,…])] VALUES(eExpressionl[,eExpression2,…]) 2特殊格式 INSERT INTO dbf _name FROM ARRAY ArrayName|FROM MEMVAR
考点11 更新
SQL的数据更新命令格式如下: UPDATE TableName SET Column_Namel=eEpressionl[,Column_Name2=eExpression2…] WHERE Condition 说明:利用WHERE字句指定条件,以更新满足条件的一些记录的字段值,并巨一次可更新多个字段;如果不使用WHERE子句,则更新全部记录。
考点12 删除
SQL从表中删除数据的命令格式如下: DELETE FROM TableName[WHERE Condition] 说明:FROM指定从哪个表中删除记录,WHERE指定被删除的记录所满足的条件,如果不使用WHERE子句,则删除该表中的全部记录。
小提示: 当一个表定义一个主索引或候选索引后,由于相应的字段具有关键字的特性,即不能为空,所以只能用此命令插入记录、)APPEND和INSERT都是插入一条空白记录再输入各字段的值,故不能用它们来插入记录。
5.4 定义功能
考点13 表的定义
利用SQL命令建立的数据表同样可以完成在表设计器中设计表的所有功能。 格式:CREATE TABLE I DBF TableNamel[NAME LongTableName][FREE] (FieldNarnel FieldType[(nFieldWidth[,nPrecision])][NULL |NOT NULL] [CHECK IExpressionl [ERROR cMessageTextl]] [DEFAULT eExpressionl] [PRIMARY KEY I UNIQUE] [PEFERENCES TableName2[AG TagName1]] [NOCPTRANS] [,FieldName2…] [,PRIMARY KEY eEpression2 TAG TagName2|, UNIQUE eExpression3 TAG TagName3] [,FOREIGN KEY eExpression4 TagName4[NODUP] REFERENCES TableName3 [TAG TagName5]] [,CHECK lExpression2[ERROR cMessageText2]]) |FROM ARRAY ArravNasne 说明:此命令除了建立表的基本功能外,还包括满足实体完整性的主关键字(主索引)PRIMARY KEY、定义域完整性的CHECK约束及出错提示信息ERROR、定义默认值DEFAULT等,另外还有描述表之间联系的FOREIGN KEY和REFERENCES等。
考点14 表的删除
利用SQL命令删除表,可直接使用语句,格式为: DROP TABLE Table_name 说明:如果删除的是自由表,则应该将当前打开的数据库先关闭,才能进行删除。如果删除数据库表,则要先打开数据库,在数据库中进行操作二否则,即使删除了数据库表,但记录在数据库中的信息并没有被删除,此后会出现错误提示。
考点15 表结构的修改
修改表结构的命令是ALTER TABLE,该命令有3种格式。 (1)ALTER TABLE TableNamel ADD| ALTER[COLUMN]FieldNamel FieldTvpe[(nFieldWidth[,nPrecision])][NULL |NOT NULL] [CHECK lExpressionl[ERROR cMessageTextl ]][DEFAULT eExpressionl] [PRIMARY KEY |UNIQUE] [REFERENCES TableName2[TAG TagNamel〕] (2)ALTER TABLE TableNamel ALTER[COLUMN]FieldName2[NULL|NOT NULL] [SET EFAULTeExpression2][SET CHECK lExpression2[ERROR cMessageText2] [DROP DEFAULT][DROP CHECK] (3)ALTER TABLE TableName1[DROP [COLUMN]FieldName3] [SET CHECK lExpression3[ERROR cMessageText3] [DROP CHECK] [ADD PRIMARY KEY eExpression3 TAG TagName2[FOR lExpression4]] [DROP PRIMARY KEY〕 [ADD UNIQUE eExpression4[TAG TagName3[FOR lExpression5]]] [DROP UNIQUE TAG TagName4] [ADD FOREIGN KEY[eExpression5] TAG TagName4[FOR lExpression6] REFERENCES TableName2[TAG TagName5]] [DROP FOREIGN KEY TAG TagName6[SAVE]] [RENAME COLUMN FieldName4 TO FieldName5]
考点16 视图的定义
1视图的概念及其定义 (l)视图的概念。 Visual FoxPro中视图是一个虚拟的表,可以是本地的、远程的或带参数的。 (2)视图的定义,格式为: CREATE VIEW view name[(column_name[,column_name]…)] AS select_statement 2从单个表派生出来的视图 视图一经定义,就可以和基本表一样进行各种查询,也可以进行一些修改操作。对于最终用户来说,有时并不需要知道操作的是基本表还是视图。 3从多个表派生出来的视图 视图一方面可以限定对数据的访问,另一方面又可以简化对数据的访问。 4视图的删除 视图由于是从表派生出来的,所以不存在修改结构的问题,但是视图可以删除。 格式:DROP VIEW<视图名> 5关于视图的说明 在关系数据库中,视图始终不真正含有数据,它总是原有表的一个窗口。所以,虽然视图可以像表一样进行各种查询,但是插入、更新和删除操作在视图上却有一定限制。在一般情况下,当一个视图是由单个表导出时可以进行插入和更新操作,但不能进行删除操作;当视图是从多个表导出时,插入、更新和删除操作都不允许进行。这种限制是很有必要的,它可以避免一些潜在问题的发生。 |