460 likes | 627 Views
4.3 SELECT-SQL 语句. 4.3.1 概述 SQL ( Structured Query Language , 结 构化查询语句 )是美国国家标准局 ANSI 确认的 关系数据库语言标准。 Visual FoxPro 支持 SQL ,它使用 Rushmore 技术来优化性能,通常 一个 SQL 命令可以代替多个 Visual Foxpro 命令 来完成一项操作。在 VFP 中,尽可能采用 SQL 命 令来代替一般的 VFP 命令。. VFP 中支持的 SQL 命令. CREATE TABLE-SQL CREATE CURSOR-SQL, 创建一个临时表
E N D
4.3 SELECT-SQL语句 4.3.1 概述 SQL(Structured Query Language,结 构化查询语句)是美国国家标准局ANSI确认的 关系数据库语言标准。Visual FoxPro支持 SQL,它使用Rushmore技术来优化性能,通常 一个SQL命令可以代替多个Visual Foxpro命令 来完成一项操作。在VFP中,尽可能采用SQL命 令来代替一般的VFP命令。
VFP中支持的SQL命令 • CREATE TABLE-SQL • CREATE CURSOR-SQL,创建一个临时表 • ALTER TABLE-SQL • INSERT-SQL • UPDATE-SQL • DELETE-SQL • SELECT-SQL
1.使用CREATE TABLE-SQL命令创建表结构 例如:创建学生表 CREATE TABLEJS(GH C(5),XM C(8),XB C(2),; XDH C(2),GL N(2,0),CSRQ D,JBGZ N(7,2),JL M)
ALTER TABLEJSADD COLUMN Fax c(20)NULL 2.使用ALTER TABLE-SQL命令修改表的结构(添加字段)
2.使用ALTER TABLE-SQL命令修改表的结构(字段重命名) 例:ALTER TABLE js RENAME COLUNM jl TO jsjl
2.使用ALTER TABLE-SQL命令修改表的结构(删除字段) ALTER TABLE js DROP COLUMN jbgz
3.使用INSERT-SQL命令追加记录 INSERT INTOxscj(xh, cj) VALUES (“050412”,85.5)
4.UPDATE-SQL语句 UPDATE cj SET cj*1.05 WHERE cj>80
5.DELETE-SQL语句 DELETE FROM xscj WHERE cj<60
1.命令格式 SELECT 表名1.字段名1[AS 标题名1],表名1.字段名2[AS 标题名2],… FROM 数据库名!表名1[,数据库名!表名2][,数据库名!表名3] [inner|LEFT [OUTER]|RIGHT[OUTER]|FULL[OUTER] JOIN DatabaseName] Talbe Name [ON JoinCondition] [TO FILE 文本文件名|INTOTABLE|INTOCURSOR表文件名] [WHERE 选定条件] [GROUP BY 分组字段名] (字段名或数值表达式(备注、通用字段除外)) [HAVING 分组中的满足条件] [ORDER BY 排序字段名1[ASC|DESC][,排序字段名2[ASC|DESC]…]]
4.3.3 SELECT-SQL应用举例(以下表均在数据库example中), 1.基于单个表的查询示例 例1 基于教师表(表js.dbf),查询所有教师的 工号和姓名。 Select 表js.gh,表js.xm from example!表js
1.基于单个表的查询示例 例2 基于学生表xs,查询学号以“03”开头的 学生情况,并保存到临时表TEMP中。 Select * from example!表xs where like("03*",xh) into cursor temp
1.基于单个表的查询示例 例3 查询成绩表cj中课程代号为“03”的学 生的学号和成绩,且要求查询结果按成绩降 序排列。 select 表cj.xh,表cj.cj from example!表cj; where kcdh='03' order by 2 desc
1.基于单个表的查询示例 例4 显示成绩表中各门成绩的课程代号 和最高分(GROUP BY子句),且按最高 分,从低到高排序(ORDER BY)。 select表cj.kcdh,max(表cj.cj) as最高分; from example!表cj group by 1 order by 2 desc
1.基于单个表的查询示例 例5 显示成绩表中各门成绩的课程代号 和最高分,且把最高分大于85的,从低到 高排序(HAVING子句),结果显示前10 条记录(TOP nExpr[PERCENT])。 select top 10 表cj.kcdh,max(表cj.cj) as ;最高分 from example!表cj group by ; kcdh having 最高分>85 order by最高分
1.基于单个表的查询示例 例6 查询各门考试成绩均在60分以上学生成 绩情况,要求输出学号和总成绩,且只输出总 成绩前30%的同学。 select top 30.00 percent表cj.xh as 学号,; sum(表cj.cj) as 总成绩 from example!表cj; group by xh HAVING表cj.cj>=60order by xh
2.基于两个表的查询示例 例7 基于成绩表cj和学生表xs,查询有 不及格课程成绩的学生的学号和姓名,且 有多门课程不及格的学生只显示一次。 select distinct表xs.xm,表cj.xhfrom;example!表xs inner join example!表cjon; 表xs.xh=表cj.xhwhere表cj.cj<60
2.子查询 例8 基于教师表js和任课表rk,查询已 担任课程的教师的姓名和系代号。 select 表js.xm,表js.xdh from example!; 表js where表js.gh in (select 表rk.gh; from example!表rk)
2.基于多个表的查询 例9 完善下列SELECT-SQL命令,其功能是基于XS 表和CJ表查询有两门或两门以上课程不及格的学生情况。 要求输出为XH、XM、选课门数和不及格门数,查询结 果按不及格门数排序,且将查询结果输出到打印机打印。 select表xs.xh,表xs.xm,count(*) as 选课门数,; sum(iif(表cj.cj<60,1,0)) as不及格门数; from example!表xs inner join表cj on; 表xs.xh=表cj.xh group by 1 order by 4; to printer
3.组合查询示例 例10 显示成绩表中及格学生人数和不及格学生人数,输出字段为分数类型和人数。 select "及格 "AS 分数类型,count(*) as 人数 from sjk!cj where cj.cj>=60; union; select "不及格" AS 分数类型,count(*) as 人数 from sjk!cj where cj.cj<60
4.4 视图的创建和使用 • 视图是数据库的一个组成部分,是基于表且可更新的数据集合。视图分两种类型: • 本地视图:使用VFP SQL语法选择储存在本地计算机上表或视图中的数据。 • 远程视图:使用远程SQL语法从远程ODBC数据源表中选择数据(ODBC是一种用于数据库服务器的标准协议,通过ODBC可以访问多种数据库中的数据) • 视图兼有表和查询的特点: • 与查询类似之处:可以用来从一个或多个相关联 的表中提取数据; • 与表相类似的地方是:可以更新其数据,并将更新 结果反映到源数据表(基表)中。
2010年VFP全国笔试题中出现的相关SQL语句的试题2010年VFP全国笔试题中出现的相关SQL语句的试题
4.4.1 创建本地视图 1.使用视图设计器
4.4.2 用视图更新源表数据 在视图中更新数据与在表中更新数据类似。此外,使 用视图还可以对其基表进行更新。
1.使表可更新 利用视图设计器中的“更新条件”页面可以设置将对视图数据的修改“回送”到数据源中的方式。 =DESETPROP(“视图1”,“VIEW”,“SendUpdates”,.t.)
2.设置关键字段 Visual FoxPro用关键字段来唯一标识那些已在视图中修改过的 源表的更新记录。设置“关键字段”可用来检验更新冲突。
2.设置关键字段 (1)指定可更新字段 如果要设置给定表中部分或全部字段允许更新,必 须在该表的所有字段中设置一个关键字段。 (2)控制如何检查更新冲突 在“更新条件”页面的“SQL WHERE子句包括”框中 可设置将哪些字段添加到UPDATE-SQL语句的WHERE 子句中,这样,在将视图修改传送到基表时就可以检测 服务器上的更新冲突。
2.设置关键字段 “冲突”与否是由视图中的旧值和原始表的当前值之间的比较结 果决定的(由系统进行比较)。如果两个值相等,则认为原始值未 做修改,不存在冲突;如果它们不相等,则存在冲突,数据源返回 一条错误信息。 当源表中的关键字段被修改时 当远程表中可更新字段被修改时 当在本地改变的任一字段在源表中已被改变时 当远程表上记录的时间戳在首次检索之后被改变时
例:创建一个本地视图(viewjsjbgz),要求结果中包含工号、姓名、和该教师的基本工资等字段,并按基本工资排序,在视图中将jbgz表中的工号为b0002的职工jbgz字段更新为2000元。例:创建一个本地视图(viewjsjbgz),要求结果中包含工号、姓名、和该教师的基本工资等字段,并按基本工资排序,在视图中将jbgz表中的工号为b0002的职工jbgz字段更新为2000元。 第一步:在sjk库中新建一个本地视图
4.4.3 创建参数化视图 例4.14基于成绩表cj,创建一个参数化视图,根据提供 的课程代号下载该课程的成绩。
4.4.4 视图的使用 1.视图的打开(命令方式) OPEN DATABASE SJK USE viewjsjbgz browse
4.4.4 视图的使用 2.视图的关闭 Select viewjsjbgz use