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