• 沒有找到結果。

Visual FoxPro程序设计实训与考试指导 - 万水书苑-出版资源网

N/A
N/A
Protected

Academic year: 2021

Share "Visual FoxPro程序设计实训与考试指导 - 万水书苑-出版资源网"

Copied!
11
0
0

加載中.... (立即查看全文)

全文

(1)

第 3 章 结构化查询语言

本实训的目的是掌握 Visual FoxPro 所支持的 SQL 语言,主要包括数据定义功能、数据操 纵功能和数据查询功能。 一、知识体系 本章重点:数据查询。 本章难点:分组统计查询、联接查询、嵌套查询。 二、实训环节 实训供选用的表参见主教材中的表 2.1 至表 2.3。

实训 3.1 数据定义功能

任务目标 掌握表的创建(CREATE TABLE)、修改(ALTER TABLE)和撤消(DROP TABLE)的  SQL 命令。 实训内容与步骤 【例 3.1】创建表结构,利用 SQL 语言创建如表 3.1 所示的院系表。 表 3.1  院系表结构 字段名 类型 宽度 院系代号  C  18  院系名称  C  20  SQL  数据定义功能 数据操纵功能 数据查询功能 表创建  CREATE TABLE  表修改  ALTER TABLE  表撤消  DROP TABLE  数据添加  INSERT  数据修改  UPDATE  数据删除  DELETE  简单查询 联接查询 分组统计查询 嵌套查询 查询去向设置

(2)

打开主教材第 2 章所建的“学生管理”数据库,在命令窗口中输入:  CREATE  TABLE  院系表(院系代号  C(18),  院系名称  C(20) )  上述命令运行后,可以在相应的文件目录下找到新建的院系表。 【例 3.2】修改表结构:向院系表中添加一个新字段“系主任” ,字符型,宽度为 10。 在命令窗口中输入:  ALTER TABLE  院系表  ADD  系主任  C(10)  命令执行后,在“表设计器”对话框中可以看到院系表结构。 【例 3.3】撤消表结构:创建一个新表 TABLE1,包含 ID1  C(10)和 ID2  C(20)两个字段, 然后再撤消该表。 步骤 1:创建新表 TABLE1,在“浏览”窗口中输入如下命令:CREATE TABLE TABLE1  (ID1 C(10),ID2 C(20)),命令执行后,在“表设计器”对话框中可以看到表 TABLE1 的结构, 如图 3­1 所示。 图 3­1    TABLE1 表结构 步骤 2:撤消表 TABLE1,在“浏览”窗口中输入如下命令:DROP TABLE TABLE1,命 令执行后,在表文件存储目录下新建的 TABLE1 表被删除。 【关键知识点】  SQL 语言数据定义功能:CREATE TABLE、ALTER TABLE、DROP TABLE。 【拓展与思考】 利用 SQL 语句实现表定义与 Visual FoxPro 自身的表定义实现方式有什么不同?

实训 3.2 数据操纵功能

任务目标 掌握数据添加(INSERT)、数据修改(UPDATE)和数据删除(DELETE)的 SQL 命令。 实训内容与步骤  1.添加记录。 【例 3.4】利用 SQL 语句向院系表中添加 10 条记录。

(3)

