1 / 76

第 5 章 关系数据库 标准语言 SQL

第 5 章 关系数据库 标准语言 SQL. 5.1 SQL 语言简介 5.2 SQL 的数据 查询 5.3 SQL 的数据 定义 5.4 SQL 的数据 操作 5.5 视图. 导入. §5.1 SQL 语言简介. 5.1.1 SQL 语言 SQL 是结构化查询语言 Structured Query Language 的缩写,可以说查询是 SQL 语言的重要组成部分,是 SQL 的核心,但不是全部。 SQL 包含: 数据 查询 语言( DQL-Data Query Language );

hoang
Download Presentation

第 5 章 关系数据库 标准语言 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. 第 5章 关系数据库标准语言SQL 5.1 SQL语言简介 5.2 SQL的数据查询 5.3 SQL的数据定义 5.4 SQL的数据操作 5.5视图

  2. 导入

  3. §5.1 SQL语言简介 5.1.1 SQL语言 SQL是结构化查询语言Structured Query Language的缩写,可以说查询是SQL语言的重要组成部分,是SQL的核心,但不是全部。SQL包含: 数据查询语言(DQL-Data Query Language); 数据定义语言(DDL-Data Definition Language); 数据操纵语言(DML-Data Manipulation Language); 数据控制语言(DCL-Data Control Language)等。

  4. §5.2 SQL 查 询 SELECT-SQL 命令是SQL语言中最重要、最核心、最常用的一条命令,通过它可以方便地实现对数据的查询工作。 SELECT [ALL/DISTINCT][TOP nExpr [PERCENT]] [Alias.]Select_Item [AS Column_Name][,[Alias.]Select_Item [AS Column_Name]…] FROM [DatabaseName!]TableName [[AS] Local_Alias] [, [DatabaseName!]TableName [[AS]Local_Alias]] [[INTER/LEFT[OUTER]/RIGHT[OUTER]/FULL[OUTER]] JOIN [DatabaseName!]TableName [[AS]Local_Alias] [ON JoinCondition]…] [WHERE JoinCondition [AND JoinCondition…] [AND/OR FilterCondition [AND/OR FilterConidion…]]] [ORDER BY Order_Item [ASC/DESC][,Order_Item [ASC/DESC]…]] [GROUP BY GroupCo1umn [,GroupColumn…]] [HAVING FilterCondition] [TO PRINTER/ FILE FileName[ADDITIVE]/ SCREEN ] [INTO TABLE Tablename/CURSOR Cursorname/ARRAY Arrayname]

  5. §5.2 SQL语 言 的 基 本 语 法 SELECT [ALL/DISTINCT][TOP nExpr [PERCENT]] FROM [DatabaseName!]TableName [[AS] Local_Alias] [WHERE JoinCondition [AND JoinCondition…] [AND/OR FilterCondition [AND/OR FilterConidion…]]] [ORDER BY Order_Item [ASC/DESC][,Order_Item [ASC/DESC]…]] [GROUP BY GroupCo1umn [,GroupColumn…]] [HAVING FilterCondition] [TO PRINTER/ FILE FileName[ADDITIVE]/ SCREEN ] 功能: 从一个或多个表中查询指定条件的数据并输出。可对查询结果加以排序或分组统计,默认输出结果到浏览窗,可重定向到打印机、ASCII文件或屏幕,或保存结果到表、临时表或内存变量数组中。 说明: SELECT说明要查询的数据;From说明查询的数据来源(表); Where用于指定查询条件;ORDER BY用于对查询结果进行排序;GROUP BY用于分组,

  6. §5.2.1 简 单 查 询 单表查询是指查询结果中的所有字段和查询条件中所涉及的字段都存在于同一个表中,这类查询只需 SELECT和FROM子句构成无条件查询,或由SELECT、FROM和Where子句构成条件查询。 1.无条件查询 SELECT<字段列表> FROM<表名> 功能: 查询指定表中所有记录的全部字段内容; 在SELECT后用“*”表示全部字段,而无需一一列出所有字段名。 【例5-7】 查询显示rsb中所有职工的详细信息。 SELECT * FROM rsb

  7. 本章查询用到的3个表 注意:rsb表中并无“基本工资”字段,可到教师课件的实验资料上直接下载人事库。

  8. §5.2.1 简 单 查 询 1.无条件查询 SELECT <字段列表> FROM <表名> 2)查询指定表中所有记录的部分字段内容:用<列名表>逐一列出所需字段并以“,”分隔。 【例5-8】 查询rsb表中所有职工的编号和姓名,并将查询结果直接显示在VFP主窗口中。 SELECT 编号,姓名 FROM rsb TO SCREEN 【例5-10】 查询显示rsb表中所有职工的编号、姓名和年龄。 SELECT 编号, 姓名,YEAR(DATE())-YEAR(出生日期)AS年龄 FROM rsb

  9. §5.2.1 简 单 的 计 算 查 询 1.无条件查询 SELECT<字段列表> FROM<表名> ①COUNT——计数 ② SUM ——求和 ③ AVG ——计算平均值 ④ MAX ——求最大值 ⑤ MIN ——求最小值 3)查询指定表中所有记录的统计值:在SELECT后通过函数和表达式构造统计式,通常还使用AS子句为统计式取一个有含义的名称作为查询结果的列标题。 【例5-9 】 查询显示rsb表中所有职工的最高基本工资、最低基本工资和平均基本工资,并要求在查询结果的列中使用标题名称。 SELEMAX(基本工资)AS最高基本工资,MIN(基本工资)AS最低基本工资 ; AVG(基本工资)AS 平均基本工资 FROM rsb

  10. §5.2.2 简 单 条 件 查 询 2.条件查询 在SELECT-SQL命令中使用WHERE子句,可设置查询数据的筛选条件。 SELECT<字段列表> FROM<表名> WHERE <条件> (1)简单条件查询: 在WHERE后使用关系表达式表达查询数据要满足的简单条件 。 【例5-11】 查询rsb表中哪些年龄在30岁以上(含30岁)的职工,显示姓名(要求不重复显示)。 SELECTDISTINCT 姓名 FROM rsb WHERE YEAR(DATE())-YEAR(出生日期)>=30

  11. §5.2.2 复 合 条 件 查 询 2.条件查询 SELECT<字段列表> FROM<表名> WHERE <条件> 2)复合条件查询: 在WHERE后使用逻辑运算符将几个简单条件组合成复合条件,即使用逻辑表达式进行查询。 【例5-12 】查询显示rsb表中所有年龄在40岁以上(含40岁)的女性职工编号和姓名。 SELECT编号,姓名 FROM rsb WHERE (YEAR(DATE())-YEAR(出生日期)>=40)AND性别=“女”

  12. §5.2.2 模 糊 条 件 查 询 3)模糊匹配查询: 在WHERE子句中使用LIKE运算符,可对字符型数据进行模糊匹配类型的查询。使用格式为: WHERE 字段名 Like "<字符串通配式>" 在字符串通配式中,通配符百分比符号“%”表示任意个字符,通配符下划线“_”表示任意的一个字符或汉字。 【例5-13 】 查询显示rsb中姓“张”的职工的信息。 SELECT * FROM rsb WHERE 姓名LIKE "张% " 【例5-15】 查询显示rsb中姓“张”且只有两字的姓名的职工的信息。 SELECT * FROM rsb WHERE姓名 LIKE "张_ "

  13. §5.2.2 条 件 查 询 3.对查询结果进行排序 在SELECT-SQL命令中使用ORDER BY子句,可使查询结果按照一定的顺序显示。 SELECT<字段列表> FROM<表名> [WHERE <条件>] ORDER BY<排序依据>[ASC/DESC] 【例5-16 】 查询rsb表中的职工信息,显示职工编号,姓名,年龄,工作日期,并按年龄由小到大的顺序排列,相同者按工作日期降序显示。

  14. §5.2.2 条 件 查 询 SELECT编号,姓名,YEAR(DATE())-YEAR(出生日期) AS年龄,工作日期 ; FROM rsb ORDER BY年龄,工作日期DESC 提示: 不可以将上面的ORDER BY子句替换为ORDER BY YEAR(DATE())-YEAR(出生日期),但可以用ORDER BY 3替代。

  15. §5.2.3 分 组 查 询 4.分组查询 分组查询的含义是对查询结果进行分组,把具有相同字段值的记录合并为一组。在SELECT-SQL命令中使用GROUP BY子句,可实现分组查询。 SELECT<字段列表> FROM<表名> [WHERE <条件>] GROUP BY<分组依据> [HAVING <条件>] 说明: GROUP BY 子句经常与HAVING 子句联用,后者给出对分组结果进行筛选的条件。注意HAVING子句与WHERE子句的区别,对分组操作而言,WHERE子句实际上指定了哪些记录能参加分组,而HAVING子句指定的是分组后哪些记录能作为查询的最终结果输出。 【例5-17 】根据rsb表查询各部门的职工数。 SELECT 部门代码,COUNT(*) FROM rsb GROUP BY部门代码

  16. §5.2.3 分 组 查 询 4.分组查询 【例5-18 】根据rsb表统计各部门教授(含副教授)以上的职工人数。 SELECT部门代码,职称,COUNT(*)as人数 FROM rsb; GROUP BY部门代码 HAVING 职称 like "%教授"

  17. 本章查询用到的3个表 注意:rsb表中并无“基本工资”字段,可到教师课件的实验资料上直接下载人事库。

  18. §5.2.4 联 接 查 询 将两个或多个表的记录通过相关联的字段联接起来进行查询,这种运算称为联接运算,它是关系表运算中的一个重要操作。 VFP提供了四种联接类型: 内部联接、左联接、右联接和完全联接,其中内部联接是最常用的连接方式。根据查询的需要,可以直接在命令中指定多表的联接类型。 1.两表间内部联接(INNER JOIN)查询 从相关联的两个表中选取满足联接条件的记录,按联接条件联接成新记录作为查询的输出,即只有满足联接条件的记录才出现在查询结果中。 1)使用INNER JOIN和ON子句实现。 SELECT <列名表> FROM<表名1> INNER JOIN<表名2> ON <表名1>.<关联字段>=<表名2>.<关联字段> 2)在WHERE子句中实现。 SELECT <列名表> FROM <表名1>,<表名2> WHERE <表名1>.<关联字段>=<表名2>.<关联字段>

  19. §5.2.4 用SELECT-SQL命令实现多表查询 【例5-19 】 根据表rsb和gzb,查询有职工的编号、姓名、基本工资和奖励。 SELECT rsb.编号,rsb.姓名,gzb.基本工资, gzb.奖励 FROM rsb,gzb WHERE rsb.编号=gzb.编号 或 SELECT rsb.编号,rsb.姓名,gzb.基本工资,奖励 FROM rsb ; INNER JOIN gzb ON rsb.编号=gzb.编号

  20. §5.2.4 用SELECT-SQL命令实现多表查询 2.两表间左联接(LEFT JOIN)查询 除满足联接条件的记录出现在查询结果中外,第一个表中不满足联接条件的记录也出现在查询结果中。 从表1中选取所有的记录,按联接条件与表2中相关联的记录联接成新记录输出,若表2中不存在相关联的记录,则查询输出中相应字段的值用.NULL.代替。 实现方法:使用LEFT JOIN和ON子句实现。 SELECT <列名表> FROM<表名1> LEFT JOIN<表名2> ON <表名1>.<关联字段>=<表名2>.<关联字段> 【例5-20 】根据表rsb和gzb,查询所有职工的编号、姓名和基本工资,如果某个职工在gzb表中没有相应的记录,也要显示出该职工的信息。 SELECT rsb.编号,rsb.姓名,gzb.基本工资 FROM rsb; LEFT JOIN gzb ON rsb.编号=gzb.编号

  21. §5.2.4 用SELECT-SQL命令实现多表查询 3.两表间右联接(RIGHT JOIN)查询 除满足联接条件的记录出现在查询结果中外,第二个表中不满足联接条件的记录也出现在查询结果中。 从表2中选取所有的记录,按联接条件与表1中相关联的记录联接成新记录输出,若表1中不存在相关联的记录,则查询输出中相应字段的值用.NULL.代替。 实现方法:使用RIGHT JOIN和ON子句实现。 SELECT <列名表> FROM<表名1> RIGHT JOIN<表名2> ON <表名1>.<关联字段>=<表名2>.<关联字段> 【例5-21 】 根据表rsb和gzb,查询所有职工的编号、姓名和基本工资,如果某个职工在rsb表中没有相应的记录,也要显示出该职工的信息。 SELECT rsb.编号,rsb.姓名,gzb.基本工资 FROM rsb; RIGHT JOIN gzb ON rsb.编号=gzb.编号

  22. §5.2.4 用SELECT-SQL命令实现多表查询 4.两表间完全联接(FULL JOIN)查询 除满足联接条件的记录出现在查询结果中外,两个表中不满足联接条件的记录也出现在查询结果中。 从相关联的两个表中选取所有的记录,按联接条件联接成新记录输出,若表1或表2中不存在相关联的记录,则查询输出中相应字段的值用.NULL.代替。 实现方法:使用FULL JOIN和ON子句实现。 SELECT <列名表> FROM <表名1> FULL JOIN<表名2> ON <表名1>.<关联字段>=<表名2>.<关联字段> 【例5-22 】 通过表rsb和gzb,的完全联接,查询两表所涉及到的所有职工的编号、姓名和基本工资。 SELECT rsb.编号,rsb.姓名,gzb.基本工资 FROM rsb; FULL JOIN gzb ON rsb.编号=gzb.编号

  23. §5.2.4 用SELECT-SQL命令实现多表查询 5.多表间的联接查询 上面给出的例子都是完成两个表间的联接查询。SELECT-SQL命令不仅能完成两个表间的联接查询,还可以完成多个表间的联接查询。 【例5-23 】 根据表rsb、gzb和bum,查询所有职工的编号、姓名、部门和基本工资。并按编号从小到大排序输出。 SELECT rsb.编号,rsb.姓名,bum.部门名称, gzb.基本工资 FROM rsb; INNER JOIN (rsb INNER JOIN bum ON rsb.部门代码= bum.部门代码); ON rsb.编号=gzb.编号 ORDER BY rsb.编号

  24. §5.2.4 用SELECT-SQL命令实现多表查询 可去掉命令中的括号,写作: SELECT rsb.编号,rsb.姓名,bum.部门名称,gzb.基本工资 FROM rsb; INNER JOIN bum; INNER JOIN gzb; ON rsb.部门代码= bum.部门代码; ON rsb.编号=gzb.编号 ORDER BY rsb.编号 用另一实现方法,命令是: SELECT rsb.编号,rsb.姓名,bum.部门名称,gzb.基本工资; FROM rsb,gzb,bum; WHERE rsb.编号=gzb.编号 AND rsb.部门代码= bum.部门代码; ORDER BY rsb.编号

  25. §5.2.4 用SELECT-SQL命令实现多表查询 YEAR(DATE()) 函数的嵌套:一个函数的参数是另一个函数的值,即函数中又包含函数。例如: 6.使用嵌套子查询实现多表查询 所谓的子查询是指嵌套在一个SELECT-SQL命令中的另一个SELECT-SQL命令。外层查询依赖于内层查询的结果,而内层查询与外层查询无关。 嵌套子查询的SELECT-SQL命令形式如下: SELECT <取自表1的列名表> FROM<表名1> WHERE <表1的关联字段> IN (SELECT<表2的关联字段> FROM<表名2> [WHERE <表2的查询条件>] )

  26. §5.2.4 用SELECT-SQL命令实现多表查询 【例5-24 】根据表rsb和gzb,查询基本工资在1000元以上(含1000元)的职工的编号和姓名(要求不重复显示)。 (1)最简单的查询方法: SELECT DISTINCT rsb.编号,姓名 FROM rsb,gzb; WHERE rsb.编号=gzb.编号 AND gzb.基本工资>=1000 (2)不使用嵌套子查询 SELECTDISTINCT rsb.编号,姓名 FROM rsb; INNER JOIN gzb ON rsb.编号=gzb.编号; WHERE gzb.基本工资>=1000 使用嵌套子查询 SELECTDISTINCT 编号,姓名 FROM rsb; WHERE编号 IN (SELECT 编号 FROM gzb WHERE 基本工资>=1000)

  27. §5.2 SQL语 言 的 基 本 语 法 SELECT [ALL/DISTINCT][TOPnExpr [PERCENT]] Select_Item [AS Column_Name]…] FROM [DatabaseName!]TableName [[AS] Local_Alias] [WHERE JoinCondition [AND JoinCondition…] [AND/OR FilterCondition [AND/OR FilterConidion…]]] [ORDER BY Order_Item [ASC/DESC][,Order_Item [ASC/DESC]…]] [GROUP BY GroupCo1umn [,GroupColumn…]] [HAVING FilterCondition] [TO PRINTER/ FILE FileName[ADDITIVE]/ SCREEN ] ALL:表示查询结果中包括所有满足查询条件的记录,也包括重复值。默认为ALL。 DISTINCT:表示在查询结果中内容完全相同的记录只能出现一次。 [Alias.]Select_Item:指定作为查询结果的列内容,可以是字段名、常量或表达式;Alias表示表名(或表别名),用Alias.标识来自不同表的同名字段。 ASColumn_Name:指定查询结果中列的标题名称。 TOP nExpr [PERCENT]:限制查询记录的数目为前nExpr条或占记录总数的百分比为nExpr。 注意:Top参数必须与Order By子句联用。

  28. §5.2 SQL 查 询 举 例 【例1】从rsb表中查询年龄最大的3位职工的姓名、年龄、出生日期。 SeleTop 3 姓名, Year(Date())-Year(出生日期) as年龄,出生日期; From rsb order by年龄 Desc 【例2 】根据gzb按基本工资降序显示前30%的工资信息。 Sele Top 30 Percent *; From gzb order by 基本工资Desc 【例3】根据表rsb和gzb,查询所有职工的编号、姓名、基本工资和奖励。 Selersb.编号, 姓名,gzb.基本工资,奖励 From rsb,gzb Where rsb.编号=gzb.编号 【例4】查询未婚职工的姓名和出生日期。 Sele姓名,出生日期Fromrsb Where婚否=.F. Sele姓名,出生日期Fromrsb WhereNot 婚否

  29. §5.2 SQL语 言 的 基 本 语 法 SELECT [ALL/DISTINCT][TOP nExpr [PERCENT]] Select_Item [AS Column_Name]…] FROM [DatabaseName!]TableName [[AS] Local_Alias] [WHERE JoinCondition [AND JoinCondition…] [AND/OR FilterCondition [AND/OR FilterConidion…]]] [ORDER BY Order_Item [ASC/DESC][,Order_Item [ASC/DESC]…]] [GROUP BY GroupCo1umn [,GroupColumn…]] [HAVING FilterCondition] [TO PRINTER/ FILE FileName[ADDITIVE]/ SCREEN ] [INTO TABLE Tablename/CURSOR Cursorname/ARRAY Arrayname] HAVING子句:与GROUP BY子句联用,指定对分组结果进行筛选的条件。 【例5】:根据rsb表统计各部门教授(含副教授)以上的职工人数。 Sele部门代码,职称,Count(*) as人数 From rsb; Group By部门代码 Having 职称 like "%教授"

  30. §5.2 SQL语 言 的 基 本 语 法 SELECT [ALL/DISTINCT][TOP nExpr [PERCENT]] Select_Item [AS Column_Name]…] FROM [DatabaseName!]TableName [[AS] Local_Alias] [WHERE JoinCondition [AND JoinCondition…] [AND/OR FilterCondition [AND/OR FilterConidion…]]] [ORDER BY Order_Item [ASC/DESC][,Order_Item [ASC/DESC]…]] [GROUP BY GroupCo1umn [,GroupColumn…]] [HAVING FilterCondition] [TO PRINTER/ FILE FileName[ADDITIVE]/ SCREEN ] [INTO TABLE Tablename/CURSOR Cursorname/ARRAY Arrayname] TO子句:指定查询结果的输出目标。 浏览窗口:默认输出目标(注:查询结果在浏览窗内只供浏览,不能修改)。 打印机:TO PRINTER。 ASCII文件:TO FILE Filename。 活动窗口:TO SCREEN。 【例6】:从rsb表中查询职称信息存储到 文本文件tmp中。 Sele编号,姓名,职称; From rsb To file tmp

  31. §5.2 SQL 查 询 举 例 SELECT [ALL/DISTINCT][TOP nExpr [PERCENT]] Select_Item [AS Column_Name]…] FROM [DatabaseName!]TableName [[AS] Local_Alias] [WHERE JoinCondition [AND JoinCondition…] [AND/OR FilterCondition [AND/OR FilterConidion…]]] [ORDER BY Order_Item [ASC/DESC][,Order_Item [ASC/DESC]…]] [GROUP BY GroupCo1umn [,GroupColumn…]] [HAVING FilterCondition] [TO PRINTER/ FILE FileName[ADDITIVE]/ SCREEN ] [INTOTABLE Tablename/CURSOR Cursorname/ARRAY Arrayname] 【例8】:从rsb表中查询职称信息存储到数组x中。 dimension x(11,3) Sele编号,姓名,职称; From rsb Into array x disp memory INTO子句:指定查询结果的保存方向。 独立的表:INTO TABLE Tablename。 临时表:INTO CURSOR Cursorname。 数组:INTO ARRAY Arrayname。 【例7】:从rsb表中查询职称信息存储到表zhicheng中。 Sele编号,姓名,职称; From rsb Into Table zhicheng

  32. 引 入 “查 询 设 计 器 ” 【例1】使用查询设计器完成之前用SQL命令实现的查询: 所有1980年以后出生的女教师,查询结果按编号升序排列。 Sele * from 人事表where year(出生日期 )>=1980 And 性别="女" 简单的查询主要是从表中筛选数据,并按一定的方式排序或分组。 除命令方式外,也可直接使用查询向导、查询设计器创建查询。

  33. §5.3 用“查 询 设 计 器”创 建 查 询 查询,英文单词是“query”, 是指从指定的表或视图中提取满足条件的记录, 然后按照需要的输出方式如浏览器、报表、图表等定向输出查询结果。 一般设计一个查询的目的是反复使用,从而提高效率。查询是以*.qpr的文件保存在磁盘上。 查询以快速、方便地使用数据库提供的一种方法。

  34. §5.3.1 启 动 查 询 设 计 器 启动“查询设计器”的方法: ①用Create query命令打开查询设计器; ② “文件”菜单 “新建”命令或单击“常用”工具栏上的“新建”按钮, 打开“新建”对话框,然后选择“查询”,并单击“新建文件”打开查询设计器; ③ 在项目管理器的“数据”选项卡下选择“查询”,再单击“新建”命令按钮打开查询设计器;

  35. §5.3.2 用“查 询 设 计 器 ”创 建 查 询 确定查询基于的表或视图: 1、 此步相当于SQL Select命令中的From子句,指定查询的数据源。

  36. §5.3.2 用“查 询 设 计 器 ”创 建 查 询 2、 在查询设计器“字段”选项卡中指定查询结果中出现的字段列表。 此步相当于SQL Select命令中的Select子句。

  37. §5.3.2 用“查 询 设 计 器 ”创 建 查 询 在查询设计器“联接”选项卡中编辑多个表之间的联接条件。 3、 此步相当于SQL Select命令中的Jion-On子句。

  38. §5.3.2 用“查 询 设 计 器 ”创 建 查 询 4、 在查询设计器 “筛选”选项卡中指定查询条件。 此步相当于SQL Select命令中的Where子句。

  39. §5.3.2 用“查 询 设 计 器 ”创 建 查 询 在查询设计器 “排序依据”选项卡中指定排序字段和排序方式。 5、 此步相当于SQL Select命令中的Order By子句。

  40. §5.3.2 用“查 询 设 计 器 ”创 建 查 询 在查询设计器 “分组依据”选项卡中定义分组字段和分组的限定条件。 6、 分组:将记录按照分组字段分类,分组字段值相同的记录压缩为一条记录,从而实现基于一组记录的统计计算。 分组经常与Count、Sum、Avg、Max、Min函数配合使用。 此步相当于SQL Select命令中的Group By子句。

  41. §5.3.2 用“查 询 设 计 器 ”创 建 查 询 在查询设计器 “杂项”选项卡中指定是否重复的记录,或指定显示前几项记录。 7、 此步相当于SQL Select命令中的Distinct子句、Top子句。

  42. §5.3.2 用“查 询 设 计 器 ”创 建 查 询 在查询设计器中可以根据需要定位查询去向,即查询结果的输出目标或保存方向。 (1)浏览:(默认的输出去向)在【浏览】窗口中显示。 (2)临时表:将查询结果保存在一个命名的临时只读表中。 (3)表:将查询结果保存在一个命名的表中。 (4)图形:将查询结果在图形中显示。 (5)屏幕:在VFP主窗口或当前活动窗口中显示查询结果。 (6)报表:将查询结果输出到一个报表文件(.frx)。 (7)标签:将查询结果输出到一个标签文件(.lbx)。

  43. §5.3.3 保 存 并 运 行 查 询 二、运行查询 查询文件建立好了以后,要看到查询结果就必须执行查询。 执行查询的方法有以下几种: 1)打开查询文件后,单击主窗口“常用”工具栏上的“!”运行按钮。 2)打开查询文件后,选择主窗口“查询”菜单中的“运行查询”命令。 3)打开查询文件后,在“查询设计器”窗口中右击,在快捷菜单中选取“运行查询”。 4)在主窗口“程序”菜单中选择“运行”命令,然后在弹出来的对话框中选择要运行的查询文件。 5)在命令窗口中输入:DO 查询名.QPR。

  44. §5.3.4 单 表 查 询 举 例 【例1】使用查询设计器完成前面的查询—— 所有1980年以后出生的女教师,查询结果按编号升序排列。

  45. §5.3.5 两 表 分 组 查 询 举 例 【例2】按职称分组查询各职称人数及不同职称的平均实发工资。

  46. §5.3 用“查 询 设 计 器 ”创 建 查 询 小结:创建查询的步骤 要使用查询设计器创建查询,首先我们要了解创建查询的一般步骤: 1)启动“查询设计器” ; 2)指定被查询的数据表或视图; 3)选择出现在查询结果中的字段; 4)设置查询条件; 5)设置排序或分组来组织查询; 6)指定查询去向; 7)运行查询; 8)保存查询。

  47. §5.3.6 查 询 设 计 器 的 局 限 性 使用“查询设计器”只能建立比较规范的简单查询, 而复杂的查询,如嵌套查询无法利用“查询设计器”完成,需使用SQL Select命令实现 。 例如:利用“人事表”查询年龄大于女职工平均年龄的女职工的编号、姓名与年龄。 Sele编号,姓名, Year(Date())- Year(出生日期) as年龄 from人事表; Where性别 ="女" And (Year(Date())- Year(出生日期))> ; (Sele avg(Year(Date())- Year(出生日期)) as 平均年龄 From 人事表 Where 性别 ="女") 保存SQL Select查询: 先保存为文本文件,再对其重命名为.qpr查询文件,但打开时因“查询设计器”只能处理简单查询,只能用编辑器打开后运行。

  48. §5.3.7 单 表 查 询 练 习 1.查询order表中所有未付款的订单信息,保存为“未付款订单”;

  49. §5.3.8 两 表 综 合 查 询练 习 2.每张订单中有订货数量,而在产品信息中有每种产品的价格, 查询每张订单的价钱;

  50. §5.3.9 复 杂 查 询 练 习 3.查询每种产品一共有多少个订单?订货数量是多少?订单的总金额是多少?

More Related