VFP第8部分(SQL查询语句)_第1页
VFP第8部分(SQL查询语句)_第2页
VFP第8部分(SQL查询语句)_第3页
VFP第8部分(SQL查询语句)_第4页
VFP第8部分(SQL查询语句)_第5页
已阅读5页,还剩53页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、要点:要点: 1.掌握掌握SQL (Structured Query Language)查询)查询 2.掌握基于单表、多表的表单程序掌握基于单表、多表的表单程序 第十二讲 SQL查询及表单程序SQL语言的特点语言的特点1.SQL语言是一种一体化的语言语言是一种一体化的语言 SQL语言集语言集数据定义(数据定义(DDL)、数据操纵(数据操纵(DML)、数据管理(数据管理(DCL)的功能于一体,可以独立完成数据库的功能于一体,可以独立完成数据库的全部操作,包括定义关系模式、录入数据及建立数据库的全部操作,包括定义关系模式、录入数据及建立数据库、查询、更新、维护数据、数据库的重新构造、数据库安、查询

2、、更新、维护数据、数据库的重新构造、数据库安全性等一系列操作的要求。全性等一系列操作的要求。 2.SQL语言是一种高度非过程化的语言。语言是一种高度非过程化的语言。每个语句的操作每个语句的操作对象是一个或多个关系,同时结果也往往是一个关系。对象是一个或多个关系,同时结果也往往是一个关系。 3.语言简洁,易学易用语言简洁,易学易用,只用了只用了9个动词:个动词:CREATE、DROP、ALTER、SELECT、INSERT、UPDATE、DELETE、GRANT 和和REVOKE。易学易用易学易用4.以同一种语法结构提供两种使用方式以同一种语法结构提供两种使用方式,既是既是自含式语言自含式语言,

3、又是又是嵌入式语言嵌入式语言。1 1、数据定义数据定义命令命令 CREATE TABLE-SQLCREATE TABLE-SQL(建立表结构)(建立表结构) ALTER TABLE-SQLALTER TABLE-SQL(修改表结构)(修改表结构) DROP TABLE-SQLDROP TABLE-SQL(删除表)(删除表)删除表的删除表的SQL语句:语句: DROP TABLE 表名表名(见教科书99页) 【例例】创建一个表创建一个表STUD(学生信息表),它由以下字段(学生信息表),它由以下字段组成:学号组成:学号 (C,7);姓名();姓名(C,8);性别();性别(C,2);出);出生日

4、期生日期 (D);籍贯();籍贯(C,4);系别代号();系别代号(C,2);家庭地);家庭地址(址(C,50);是否团员);是否团员 (L);备注);备注 (M)。)。CREATE TABLE STUD(学号学号 C(10), 姓名姓名 C(10), 性别性别 C(2), 出生日期出生日期 D, 籍贯籍贯 C(10), 系别代号系别代号 C(2), 家庭家庭地址地址 C(50), 是否团员是否团员 L, 备注备注 M)参考实验指导书参考实验指导书P141注意:注意:primary key 、check、error、foreign key、tag、references等短语的用法和含义。等短语

5、的用法和含义。建立表结构建立表结构【格式格式】ALTER TABLE 修改表结构修改表结构ALTER TABLE SCALTER TABLE SCADD ADD 成绩成绩 N(3 )N(3 )alteralter 成绩成绩 N(4)N(4)drop drop 成绩成绩RenameRename 成绩成绩 to to 考试成绩考试成绩方法一:方法一: 打开表设计器后修改打开表设计器后修改(数据表已经打开)(数据表已经打开)方法二:方法二: SQLSQL命令命令(数据表关闭)(数据表关闭)【例例】 把表把表dab.dbfdab.dbf中的学号字段宽度中的学号字段宽度改为改为1010,增加字段入学总分

6、,增加字段入学总分N(5,1)N(5,1)。alter table dab alter alter table dab alter 学号学号 c(10) c(10) add add 入学总分入学总分 n(5,1) n(5,1) 2 2、数据操纵、数据操纵命令命令 INSERT-SQLINSERT-SQL(插入数据)(插入数据) DELETE-SQLDELETE-SQL(删除数据)(删除数据) UPDATE-SQLUPDATE-SQL(更新数据)(更新数据)(见教科书124、128、129-130页)【格式格式1】INSERT INTO VALUES ()【格式格式2】INSERT INTO F

7、ROM ARRAY | FROM MEMVAR【功能功能】在指定的表文件在指定的表文件末尾末尾追加一条记录。格式追加一条记录。格式1用表达式表中的各表达式值赋值给用表达式表中的各表达式值赋值给中的相中的相应的各字段。格式应的各字段。格式2用用数组或内存变量的值数组或内存变量的值赋值给表赋值给表文件中各字段。文件中各字段。【说明说明】如果某些字段名在如果某些字段名在INTO子句中没有出现,则子句中没有出现,则新记录在这些字段名上将取新记录在这些字段名上将取空值空值(或默认值)。但必(或默认值)。但必须注意的是,在表定义说明了须注意的是,在表定义说明了NOT NULL的字段名不的字段名不能取空值。