在命令窗口中输入:  INSERT INTO  院系表  VALUES('A','中医临床学院','张义')  INSERT INTO  院系表  VALUES('B','针灸骨伤临床学院','张亮')  INSERT INTO  院系表  VALUES('C','药学院','李宁')  INSERT INTO  院系表  VALUES('D','中西医结合临床学院','李一山')  INSERT INTO  院系表  VALUES('E','医药信息管理学院','王宁')  INSERT INTO  院系表  VALUES('F','护理学院','李娜')  INSERT INTO  院系表  VALUES('G','人文学院','谷凡')  INSERT INTO  院系表  VALUES('H','医药信息工程学院','吴西')  INSERT INTO  院系表  VALUES('I','国际交流学院','刘义阳')  INSERT INTO  院系表  VALUES('J','体育学院','刘敏珊')  命令执行完成后,浏览院系表查看结果。 【例 3.5】利用 SQL 语句向课程表(KC.DBF)中添加一条记录。 在命令窗口中输入:  INSERT INTO KC VALUES('1009','计算机编程基础',36)  命令执行完成后,浏览 KC 表可以在表尾看到新添加的数据记录,如图 3­2 所示。 图 3­2  在 KC 表中添加记录 【例 3.6】利用 SQL 语句向成绩表(CJ.DBF)中添加一条记录。 在命令窗口中输入:  INSERT INTO CJ VALUES('10431075','1002',87)  命令执行完成后,浏览 CJ 表可以在表尾看到新添加的数据记录。  2.修改记录。 【例 3.7】将 CJ 表中学号为 10431075 的学生 1002 号课程的成绩加 2 分。 在命令窗口中输入: 

UPDATE CJ SET  成绩=成绩+2 WHERE  课程号='1002' AND  学号='10431075'  命令执行完成后,浏览 CJ 表可以看到修改后 CJ 表的内容。

【例 3.8】修改 KC 表中“计算机编程基础”的学时数为 54。 在命令窗口中输入: 

UPDATE KC SET  学时数=54 WHERE  课程名='计算机编程基础'  命令执行完成后,浏览 KC 表,数据记录如图 3­3 所示。

(4)

图 3­3    KC 表数据修改

【例 3.9】修改院系表中“人文学院”的系主任为“吴歌” 。

在命令窗口中输入: 

UPDATE  院系表  SET  系主任='吴歌'  WHERE  院系名称='人文学院'  命令执行完成后,浏览院系表,如图 3­4 所示。 图 3­4  院系表数据修改  3.删除记录。 【例 3.10】逻辑删除 CJ 表中学号为 10431075 的学生的成绩记录。 在命令窗口中输入:  DELETE FROM CJ WHERE  学号='10431075'  命令执行完成后,浏览  CJ  表,可以看到学号为  10431075  的学生的成绩记录打上了删除 标记。 【例 3.11】逻辑删除院系表中“体育学院”的相应记录。 在命令窗口中输入:  DELETE FROM  院系表  WHERE  院系名称='体育学院'  命令执行完成后,使用“浏览”菜单可以看到院系表中“体育学院”的相应记录打上了 删除标记。 【关键知识点】  SQL 语言的数据操纵功能:INSERT、UPDATE、DELETE。 【拓展与思考】 利用 SQL 语句实现表数据的添加、修改和删除操作的方式与 Visual FoxPro 自身的相关实 现方式有什么不同?

(5)

实训 3.3 数据查询功能

任务目标  1.掌握 SQL 语言的数据查询命令,主要包括简单查询、联接查询(内联接、左联接、右 联接、全联接)、嵌套查询、分组查询。  2.掌握 SQL 查询的 SELECT、FROM、WHERE、GROUP BY、ORDER BY 等短语的 使用。 实训内容与步骤  1.简单查询。 【例 3.12】查询 KC 表中的所有信息。 在命令窗口中输入:  SELECT  *  FROM  KC  【例 3.13】查询 2009 药学 1 班所有学生的学号、姓名和专业。 在命令窗口中输入:  SELECT  学号,姓名,专业  FROM XS WHERE  班级='2009 药学 1'  查询结果如图 3­5 所示。 图 3­5  指定班级学生查询结果 【例 3.14】查询所有非汉族的女生学号、姓名、专业、民族和班级信息。 在命令窗口中输入: 

SELECT  学号,姓名,专业,民族,班级  FROM XS WHERE  民族!='汉' AND  性别='女'  查询结果如图 3­6 所示。 图 3­6  少数民族女生信息查询结果 【例 3.15】查询 CJ 表中所有考试学生的学号(不过滤重复记录)。 在命令窗口中输入:  SELECT ALL  学号  FROM CJ  查询结果如图 3­7 所示。

