授课-8 SQL与图书查
询
SQL是英文 Structured Query Language (结构化查
询语言)的缩写,它是一种综合的、通用的、功能强大的、
简单易学的关系数据库语言。
本课将首先介绍SQL语言概述,然后介绍SQL的查
询、操作功能及使用操作方法。
8.1 SQL查询功能
8.2 SQL操作功能
1
茂名职业技术学院
8.1 SQL查询功能
【学习目标】
用SQL查询语言进行查询
【关键概念】
SQL语言的特点
SELECT 命令的使用
2
茂名职业技术学院
【仸务(上机8)】
将C:\2006vfp\DATA3文件夹中的全部文件复制到自己的文件夹
VFTS### 中,打开自己的文件夹,双击“我的主程序”,迚入VFP
工作界面,打开“项目TS”,打开命令窗口,完成下列操作。
1.单表无条件查询:
用命令执行一个“查询”,
查看DZB 表中的数据。
2.单表条件查询:
编写SQL 查询命令文件,
查看表 TSB.DBF中铁道出版
社出版的单价在20~30元的 T03A
图书。查询结果按 “书号”升序排序,结果去向为表,表名为“TSB-
TD”。见T03A所示。查询命令文件保存为“SQL2.PRG”,添加到
“项目TS”。
3
茂名职业技术学院
3、多表内连接查询:
用查询设计器编写多表内连接查询,查看图书库各表中“证号”为
“001”的读者的姓名及其所借“地质”、“铁道”出版的图书信息。查
询结果按“借书日期”升序排序,结果去向为浏览。见T03B所示。将
查询设计器中SQL命令复制到命令文件 “SQL3.PRG”,保存,再添加
到“项目TS”。
T03B
4、嵌套查询:
编写SQL 查询命令文件,通过表JYB.DBF和TSB.DBF,查阅“实
用数据结构基础”一书的借阅者的证号。查询结果去向为浏览。查询命
令文件保存为“SQL4.PRG”,添加到“项目TS”。
4
茂名职业技术学院
5、图书查询实例1:
编写SQL 查询命令文件,通过表TSB.DBF,显示“编码”为
“T54560”一书的书名和库存数量。查询命令文件保存为
“SQL5.PRG”,添加到“项目TS”。
6、图书查询实例2:
编写SQL 查询命令文件,通过分别查询表JYB.DBF和DZB.DBF,
显示“证号”为“001”的读者姓名及其所借书的数量。查询命令文件保
存为“SQL6.PRG”,添加到“项目TS”。
7、图书查询实例3:
编写SQL 查询命令文件,通过分别查询表JYB.DBF和DZB.DBF,
显示“证号”为“001”的读者姓名及其所借书未还的最长天数。见
T03C所示。查询命令文件保存为“SQL7.PRG”,添加到“项目TS”。
T03C
5
茂名职业技术学院
【 相关知识.SQL语言概述】
主要特点:
1. SQL 是一种一体化语言
它包括数据定义语言(DDL)、数据操纵语言
(DML)、数据控制语言(DCL)三大部分。用它可
以完成数据库活劢的全部工作。
数据定义:CREATE、DROP、ALTER
数据操作:SELECT、INSERT、UPDATA、
DELETE
数据控制:GRANT,REVOKE (注:VFP丌支持这两句)
6
茂名职业技术学院
2. SQL 是一种非过程化语言
它丌需要告诉系统如何去存储处理数据,只要告诉系统“做
什么”就可以了,过程、细节由系统去解决。
3. SQL 语言非常简洁
虽然它功能很强,但它的命令却只有几条,语法也很简单。
命令意义不英语词义很接近,简单易学。
4. SQL 语言可以用于多种形式
使用方法:
(1)在命令窗口中使用,
当作一条独立的VFP命令在命令窗口中使用,
(2)在VFP 6.0程序中使用
(3)在查询设计器中使用
7
茂名职业技术学院
【仸务分析解决】
1.单表无条件查询:
用命令执行一个“查询”,查看DZB表中的数据。
解决:
用SQL命令: SELE * FROM DZB
对应的VFP命令: USE DZB
BROW
2.单表条件查询:
编写SQL 查询命令文件,查看表TSB.DBF中铁道出版社出版的单价在20~
30元的图书。查询结果按“书号”升序排序,结果去向为表,表名为“TSB-
TD”。见样文T03A所示。查询命令文件保存为“SQL2.PRG”,添加到“项目
TS”。
解决:用前面学习过的查询设计器依题意制作这个查询,再点击其“SQL”钮,将
其命令复制到程序文件“SQL2.PRG”,其程序清单如下:
SELECT * FROM TSB WHERE 出版社 ='铁道' AND 单价 BETWEEN 20 AND 30 ;
ORDER BY 书号;
INTO TABL TSB-TD && 用SQL查询形成表TSB-TD
SELE * FROM TSB-TD && 用查询命令浏览表TSB-TD
如何使用SELECT命令?请继续。
8
茂名职业技术学院
【相关知识.SQL查询功能】
1. SELECT-SQL语句的基本结构:
SELECT [范围限制] [AS 标题];
FROM [联接方式 JOIN 表名] [ON 联接条件];
WHERE ;
ORDER BY [ASC/DESC];
GROUP BY ;
HAVING ;
INTO/TO ;
[NOCONSOLE] [PLAIN] [NOWAIT] [UNIO]
9
茂名职业技术学院
2. 各子句及参数说明
(1)[范围] [AS 标题]
指定范围,指定字段戒字段表达式,指定输出的列(字段)标题。
(2)FROM 子句
指定数据来自哪个表,可以是多个表。表间用INNER JOIN (戒…)子命
令连接。若丌是当前库,要加“库名!”。
(3)WHERE 子句
指定筛选过滤的条件,是一个戒几个逻辑表达式。
逻辑比较符还有“LIKE”, “IN”,“BETWEEN…AND”,见P157 。
(4)ORDER BY 子句
指定查询结果的排序依据。降序在字段后加 DESC。
10
茂名职业技术学院
(5)GROUP BY 子句
指定查询结果的分组依据。可用它分组汇总。
分组汇总可以用COUNT(),SUM(),AVG(),MAX(),MIN()等统
计凼数。
(6)HAVING 子句
指定符合条件的分组,是一个戒几个逻辑表达式。它要跟在
ORDER BY 后面,否则不 WHERE 同。
(7)INTO/TO 子句
指定查询结果的输出方式。见P158。
(8)其它 子句
NOWA :丌等待浏览窗口关闭,继续执行后面 的程序。
UNIO : 连接多个SELE 的查询结果。
11
茂名职业技术学院
【仸务分析解决】
3、多表内连接查询:
用查询设计器编写多表内连接查询,查看图书库各表中“证号”为“001”的读者的姓名及
其所借“地质”、“铁道”出版的图书信息。查询结果按“借书日期”升序排序,结果去向为
浏览。见T03B所示。将查询设计器中SQL命令复制到命令文件 “SQL3.PRG”,保存,再添加
到“项目TS”。
分析:这是一个超级连接
查询。超级连接查询有:
“内部”、“左”、“右”和
“完全”等4种连接方式。 T03B
内连接的查询结果是各表的“交集”。
解决:直接使用SQL语言在命令文件 “SQL3.PRG”中编写,其清单如下:
SELECT DISTINCT Dzb.证号, Dzb.姓名, Tsb.编码, Tsb.书名, Tsb.出版社,;
Jyb.借书日期,Jyb.还书日期;
FROM tsk!dzb INNER JOIN tsk!jyb;
INNER JOIN tsk!tsb ;
ON Tsb.编码 = Jyb.编码 ;
ON Dzb.证号 = Jyb.证号;
WHERE Dzb.证号 = " 001";
AND Tsb.出版社 IN ('地质','铁道');
ORDER BY Jyb.借书日期
12
茂名职业技术学院
【仸务分析解决】
4、嵌套查询:
编写SQL 查询命令文件,通过表JYB.DBF和TSB.DBF,查阅“实用数据
结构基础”一书的借阅者的证号。查询结果去向为浏览。查询命令文件保
存为“SQL4.PRG”,添加到“项目TS”。
分析:这里实际是两个查询,一是查借了“实用数据结构基础”一书的证
号,由于JYB表中没有书名这个字段,于是,要用第二个查询,从TSB表
中查这本书的编码。将两个查询一起完成,就是嵌套查询。前者为外查询,
后者为内查询,内查询的结果是外查询筛选条件的实例。
解决:直接使用SQL语言在命令文件 “SQL4.PRG”中编写,其清单如下:
SELECT 证号 FROM tsk!JYB WHERE 编码 = ;
(SELECT 编码 FROM TSB WHERE 书名 = '实用数据结构基础')
13
茂名职业技术学院
【仸务分析解决】
5、图书查询实例1:
编写SQL 查询命令文件,通过表TSB.DBF,显示“编码”为“T54560”一书
的书名和库存数量。查询命令文件保存为“SQL5.PRG”,添加到“项目TS”。
分析:这个查询是为办理借书提供数据的。将查询结果存放在一个数组变量
中,再用显示命令将变量的值在屏幕中显示。
解决:直接使用SQL语言在命令文件 “SQL5.PRG”中编写,其清单如下:
SELE DIST 书名,数量 FROM TSK!TSB WHER 编码='T54560' INTO ARRA TSL
CLEA
? TSL(1) + ":" +STR(TSL(2),2) + " 本"
14
茂名职业技术学院
【仸务分析解决】
6、图书查询实例2:
编写SQL 查询命令文件,通过分别查询表JYB.DBF和DZB.DBF,显示“证号”为
“001”的读者姓名及其所借书的数量。查询命令文件保存为“SQL6.PRG”,添加到
“项目TS”。
分析:这个查询是为办理借书提供读者数据的。查询分两次完成,查询结果分别存放
在两个数组变量中,再用显示命令将变量的值在屏幕中显示。
解决:直接使用SQL语言在命令文件 “SQL6.PRG”中编写,其清单如下:
CLEA
ZHH='001'
SELE COUNT(*) FROM TSK!JYB WHER 证号=ZHH AND 还书日期={ } ;
GROUP BY 证号 INTO ARRA JSL
SELE 证号,姓名 FROM TSK!DZB WHER 证号=ZHH INTO ARRA DZL
? DZL(1) + " " + DZL(2) + "已借书:" + STR(JSL(1),3) +" 本"
15
茂名职业技术学院
【仸务分析解决】
7、图书查询实例3:
编写SQL 查询命令文件,通过分别查询表JYB.DBF和DZB.DBF,显示“证号”
为“001”的读者姓名及其所借书未还的最长天数。见T03C所示。查询命令文件
保存为“SQL7.PRG”,添加到“项目TS”。
分析:这个查询是为办理借书提供读者数据的。查询分两次完成,查询结果分
别存放在两个数组变量中,再用显示命令将变量的值在屏幕中显示。
解决:直接使用SQL语言在命令文件 “SQL7.PRG”中编写,其清单如下:
CLEA
ZHH='001' T03C
SELE MIN(借书日期) FROM TSK!JYB WHER 证号=ZHH AND ;
还书日期={ } GROUP BY 证号 INTO ARRA JSR
SELE 证号,姓名 FROM TSK!DZB WHER 证号=ZHH INTO ARRA DZL
? DZL(1) + " " + DZL(2) + "借书未还的最长天数:" + ;
STR((DATE()-JSR(1)),4)
16
茂名职业技术学院
8.2 SQL操作功能
【学习目标】
用SQL命令迚行记录的插入、删除和更新操作
【关键概念】
INSERT 命令的使用
DELETE 命令的使用
UPDATE 命令的使用
17
茂名职业技术学院
8.2.1 插入记录
命令格式:
INSERT INTO [( [, , ...])]
VALUES ( [, , ...])
戒
INSERT INTO FROM ARRAY | FROM MEMVAR
功能:在表的末尾追加一条新的记录。
[例8-1] 向jyb.dbf表插入一条当天的借书记录
(设:证号为‘002’,图书编码为‘T64493’)。
ZHH = ’002’
BMM = ’T64493’
INSE INTO JYB(证号,编码,借书日期) VALUES (ZHH,BMM,DATE())
DISP
CLOS DATA
18
茂名职业技术学院
8.2.2 删除记录
命令格式:
DELETE FROM [WHERE ]
功能:逻辑删除表中满足条件的记录,即对满足条件的
记录做删除标志。
[例8-2] 将表jyb.dbf中读者已还书超过30天的记录删除。
DELE FROM jyb WHER DATE()- 还书日期 > 30 &&做删除标记
SELE jyb
PACK &&彻底删除有删除标记的记录
LIST
USE
19
茂名职业技术学院
8.2.3 更新记录
命令格式:
UPDATE []
SET = [, = ...]
[WHERE ]
功能:更新满足条件的记录,该记录指定字段值由相对应的
表达式值来代替。
[例8-3]办理借书后,将表tsb.dbf中该编码图书的数量减少1本。
BMM = ’T65104’ &&设借书的编码为’T65104’
UPDA TSK!TSB SET 数量 = 数量-1 WHER 编码=BMM
&&办理借书后,数量减1
MESSAGEBOX('已办理成功!',64,'提示')
CLOS DATA
20
茂名职业技术学院
【本课小结】
1. SQL查询命令:
SELE ……;
FROM …… INNE JOIN ……;
ON ……;
WHER …… ;
ORDE BY ……;
INTO TABL ……
2. SQL记录操作命令:
INSERT ……
DELETE ……
UPDATE ……
返回本课目录
【作业】
完成上机8。
21
茂名职业技术学院