8、能取空值。插入记录插入记录:指定表文件中的字段,缺省时,按表:指定表文件中的字段,缺省时,按表文件字段的顺序依次赋值。文件字段的顺序依次赋值。:指定要追加的记录各个字段的值。:指定要追加的记录各个字段的值。【例例 】在表文件在表文件STUD的末尾追加三条记录。的末尾追加三条记录。*用表达式方式追加第一条记录用表达式方式追加第一条记录*INSERT INTO STUD(学号学号,姓名姓名,性别性别,出生日期出生日期,籍籍贯贯,家庭地址家庭地址,是否团员是否团员) VALUES (2051114,李建国李建国,男男, 2002-09-28,四川四川,.t.)值的类型,顺序,个数值的类型,顺序,个数

9、要和上面的字段一致要和上面的字段一致*用表达式方式追加第二条记录用表达式方式追加第二条记录*INSERT INTO STUD VALUES (2051129,刘丽敏刘丽敏,女女,2001-09-28,吉林吉林,0530,吉林省长春市解放大路吉林省长春市解放大路10号号,.t.,)值的类型,顺序,要值的类型,顺序,要和表中的字段一致和表中的字段一致DIMENSION DATA5DATA(1)=2051113DATA(2)=李宁李宁DATA(3)=女女DATA(4)=2005-06-25DATA(5)=江西江西INSERT INTO STUD FROM ARRAY DATA*用数组方式追加第三条记

10、录用数组方式追加第三条记录*删除记录删除记录【格式格式】DELETE FROM WHERE 【功能功能】从指定的表中删除满足从指定的表中删除满足WHERE子句条件的所有子句条件的所有记录。如果在记录。如果在DELETE语句中没有语句中没有WHERE子句,则该表子句,则该表中的所有记录都将被删除。中的所有记录都将被删除。【说明说明】这里的删除是这里的删除是逻辑删除逻辑删除,即在删除的记录前加上,即在删除的记录前加上一个删除标记一个删除标记“*”。【例例】删除删除STUD表中所有性别为男的记录。表中所有性别为男的记录。 DELETE FROM STUD WHERE 性别性别=“男男”【格式格式】U

11、PDATE SET = ,= WHERE 【功能功能】更新指定表文件中满足更新指定表文件中满足WHERE条件子句的数据。其条件子句的数据。其中中SET子句用于指定列和修改的值,子句用于指定列和修改的值,WHERE用于指定更新的用于指定更新的行,如果省略行,如果省略WHERE子句,则表示表中所有行。子句,则表示表中所有行。【说明说明】更新操作又称为修改操作。更新操作又称为修改操作。更新记录命令更新记录命令Update sale set 超额业绩量超额业绩量= 一季度一季度+二季度二季度+三季度三季度+四季度四季度-指标指标例:计算超额业绩量例:计算超额业绩量默认更新全默认更新全部记录部记录例:计

12、算例:计算xscj.dbfxscj.dbf的总成绩和平均成绩的总成绩和平均成绩update xscj set 总成绩总成绩=英语英语+计算机计算机+数学,平数学,平均成绩均成绩=总成绩总成绩/33 3、SQLSQL数据查询数据查询 在数据库中对数据的操作,很多在数据库中对数据的操作,很多时侯是查询,因此,数据查询是数据时侯是查询,因此,数据查询是数据库的库的核心核心操作。而在操作。而在SQLSQL语言中,查语言中,查询语言中只有一条查询命令,即询语言中只有一条查询命令,即SELECTSELECT语句语句。 基本查询语句基本查询语句【格式格式】SELECT * | distinct FROM 【

13、功能功能】无条件查询。无条件查询。【说明说明】ALL:表示显示全部查询记录,包括重复记录。:表示显示全部查询记录,包括重复记录。 DISTINCT:表示显示无重复结果的记录。:表示显示无重复结果的记录。【例例】显示图书表中的所有记录。显示图书表中的所有记录。 SELECT * FROM 图书图书命令中的命令中的*表示输出显示所有的字段,数据来源是图书表,表示输出显示所有的字段,数据来源是图书表,表中的内容以表中的内容以浏览方式浏览方式显示。显示。【例例】显示显示图书图书表中的所有的书号及与之对应的作者,同时表中的所有的书号及与之对应的作者,同时能去除重名。能去除重名。 SELECT DISTI