(6)

【例 3.16】查询 CJ 表中所有考试学生的学号(过滤重复记录)。 在命令窗口中输入:  SELECT DISTINCT  学号  FROM    CJ  查询结果如图 3­8 所示。 图 3­7  所有考试学号 图 3­8  考试学号(过滤重复) 【例 3.17】查询课程号为 1004 的课程成绩在 60~70 分之间的记录。 在命令窗口中输入: 

SELECT *    FROM CJ WHERE  成绩  BETWEEN 60 AND 70    AND  课程号='1004'  查询结果如图 3­9 所示。

图 3­9  成绩查询 本例命令也可以写成: 

SELECT *    FROM CJ WHERE  成绩>=60 AND  成绩<=70  【例 3.18】查询所有姓李的学生信息。

在命令窗口中输入: 

SELECT * FROM XS WHERE  姓名  LIKE '李%'  查询结果如图 3­10 所示。

(7)

【例 3.19】查询所有 1003 号课程成绩信息,并按成绩降序显示前 3 名的成绩。 在命令窗口中输入: 

SELECT * FROM CJ WHERE  课程号='1003' ORDER BY  成绩  DESC TOP 3  查询结果如图 3­11 所示。 图 3­11  成绩降序排列查询结果  2.联接查询。 【例 3.20】查询参加 1004 号课程考试的学生的学号、姓名、班级、课程号和成绩(内 联接) 。 在命令窗口中输入:  SELECT XS.学号,姓名,班级,课程号,成绩;  FROM CJ JOIN XS ON CJ.学号=XS.学号  WHERE  课程号='1004'  查询结果如图 3­12 所示。 图 3­12  内联接查询结果 【例  3.21】查询所有院系的学生情况,要求查询结果显示院系代号、院系名称、学号、 姓名、专业和班级信息(外联接) 。 在命令窗口中输入(左外联接) :  SELECT  院系表.院系代号,院系名称,学号,姓名,专业,班级; 

FROM  院系表  LEFT JOIN XS    ON  院系表.院系代号=XS.院系代号 查询结果如图 3­13 所示。

本例命令也可以写成(右外联接): 

SELECT  院系表.院系代号,院系名称,学号,姓名,专业,班级; 

(8)

图 3­13  左外联接查询结果  3.分组与统计查询。 【例 3.22】统计 XS 表中“中医”专业的学生人数。 在命令窗口中输入:  SELECT COUNT(学号) FROM XS WHERE  专业='中医'  查询结果如图 3­14 所示。 图 3­14  中医专业人数统计结果 【例 3.23】统计 1004 号课程的总成绩和平均成绩。 在命令窗口中输入:  SELECT SUM(成绩),AVG(成绩) FROM CJ WHERE  课程号='1004'  查询结果如图 3­15 所示。 图 3­15  课程总成绩和平均成绩查询结果 【例 3.24】查询 CJ 表中 1003 号课程成绩的最高分和最低分。 在命令窗口中输入:  SELECT MAX(成绩),MIN(成绩) FROM CJ WHERE  课程号='1003'

(9)

查询结果如图 3­16 所示。 图 3­16  课程成绩最高分与最低分查询结果 【例 3.25】分组统计 XS 表中每个院系的学生人数。 在命令窗口中输入:  SELECT  院系代号,COUNT(*) FROM XS GROUP BY  院系代号 查询结果如图 3­17 所示。 图 3­17  各院系人数分组统计查询结果 【例 3.26】统计每位学生的考试总成绩和考试科目数。 在命令窗口中输入:  SELECT  学号,SUM(成绩),COUNT(*) FROM CJ GROUP BY  学号 查询结果如图 3­18 所示。 图 3­18  学生总分与科目数分组统计结果

(10)

