1 / 22

4.3 SELECT-SQL 语句

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, 创建一个临时表

glen
Download Presentation

4.3 SELECT-SQL 语句

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 4.3 SELECT-SQL语句 4.3.1 概述 SQL(Structured Query Language,结 构化查询语句)是美国国家标准局ANSI确认的 关系数据库语言标准。Visual FoxPro支持 SQL,它使用Rushmore技术来优化性能,通常 一个SQL命令可以代替多个Visual Foxpro命令 来完成一项操作。在VFP中,尽可能采用SQL命 令来代替一般的VFP命令。

  2. VFP中支持的SQL命令 • CREATE TABLE-SQL • CREATE CURSOR-SQL,创建一个临时表 • ALTER TABLE-SQL • INSERT-SQL • UPDATE-SQL • DELETE-SQL • SELECT-SQL

  3. 复习

  4. 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)

  5. ALTER TABLEJSADD COLUMN Fax c(20)NULL 2.使用ALTER TABLE-SQL命令修改表的结构(添加字段)

  6. 2.使用ALTER TABLE-SQL命令修改表的结构(字段重命名) 例:ALTER TABLE js RENAME COLUNM jl TO jsjl

  7. 2.使用ALTER TABLE-SQL命令修改表的结构(删除字段) ALTER TABLE js DROP COLUMN jbgz

  8. 3.使用INSERT-SQL命令追加记录 INSERT INTOxscj(xh, cj) VALUES (“050412”,85.5)

  9. 4.UPDATE-SQL语句 UPDATE cj SET cj*1.05 WHERE cj>80

  10. 5.DELETE-SQL语句 DELETE FROM xscj WHERE cj<60 VFP中: CLOSE TABLES ALL USE xscj DELETE FOR cj<60

  11. 4.3.2 SELECT-SQL 命令

  12. 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]…]]

  13. 4.3.3 SELECT-SQL应用举例(以下表均在数据库example中), 1.基于单个表的查询示例 例1 基于教师表(表js.dbf),查询所有教师的 工号和姓名。 Select 表js.gh,表js.xm from example!表js

  14. 1.基于单个表的查询示例 例2 基于学生表xs,查询学号以“03”开头的 学生情况,并保存到临时表TEMP中。 Select * from example!表xs where like("03*",xh) into cursor temp

  15. 1.基于单个表的查询示例 例3 查询成绩表cj中课程代号为“03”的学 生的学号和成绩,且要求查询结果按成绩降 序排列。 select 表cj.xh,表cj.cj from example!表cj; where kcdh='03' order by 2 desc

  16. 1.基于单个表的查询示例 例4 显示成绩表中各门成绩的课程代号 和最高分(GROUP BY子句),且按最高 分,从低到高排序(ORDER BY)。 select表cj.kcdh,max(表cj.cj) as最高分; from example!表cj group by 1 order by 2 desc

  17. 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最高分

  18. 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 elect top 30.00 percent 表cj.xh as 学号,; sum(表cj.cj) as 总成绩 from example!表cj where 表cj.cj>=60; group by xh order by xh into cursor temp1

  19. 2.基于两个表的查询示例 例7 基于成绩表cj和学生表xs,查询有 不及格课程成绩的学生的学号和姓名,且 有多门课程不及格的学生只显示一次。 select distinct表xs.xm,表cj.xhfrom;example!表xs inner join example!表cjon; 表xs.xh=表cj.xhwhere表cj.cj<60

  20. 2.子查询 例8 基于教师表js和任课表rk,查询已 担任课程的教师的姓名和系代号。 select 表js.xm,表js.xdh from example!; 表js where表js.gh in (select 表rk.gh; from example!表rk)

  21. 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(改错)

  22. 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

More Related