14、NCT 书号书号,作者作者 FROM 图书图书 注意注意:SELECT 命令中的选项,不仅可以是命令中的选项,不仅可以是字段名字段名,还可以是,还可以是表达式表达式,也可以是一些,也可以是一些函数函数,SELECT命令可操纵的函数很命令可操纵的函数很多。多。【例例】 将所有的图书表价格四舍五入到个位,只显示书号、作将所有的图书表价格四舍五入到个位,只显示书号、作者和价格。者和价格。SELECT 书号书号,作者作者,ROUND(价格价格,0) AS 零售价零售价; FROM 图书图书注意:这个结果不影响数据库表中的结果,只是在输出时通过注意:这个结果不影响数据库表中的结果,只是在输出时通过函数计

15、算输出。函数计算输出。【例例】 求出所有图书的价格平均值。求出所有图书的价格平均值。SELECT AVG(价格价格) AS 平均价平均价 FROM 图书图书由以上两例可见,直接使用由以上两例可见,直接使用Visual FoxPro提供的各种提供的各种SQL函函数在输出时进行计算,便可得到相应的输出结果。数在输出时进行计算,便可得到相应的输出结果。带条件(带条件(WHERE)的查询语句)的查询语句【格式格式】SELECT ALL | DISTINCT FROM WHERE 【功能功能】从一个表中查询满足条件的数据。从一个表中查询满足条件的数据。【说明说明】由一系列用由一系列用AND 或或 OR

16、连接的连接的条件表达式组成,条件表达式的格式可以是以下几种条件表达式组成,条件表达式的格式可以是以下几种: SQL支持的关系运算符如下:支持的关系运算符如下:、!、!、几个特殊关系表达式的意义和使用方法几个特殊关系表达式的意义和使用方法: :(1)。(2)。(3)ALL()(4) ANY | SOME ()(5) NOT BETWEEN AND(6)NOT EXISTS ()(7) NOT IN (8) NOT IN ()(9) NOT LIKE LIKE LIKE子句中可以用通配符:子句中可以用通配符:下划线下划线“_ _”,表示任何一个,表示任何一个字符;百分号符字符;百分号符“% %”,

17、表示一串字符,表示一串字符。【例例】 列出非列出非西南大学出版社西南大学出版社的图书名单。的图书名单。 SELECT * FROM 图书图书 ; WHERE 出版社出版社西南大学出版社西南大学出版社以上命令的功能等同于:以上命令的功能等同于: SELECT * FROM 图书图书 ; WHERE 出版社出版社 != 西南大学出版社西南大学出版社或或 SELECT * FROM 图书图书 ; WHERE NOT( 出版社出版社 = 西南大学出版社西南大学出版社)【例例】 列出西南大学出版社和清华大学出版社的图书名单。列出西南大学出版社和清华大学出版社的图书名单。SELECT * FROM 图书;

18、图书; WHERE 出版社出版社 IN(西南大学出版社西南大学出版社,清华大学出版社清华大学出版社)以上命令的功能等同于:以上命令的功能等同于:SELECT * FROM 图书;图书; WHERE 出版社出版社=西南大学出版社西南大学出版社 OR 出版社出版社=清华大学清华大学出版社出版社注意注意:IN和和( )之间没有空格之间没有空格【例例】 列出价格在列出价格在30到到100之间的图书书号,作者,价格。之间的图书书号,作者,价格。SELECT 书号书号,作者作者,价格价格 FROM 图书图书; WHERE 价格价格=30 AND 价格价格=100在以上命令的功能等同于:在以上命令的功能等同

19、于: SELECT 书号书号,作者作者,价格价格 FROM 图书图书; WHERE 价格价格 BETWEEN 30 AND 100【例例】列出所有的姓王的读者名单。列出所有的姓王的读者名单。SELECT * FROM 读者读者 WHERE 读者姓名读者姓名 LIKE 王王%以上命令的功能等同于:以上命令的功能等同于:SELECT * FROM 读者读者 WHERE 读者姓名读者姓名=王王【例例】 列出所有还书日期为空值的读者编号和书号。列出所有还书日期为空值的读者编号和书号。SELECT 读者编号读者编号,书号书号 FROM 借阅借阅 WHERE 还书日期还书日期 IS NULL 在以上命令中

20、,使用了运算符在以上命令中,使用了运算符IS NULL,该运算符是测试,该运算符是测试字段值是否为空值,在查询时用字段值是否为空值,在查询时用“字段名字段名IS NOTNULL”的的形式,而不能写成形式,而不能写成“字段名字段名=NULL”或或“字段名!字段名!=NULL”【练习练习】显示读者表中所有男生记录的读者编号,姓名和性别显示读者表中所有男生记录的读者编号,姓名和性别字段值。字段值。SELECT 读者编号读者编号,读者姓名读者姓名,性别性别 FROM 读者读者 ; WHERE 性别性别=男男“【练习练习】显示显示读者表读者表中办证日期在中办证日期在09年的读者的编号,姓名,年的读者的编