【例 3.27】统计查询考试科目在 2 门以上的学生的平均成绩和考试科目数。 在命令窗口中输入:  SELECT  学号,AVG(成绩),COUNT(*) FROM CJ;  GROUP BY  学号  HAVING COUNT(*)>=2  查询结果如图 3­19 所示。 图 3­19  分组统计查询结果  4.嵌套查询。 【例 3.28】查询护理学院的学生的学号、姓名和籍贯。 在命令窗口中输入:  SELECT  学号,姓名,籍贯  FROM XS WHERE  院系代号  =; 

(SELECT  院系代号  FROM  院系表  WHERE  院系名称='护理学院')  查询结果如图 3­20 所示。 图 3­20  学生信息嵌套查询结果 【例 3.29】查询课程“计算机基础”的所有考试成绩信息。 在命令窗口中输入:  SELECT * FROM CJ WHERE  课程号=;  (SELECT  课程号  FROM KC WHERE  课程名='计算机基础')  查询结果如图 3­21 所示。 图 3­21  课程成绩信息嵌套查询结果

(11)

5.查询结果去向设置。 【例 3.30】查询所有 1002 号课程成绩,并将查询结果保存到新表“大学英语成绩”中。 在命令窗口中输入:  SELECT * FROM CJ WHERE  课程号='1002' INTO DBF 大学英语成绩  USE  大学英语成绩  BROW  命令执行结果如图 3­22 所示。 图 3­22  查询结果去向设置 【关键知识点】  1.简单查询:SELECT、FROM、WHERE、ORDER BY、TOP n。  2.联接查询:INNER JOIN、LEFT OUTER JOIN、RIGHT OUTER JOIN、FULL JOIN。  3.分组统计查询:COUNT、SUM、AVG、MAX、MIN、GROUP BY、HAVING。  4.嵌套查询:内查询、外查询。  5. 查询去向设置: TO SCREEN、 TO FILE、 TO PRINTER、 INTO CURSOR、 INTO TALBE、  INTO ARRAY。 【拓展与思考】 利用 SQL 语句实现数据查询与 Visual FoxPro 的数据查询有什么不同? 三、常见错误和难点分析  1.简单查询中,多重条件表达 AND、OR 连接符号的使用。  2.多表联接查询,容易遗漏联接条件。  3.分组统计查询,分组依据列容易判断错误,并且分组统计查询 SELECT 短语中只能是 分组依据列或统计函数,不可以是其他列。  4.嵌套查询使用过程中,内外层嵌套之间的衔接,关键谓词如  IN、=等的使用,需要多 加注意。

參考文獻

相關文件

十、成績複查:請於 107 年 7 月 17 日 (星期二) 09:00-11:00 止,持新式國民身分證、准考證及成績複查 申請表 (如附件 8)親自向本校學務處申請複查,複查手續費 100

十一、成績複查:請於 109.7.13(一) 上午 9:00~11:30 前持國民身分證、准考證及成績複查申請表 (附件

1.調查機關按本條例第 12 條所定之調查程序作成之初步認定結果,應自調 查決定作成日起算 90 日內公布之;如有特別情形,得延長初步決定之

十、成績複查:請於 109 年 6 月 16 日 (星期二) 09:00-11:00 止,持新式國民身分證、准考證及成績複查 申請表 (如附件 8)親自向本校申請複查,複查手續費 100

第2次招考成績複查 108年8月14日(星期三)16時至16時30分。如報名人 數過多,致延後考試期程,而延後放榜時將於放榜公

A8 População empregada, segundo o grupo etário, por rendimento do emprego em Julho de 2011 A9 Mediana do rendimento do emprego em Julho de 2011, por zonas estatísticas. A10

2.報名路徑:進入「台灣就業通」網站首頁→選擇首頁中「找課程」→「職前訓練 網」→「課程查詢」→「查詢/報名」→查詢條件(擇一輸入關鍵字即可)設定:「開

編號 主持人 計畫名稱 委員審查意見 大會審查6. 結果