21、号,姓名,办证日期。办证日期。SELECT 读者编号读者编号,读者姓名读者姓名,办证日期办证日期 FROM 读者读者 ;WHERE 办证日期办证日期 BETWEEN 2009-01-01 AND 2009-12-31【练习练习】显示读者表中姓李的读者的编号,姓名,显示读者表中姓李的读者的编号,姓名,单位。单位。SELECT 读者编号读者编号,读者姓名读者姓名,单位单位 ; FROM 读者;读者;WHERE 读者姓名读者姓名 LIKE 李李%【练习练习】显示读者表中女读者的编号,姓名,联显示读者表中女读者的编号,姓名,联系电话。将系电话。将“联系电话联系电话”字段的标题显示为字段的标题显示为“座

22、座机机”SELECT 读者编号读者编号,读者姓名读者姓名,联系电话联系电话 AS 座座机机 FROM 读者读者 WHERE 性别性别=女女显示部分查询结果显示部分查询结果 TOP nExpr:显示输出前显示输出前nExpr个记录个记录 TOP nExpr PERCENT :显示输出前百分之显示输出前百分之nExpr个记录个记录【例例】显示图书表中价格前显示图书表中价格前5个记录。个记录。 SELE * TOP 5 FROM 图书图书 ORDER BY 价格价格【例例】显示图书表中价格前显示图书表中价格前50%的记录。的记录。 SELE * TOP 50 PERCENT FROM 图书图书 OR

23、DER BY 价格价格1.排序输出排序输出(ORDER BY ) 【例例】按办证年份降序按办证年份降序,如果办证年份相同,再按读者编号升序显如果办证年份相同,再按读者编号升序显示读者表中的读者编号,姓名,办证年份。示读者表中的读者编号,姓名,办证年份。SELECT 读者编号读者编号,读者姓名读者姓名, year(办证办证日期日期) AS ) AS 办证年份办证年份;FROM 读者读者;ORDER BY 办证年份办证年份 DESC,读者编号读者编号 ASC查询结果处理查询结果处理注意:注意:TOP短语要短语要与与ORDER BY短语短语同时使用才有效。同时使用才有效。注意:注意:order by

24、 后面不能将函数后面不能将函数作为排序字段,需对这样的字段作为排序字段,需对这样的字段要起别名,再对别名排序要起别名,再对别名排序,或直接或直接用该函数在显示信息的位数,如用该函数在显示信息的位数,如32.重定向输出重定向输出(INTO) 默认情况下,查询输出到一个默认情况下,查询输出到一个浏览窗口浏览窗口,用户在,用户在“SELECT”语句语句中可使用中可使用INTO|TO FILE|TO SCREEN| TO PRINTER子句选择查询去向:子句选择查询去向:SELE * TOP 2 FROM 读者读者 ORDER BY 办证日期办证日期 into array adisplay memor

25、 like a注意:数组是一个注意:数组是一个二维数组二维数组,并且一行保存一个记录,一列对应一,并且一行保存一个记录,一列对应一个属性。个属性。2)INTO CURSOR : 将查询结果保存到一个临时表中。将查询结果保存到一个临时表中。SELE * TOP 2 FROM 读者读者; ORDER BY 读者编号读者编号 into CURSOR A3)TO SCREEN:将查询结果保在屏幕上显示。:将查询结果保在屏幕上显示。SELE * TOP 2 FROM 读者读者 ORDER BY 读者编号读者编号 to screen4)TO PRINTER:将查询结果送打印机打印。将查询结果送打印机打印。

26、SELE * TOP 2 FROM 读者读者 ORDER BY 读者编号读者编号 ; to PRINT5)TO FILEADDITIVE:将查询结果保存到将查询结果保存到文本文本文件文件中。如果带中。如果带“ADDITIVE”关键字,查询结果以追加方关键字,查询结果以追加方式添加到式添加到指定的文件,否则,以新建或覆盖方式指定的文件,否则,以新建或覆盖方式添加到添加到指定的文件。指定的文件。SELE * TOP 2 FROM 读者读者 ORDER BY 读者编号读者编号; to FILE AA6)TO DBF|TABLE TABLENAME存入永久表中。存入永久表中。 SELE * TOP 2

27、 FROM 读者读者 ORDER BY 读者编号读者编号; INTO DBF AA【例例】显示数量大于显示数量大于100和姓李的作者的信息。和姓李的作者的信息。SELE 作者作者,价格价格,数量数量 FROM 图书图书 WHERE 作者作者 LIKE 王王% ;UNION ;SELE 作者作者,价格价格,数量数量 FROM 图书图书 WHERE 数数量量100注意注意:两个查询的两个查询的字段名字段名和和字段数字段数要一致。要一致。输出合并输出合并(并运算并运算)COUNT 统计统计SUM求和求和AVG计算平均值计算平均值MAX求最大值求最大值 MIN求最小值求最小值计算查询计算查询【例例】查

28、询统计读者表中女生的个数查询统计读者表中女生的个数 SELECT COUNT(*) FROM 读者读者 WHERE 性别性别=女女【例例】计算图书表中的图书数量总数。计算图书表中的图书数量总数。 SELECT SUM(数量数量) FROM 图书图书【例例】计算图书表中的价格最大的数。计算图书表中的价格最大的数。 SELECT MAX(价格价格) FROM 图书图书【例例】计算图书表中的价格的平均数。计算图书表中的价格的平均数。 SELECT AVG(价格价格) FROM 图书图书 分组统计分组统计(GROUP BY )与筛选与筛选(HAVING) 通过通过GROUP BY子句可以实现分组查询。

29、子句可以实现分组查询。 格式:格式: GROUP BY GROUP BY 1,2 HAVING HAVING 其中,其中,可以是表的字段名、字段可以是表的字段名、字段函数名或标识列的数值型表达式;函数名或标识列的数值型表达式;HAVING 子句进一步限定分组的条件。子句进一步限定分组的条件。 在select语句中,where子句是对记录的限定,而Having短语是对分组的限定,where、group by及Having可以同时出现在一个select语句中。三者在select中出现的顺序为:WhereGroup by-Having。记录记录1 1记录记录2 2记录记录3 3记录记录4 4记录记录

30、5 5记录记录6 6记录记录2 2记录记录4 4记录记录5 5记录记录6 6记录记录2 2记录记录5 5记录记录4 4记录记录6 6记录记录2 2记录记录5 5where限定限定Group by分组分组Having限定限定【例例】计算图书表中每个出版社的图书数量计算图书表中每个出版社的图书数量。 select 出版社出版社,sum(数量数量) as 数量数量; from 图书图书 group by 出版社出版社【例例】显示显示图书图书表中各表中各出版社出版社的图书平均价格。的图书平均价格。sele 出版社出版社,AVG(价格价格) ;from 图书图书 group by 出版社出版社【例例】在

31、借阅表中统计每本图书的借阅次数在借阅表中统计每本图书的借阅次数。 select 书号书号,count(*) as 借阅次数借阅次数; from 借阅借阅 group by 书号书号【例例】在借阅表中统计借阅次数大于在借阅表中统计借阅次数大于2次的图次的图书。书。SELE 书号书号, COUNT(*) FROM 借阅借阅 ;GROUP BY 书号书号 HAVING COUNT(*)=2【例例】写出实现下列题目要求的写出实现下列题目要求的SQL命令。命令。1、查询出、查询出XSCJ表中的学号,姓名,英语字段的相关信息,英表中的学号,姓名,英语字段的相关信息,英语按照语按照70%显示,并以别名显示,

32、并以别名ENGLISH显示该字段。显示该字段。SELECT 学号学号,姓名姓名,英语英语*0.7 AS ENGLISH FROM XSCJ课堂作业(一)课堂作业(一)4、将、将XSCJ表前表前4名的学号,姓名,英语字段的信息显示在屏幕名的学号,姓名,英语字段的信息显示在屏幕上,并按照总成绩排序。上,并按照总成绩排序。SELECT TOP 4 学号学号,姓名姓名,英语英语 FROM XSCJ ; TO SCREEN order by 总成绩总成绩2、查询出查询出XSCJ表中的平均成绩大于表中的平均成绩大于60分的同学学号,姓名分的同学学号,姓名及平均成绩信息。及平均成绩信息。SELECT 学号学

33、号,姓名姓名,数学数学 FROM XSCJ ORDER BY 数学数学 DESC SELECT 学号学号,姓名姓名,英语英语+数学数学 AS 总分总分 FROM XSCJ 3、显示、显示XSCJ表的学号,姓名,数学字段的信息,并按照数学表的学号,姓名,数学字段的信息,并按照数学成绩降序排序。成绩降序排序。7、将、将XSCJ表中姓王的同学的信息保存到数组表中姓王的同学的信息保存到数组A中。然后在屏幕中。然后在屏幕上显示数组元素上显示数组元素A(2),A(7)的信息。的信息。SELECT * FROM XSCJ ; where 姓名姓名= 王王 INTO ARRAY A? A(2),A(7)5、查

34、询出查询出XSCJ表中的姓名中带有表中的姓名中带有“芳芳”字的同学学号,姓字的同学学号,姓名及总成绩信息。名及总成绩信息。SELECT 学号学号,姓名姓名,平均成绩平均成绩 FROM XSCJ where 平均成绩平均成绩 BETWEEN 60 and 80 ORDER BY 平均成绩平均成绩 DESCSELECT 学号学号,姓名姓名, 总成绩总成绩 FROM XSCJ where 芳芳$姓名姓名 6、显示、显示XSCJ表的平均成绩在表的平均成绩在60到到80分之间的同学学号,姓名,分之间的同学学号,姓名,平均分的信息,并按照平均成绩降序排序。平均分的信息,并按照平均成绩降序排序。10、将、将

35、XSCJ表中各班级的英语平均成绩,并将该信息保存到新表中各班级的英语平均成绩,并将该信息保存到新表表temp中。中。SELECT avg(英语英语) as 英语平均成绩英语平均成绩 from xscj group by 班级号班级号 into table temp8、查询出查询出XSCJ表中的所有同学的数学成绩的总和,并将该表中的所有同学的数学成绩的总和,并将该值保存到数组值保存到数组B中。中。SELECT 学号学号,姓名姓名,round(英语英语,0) AS 英语英语 FROM XSCJSELECT SUM(数学数学) FROM XSCJ INTO ARRAY B9、查询出查询出XSCJ表中

36、的学号,姓名及英语字段的信息,要求将英表中的学号,姓名及英语字段的信息,要求将英语成绩保留到个位。语成绩保留到个位。13、查询出查询出XSCJ表中的各班数学成绩最高分,表中的各班数学成绩最高分,再将它们升序排再将它们升序排序序。SELECT max(数学数学) from xscj group by 班级号班级号 order by 111、查询出查询出XSCJ表中的各班英语成绩最高分,表中的各班英语成绩最高分,将该信息保将该信息保存存到数组到数组C中,然后显示它们的值。中,然后显示它们的值。SELECT count(*) from xscj group by 班级号班级号 into Array

37、DSELECT max(英语英语) from xscj group by 班级号班级号 into Array C?C(1),C(2)12、查询出查询出XSCJ表中的各班人数,表中的各班人数,将该信息保存将该信息保存到数组到数组D中中.多表查询之一多表查询之一等值联接等值联接 在一个表中进行查询,一般说来是比较简单的,在一个表中进行查询,一般说来是比较简单的,而在多表之间查询就比较复杂,必须处理表和表间的而在多表之间查询就比较复杂,必须处理表和表间的联接关系。使用联接关系。使用SELECT命令进行多表查询是很方便命令进行多表查询是很方便的。的。1. 等值联接等值联接 等值联接是用等值联接是用wh

38、ere短语短语按对应字段的按对应字段的共同值共同值将将一个表中的记录与另一个表中的记录相联接。一个表中的记录与另一个表中的记录相联接。【例例】 输出所有读者的姓名,借书书号,借阅日期。输出所有读者的姓名,借书书号,借阅日期。SELECT a.读者姓名读者姓名,b.书号书号,b.借阅日期借阅日期;FROM 读者读者 a, 借阅借阅 b;WHERE a. 读者编号读者编号=b.读者编号读者编号【例例】列出男生的借书情况,要求列出书名、读者姓名、借列出男生的借书情况,要求列出书名、读者姓名、借阅日期。阅日期。SELECT a.读者姓名读者姓名,c.书名书名,b.借阅日期借阅日期; FROM 读者读者

39、 a, 借阅借阅 b, 图书图书 c ;WHERE a.读者编号读者编号=b.读者编号读者编号 and b.书号书号=c.书号书号; and a.性别性别=男男 在在SQL语句中,一个语句中,一个SELECTFROMWHERE语句语句称为一个称为一个查询块查询块。将一个查询块嵌套在另一个查询块的。将一个查询块嵌套在另一个查询块的WHERE子句子句或或HAVING短语短语的条件中的查询称为的条件中的查询称为嵌套查嵌套查询或子查询询或子查询。【例例】显示借阅过书号为显示借阅过书号为”bj060022”的读者姓名,单位,的读者姓名,单位,联系电话联系电话。(使用借阅使用借阅,读者表读者表)SELEC

40、T 读者姓名读者姓名,单位,联系电话单位,联系电话;FROM 读者读者; WHERE 读者编号读者编号 IN(SELECT 读者编号读者编号 FROM 借阅借阅 WHERE 书号书号=“bj060022” )多表查询之二多表查询之二嵌套查询嵌套查询借阅过书号为借阅过书号为”bj060022”的读者姓名,单位,联系电话的读者姓名,单位,联系电话1. 返回返回单值单值的子查询的子查询【例例】列出张珊珊的所借书的书号,借阅日期。列出张珊珊的所借书的书号,借阅日期。SELECT 书号书号,借阅日期借阅日期 FROM 借阅借阅 WHERE 读者编号读者编号=;(SELECT 读者编号读者编号 FROM

41、读者读者 WHERE 读者姓名读者姓名=张珊珊张珊珊)上述上述SQL语句执行的是两个过程,首语句执行的是两个过程,首先在读者表中找出先在读者表中找出“张珊珊张珊珊”的读者的读者编号(比如编号(比如“d0001”),然后再在借),然后再在借阅表中找出读者编号等于阅表中找出读者编号等于“d0001”的的记录,列出这些记录的书号,借阅日记录,列出这些记录的书号,借阅日期。期。2. 返回返回一组值一组值的子查询的子查询 若某个子查询返回值不止一个,则必须指明在若某个子查询返回值不止一个,则必须指明在WHERE子句中应怎样使用这些返回值。通常使用条件子句中应怎样使用这些返回值。通常使用条件ANY(或(或

42、SOME)、)、ALL和和IN。 (1)ANY运算符的用法运算符的用法【例例】列出列出 姓姓“王王” 的作者图书价格高的图书名字的作者图书价格高的图书名字,价格。价格。SELECT 书名书名,价格价格 FROM 图书图书 WHERE 价格价格ANY;(SELECT 价格价格 FROM 图书图书 WHERE 作者作者=王王) 该查询须做两件事:先找出姓该查询须做两件事:先找出姓“王王” 的作者图书价格(比的作者图书价格(比如说结果为如说结果为26.9,31.6,33.0),然后再选出价格高于),然后再选出价格高于任何一个任何一个王姓作者图书价格(即高于王姓作者图书价格(即高于26.9就可以)的图

43、就可以)的图书。书。相当于相当于WHERE 价格价格26.9 or 价格价格31.6 or 价格价格33.0(2)ALL运算符的用法运算符的用法【例例】 列出比所有姓列出比所有姓“王王” 的作者图书价格都高的图书的作者图书价格都高的图书名字名字,价格。价格。SELECT 书名书名,价格价格 FROM 图书图书 WHERE 价格价格ALL;(SELECT 价格价格 FROM 图书图书 WHERE 作者作者=王王) 该查询必须做两件事:先找出姓该查询必须做两件事:先找出姓“王王” 的作者图书价的作者图书价格(比如说结果为格(比如说结果为26.9,31.6,33.0),然后再选出价),然后再选出价格

44、高于格高于所有所有王姓作者图书价格(即高于王姓作者图书价格(即高于33.0才可以)才可以)的图书。的图书。相当于相当于WHERE 价格价格26.9 and 价格价格31.6 and 价格价格33.0(3)IN运算符的用法运算符的用法【例例】列出列出 姓姓“王王” 的作者图书价格高的图书名的作者图书价格高的图书名字字,价格。价格。SELECT 书名书名,价格价格 FROM 图书图书 WHERE 价格价格 in ;(SELECT 价格价格 FROM 图书图书 WHERE 作者作者=王王) IN是属于的意思,等价于是属于的意思,等价于“=ANY”,即等于子,即等于子查询中任何一个值查询中任何一个值.

45、多表查询之三多表查询之三联接查询联接查询 SELECTSELECT语句可以实现对语句可以实现对Visual FoxPro 6.0Visual FoxPro 6.0的的4 4种联接种联接类型的查询:类型的查询:内部联接(内部联接(Inner JoinInner Join): :只有只有2 2个表的字段都满足联接条个表的字段都满足联接条件时,才将此记录选入查询结果中。件时,才将此记录选入查询结果中。左联接左联接(Left Outer Join)(Left Outer Join):联接条件左边表中的记录都:联接条件左边表中的记录都包含在查询结果中,而右边表中的记录只有满足联接条件包含在查询结果中,而

46、右边表中的记录只有满足联接条件时,才选入查询结果中。时,才选入查询结果中。右联接(右联接(Right Outer JoinRight Outer Join):与左联接正好相反。:与左联接正好相反。完全联接(完全联接(Full JoinFull Join):无论:无论2 2个表中的记录是否满足联个表中的记录是否满足联接条件,都将全部记录选入查询结果中。接条件,都将全部记录选入查询结果中。掌握该种联接掌握该种联接联接查询联接查询 联接分为联接分为内部联接内部联接和和外部联接外部联接。外部联接又分为。外部联接又分为左外联接左外联接、右外联接右外联接和和全外联接全外联接。 1. 内部联接(内部联接(I

47、nner Join) 只有只有2 2个表的字段个表的字段都满足都满足联接条件时,才将此记联接条件时,才将此记录选入查询结果中。录选入查询结果中。【例例】列出图书的借阅情况,要求列出书号、书名、列出图书的借阅情况,要求列出书号、书名、作者、借阅日期。作者、借阅日期。SELECT a.书号书号,b.书名书名,a.借阅日期借阅日期,b.作者作者; FROM 借阅借阅 a, 图书图书 b WHERE b.书号书号=a.书号书号如果采用内部联接方式,则命令如果采用内部联接方式,则命令SELECT a.书号书号,b.书名书名,a.借阅日期借阅日期,b.作者作者; FROM 借阅借阅 a inner joi

48、n 图书图书 b on b.书号书号=a.书号书号所得到的结果完全相同。所得到的结果完全相同。注意:书号为注意:书号为“bj080014”这条记录这条记录就没有出现就没有出现 注意:若注意:若SELECT后要查询后要查询的列名(字段名)在的列名(字段名)在2个表中个表中都有,则必须采用都有,则必须采用“表名表名.字字段名段名”,若字段名唯一,则,若字段名唯一,则可仅写出字段名。可仅写出字段名。2.左联接左联接 (Left Outer Join) 联接条件左边表中的记录都包含在查询联接条件左边表中的记录都包含在查询结果中,而右边表中的记录只有满足联接结果中,而右边表中的记录只有满足联接条件时,才

49、选入查询结果中。条件时,才选入查询结果中。SELECT b.书号书号,a.书名书名,b.借阅日期借阅日期,a.作者作者; FROM 图书图书 a left join 借阅借阅 b on b.书号书号=a.书号书号注意:书号为注意:书号为“bj080014”这条记录这条记录就会出现就会出现3.右联接(右联接(Right Outer Join):与左联接正好相反。:与左联接正好相反。4.完全联接(完全联接(Full Join):无论:无论2个表中的记录是否个表中的记录是否满足联接条件,都将全部记录选入查询结果中。满足联接条件,都将全部记录选入查询结果中。ex1、有如下表所示的数据表:外币名称外币名

50、称外币代码外币代码现钞买入价现钞买入价 基准价基准价现钞卖出价现钞卖出价美元美元12821.6555827.4500825.9500英镑英镑141171.43001176.50001204.0500欧元欧元15877.5325895.5600886.2686法郎法郎18585.5500600.4888604.6500姓名姓名外币代码外币代码持有数量持有数量张三张三121000张三张三141300张三张三151500李芳李芳142000李芳李芳181500王林王林141800王林王林151200刘剑刘剑122000刘剑刘剑151200刘剑刘剑181500外币表外币表.dbf持有者持有者.dbf(

51、1)计算出)计算出刘剑刘剑所持有的全部外币相当于人民币所持有的全部外币相当于人民币的价值数量,的价值数量,写出正确的写出正确的SQL命令。命令。注意:某种外币相当于人民币数量的计算公式:注意:某种外币相当于人民币数量的计算公式:人民币价值数量人民币价值数量= 该种外币的该种外币的现钞买入价现钞买入价* 该种外币该种外币持有数量持有数量SELECT SUM(现钞买入价现钞买入价*持有数量持有数量) AS ; 人民币价值人民币价值 FROM 持有者持有者,兑换兑换 ; WHERE 兑换兑换.外币代码外币代码=持有者持有者.外币代码外币代码 ; AND 姓名姓名=刘剑刘剑外币名称外币名称外币代码外币

52、代码现钞买入价现钞买入价 基准价基准价现钞卖出价现钞卖出价美元美元12821.6555827.4500825.9500英镑英镑141171.43001176.50001204.0500欧元欧元15877.5325895.5600886.2686法郎法郎18585.5500600.4888604.6500姓名姓名外币代码外币代码持有数量持有数量张三张三121000张三张三141300张三张三151500李芳李芳142000李芳李芳181500王林王林141800王林王林151200刘剑刘剑122000刘剑刘剑151200刘剑刘剑181500外币表外币表.dbf持有者持有者.dbf(2)将兑换表中

53、,美元和英镑的基准价上调)将兑换表中,美元和英镑的基准价上调0.05%,写出正确的写出正确的SQL命令。命令。UPDATE 兑换兑换SET 基准价基准价=基准价基准价*1.05 ; WHERE 外币名称外币名称=美元美元 ; OR外币名称外币名称=英镑英镑外币名称外币名称外币代码外币代码现钞买入价现钞买入价 基准价基准价现钞卖出价现钞卖出价美元美元12821.6555827.4500825.9500英镑英镑141171.43001176.50001204.0500欧元欧元15877.5325895.5600886.2686法郎法郎18585.5500600.4888604.6500姓名姓名外币代码外币代码持有数量持有数量张三张三121000张三张三141300张三张三151500李芳李芳142000李芳李芳181500

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论