论文部分内容阅读
SQL是结构化查询语言Structured Query Language的缩写,其中查询是SQL语言的重要组成部分。SQL已经成为关系数据库的标准数据语言。Visual FoxPro也将其融入到自身的语言中,可以直接以命令方式交互使用,也可以嵌入到程序中以程序方式使用。这些使用方式,为用户提供了灵活的选择余地。尽管SQL的使用方式不同,但SQL语言的语法基本是一致的。SQL的核心是查询,它的查询命令也称作SELECT命令。实际上,查询就是预先定义好的一个SQL SELECT 语句,在不同的需要场合可以直接或反复使用,从而提高效率。在Visual FoxPro中也可以利用查询设计器设计查询,同时系统会生成相应的SELECT查询语句代码。
一、 使用SELECT命令构造查询
SELECT查询命令的使用非常灵活,它的基本形式由SELECT-FROM-WHERE查询块组成,多个查询块可以嵌套执行,用它可以构造各种各样的查询。下面给出一些查询的例子来分析SELECT语句。其中需要用到相关的数据表如下:
仓库(仓库号C 3,城市C 10,面积N 3),其记录如下:
WH1 北京 370WH2 上海 500
WH3 广州 200WH4 武汉 400
职工(仓库号 C 3,职工号 C 2,工资 N 4),其记录如下:
WH2 E1 1220 WH1 E3 1210
WH2 E4 1250 WH3 E6 1230
WH1 E7 1250
订购单(职工号 C 2,供应商号 C 2,订购单号 C 4,订购日期 D),其记录如下:
E3 S7 OR67 2001/06/23
E1 S4 OR73 2001/07/28
E7 S4 OR76 2001/05/25
E6 Null OR77 Null
E3 S4 OR79 2001/06/13
E1 Null OR80 Null
E3 Null OR90 Null
E3 S3 OR91 2001/07/13
供应商(供应商号 C2,供应商名 C20,地址 C10),其记录如下:
S3振华电子厂 西安
S4华通电子公司 北京
S6607厂 郑州
S7爱华电子厂 北京
连接查询:例1:找出工资多于1230元的职工号和他们所在的城市。
SELECT 职工号,城市 FROM 职工,仓库;
WHERE(工资>1230)AND(职工.仓库号=仓库.仓库号)
结果是: E4 上海 E7 北京
短语FROM后的两个关系表,肯定有一种联系。这里的“职工.仓库号=仓库.仓库号”就是连接条件。
嵌套查询:例2:找出至少有一个仓库的职工工资为1250元的城市。
SELECT 城市 FROM 仓库 WHERE 仓库号 IN;
(SELECT 仓库号FROM 职工 WHERE 工资=1250)
结果是:北京 上海
从其形式与结果中可以看出,这类查询所要求的结果出自一个关系,但相关的条件却涉及多个关系。查询外层中的元组时,其条件依赖相关的内层关系中元组的属性值。
分组与计算查询:例3:检索出至少有两个职工的每个仓库的平均工资。
SELECT 仓库号,COUNT(*),AVG(工资) FROM职工;
GROUP BY 仓库号HAVING COUNT(*)>=2
结果是:WH1 2 1230 WH2 2 1235
上例中,如果不用分组,将会对整个关系表进行计算查询。而充分利用分组查询,可以按元组某一属性值进行分组计算,方便我们提取分类数据。使用SELECT语句构造查询的用法较多,除上述提到的基本方法外,还有利用空值查询、别名与自连接查询、内外层互相关嵌套查询、使用量词和谓词查询及超链接查询等。这里就不一一列举了,只有在平时多加运用,才能熟练掌握其用法。
二、 利用查询设计器设计查询
由于SQL SELECT语句的语法格式长且复杂,学生们用它构造查询的时候,都有些棘手。但我们用“查询设计器”可以方便地设计出查询。当然,我们首先还是要理解SELECT语句的基本语法框架。因为“查询设计器”是以SELECT语句为基础的,其界面上的各选项卡和SELECT语句的各短语是相对应的,把这些相对应的关系弄清楚了,用“查询设计器”便可以轻松地设计出各种各样的查询了。查询设计器界面上各选项卡与SELECT语句各短语的对应关系如下:①“字段”选项卡对应于SELECT短语,指定要查询的数据,这时可以单击“全部添加”选择所有字段,也可以逐个选择字段“添加”;在“函数和表达式”编辑框中可以输入或编辑计算表达式。②“连接”选项卡对应于JOIN ON短语,用于编辑连接条件。③“筛选”选项卡对应于WHERE短语,用于指定查询条件。④“排序依据”选项卡对应于ORDER BY短语,用于指定排序的字段和排序方式。⑤“分组依据”选项卡对应于GROUP BY短语和HAVING短语,用于分组。⑥“杂项”选项卡对应于可以指定是否要重复记录(对应于DISTINCT)及列在前面的记录(对应于TOP短语)等。
下面通过两个例子,介绍如何利用查询设计器来建立查询。查询要用到的关系表同上。
例1:利用分组功能统计各仓库年工资额的合计,并按年工资额降序排序。
步骤如下:①从“字段”选项卡选择并添加“职工.仓库号”字段,并在“函数和表达式”编辑框中输入表达式:SUM(职工.工资*12) AS 年工资合计,然后把它添加到“选定字段”框中。②从“分组依据”选项卡选择“职工.仓库号”字段并把它添加到“分组字段”框中。③从“排序依据”选项卡选择“职工.工资*12”字段,并把它添加到“排序条件”框中。
此时,运行查询即可得到所需要的统计结果。单击查询设计器工具栏中的显示SQL窗口图标,可以看到系统按照上述操作生成相应如下的SQL SELECT语句代码:
SELECT 职工.仓库号,SUM(职工.工资*12) AS 年工资合计;
FROM 职工ORDER BY SUM(职工.工资*12) DESC GROUP BY 职工.仓库号
上例是用查询设计器建立比较规则的查询。要想设计出复杂的查询,就要好好利用“连接”选项卡和“筛选”选项卡了。下面,以一例子来阐述用查询设计器设计较为复杂的查询。
例2:检索出和职工E1、E3都有联系的北京的供应商信息。
首先,把需要用到的表“供应商”和“订购单”添加进来。接着按如下步骤进行:①从“字段”选项卡选择“供应商.供应商号”“供应商.供应商名”“供应商.地址”字段,并把它们添加到“选定字段”框中。②从“连接”选项卡中建立“订购单.供应商号=供应商.供应商号”的内部连接关系。③从“筛选”选项卡中设置如下条件: 供应商.地址=“北京”AND供应商.供应商号 IN (SELECT 供应商号FROM订购单WHERE 职工号=“E1”) AND 供应商.供应商号IN (SELECT 供应商.供应商号FROM 订购单 WHERE职工号=“E3”)。④从“杂项”选顶卡中把“无重复记录”复选框勾上。
查询设计完毕后,即可运行查询,所得结果是:
S4 华通电子公司 北京。
单击查询设计器工具栏中的显示SQL窗口图标,可以看到系统按照上述操作生成相应如下的SQL SELECT语句代码:
SELECT DISTINCT供应商.*;
FROM供应商 INNER JOIN订购单ON订购单.供应商号=供应商.供应商号;
WHERE供应商.地址=“北京”;
AND供应商.供应商号IN (SELECT 供应商号 FROM 供应商WHERE职工号=“E1”);
AND供应商。供应商号IN (SELECT 供应商号 FROM 供应商WHERE职工号=“E3”)
上例中的(SELECT 供应商号 FROM 订购单WHERE 职工号=“E1”)和(SELECT 供应商.供应商号FROM 订购单 WHERE职工号=“E3”),是要在“筛选”选项卡中的“实例”项设计的内容。这也正是设计复杂的查询的关键所在。
三、 结束语
利用查询设计器能方便高效地设计复杂的查询,但这是要建立在对SELECT语句的句法框架有个较好的理解基础上的,同时还要明白其与查询设计器中各选项卡的对应关系。笔者在教学过程中,融入了上述方法,学生们很快便掌握了其方法技巧。在全国计算机等级考试的二级Visual FoxPro程序设计作答中,碰到在程序中需要填入SELECT查询语句时,较复杂的一般不直接写语句,同学们运用该设计方法,能够轻松正确地获得语句代码,填入程序设计答题中,既快捷又不易出现错误,取得了很好的效果。
[十堰职业技术(集团)学校]
一、 使用SELECT命令构造查询
SELECT查询命令的使用非常灵活,它的基本形式由SELECT-FROM-WHERE查询块组成,多个查询块可以嵌套执行,用它可以构造各种各样的查询。下面给出一些查询的例子来分析SELECT语句。其中需要用到相关的数据表如下:
仓库(仓库号C 3,城市C 10,面积N 3),其记录如下:
WH1 北京 370WH2 上海 500
WH3 广州 200WH4 武汉 400
职工(仓库号 C 3,职工号 C 2,工资 N 4),其记录如下:
WH2 E1 1220 WH1 E3 1210
WH2 E4 1250 WH3 E6 1230
WH1 E7 1250
订购单(职工号 C 2,供应商号 C 2,订购单号 C 4,订购日期 D),其记录如下:
E3 S7 OR67 2001/06/23
E1 S4 OR73 2001/07/28
E7 S4 OR76 2001/05/25
E6 Null OR77 Null
E3 S4 OR79 2001/06/13
E1 Null OR80 Null
E3 Null OR90 Null
E3 S3 OR91 2001/07/13
供应商(供应商号 C2,供应商名 C20,地址 C10),其记录如下:
S3振华电子厂 西安
S4华通电子公司 北京
S6607厂 郑州
S7爱华电子厂 北京
连接查询:例1:找出工资多于1230元的职工号和他们所在的城市。
SELECT 职工号,城市 FROM 职工,仓库;
WHERE(工资>1230)AND(职工.仓库号=仓库.仓库号)
结果是: E4 上海 E7 北京
短语FROM后的两个关系表,肯定有一种联系。这里的“职工.仓库号=仓库.仓库号”就是连接条件。
嵌套查询:例2:找出至少有一个仓库的职工工资为1250元的城市。
SELECT 城市 FROM 仓库 WHERE 仓库号 IN;
(SELECT 仓库号FROM 职工 WHERE 工资=1250)
结果是:北京 上海
从其形式与结果中可以看出,这类查询所要求的结果出自一个关系,但相关的条件却涉及多个关系。查询外层中的元组时,其条件依赖相关的内层关系中元组的属性值。
分组与计算查询:例3:检索出至少有两个职工的每个仓库的平均工资。
SELECT 仓库号,COUNT(*),AVG(工资) FROM职工;
GROUP BY 仓库号HAVING COUNT(*)>=2
结果是:WH1 2 1230 WH2 2 1235
上例中,如果不用分组,将会对整个关系表进行计算查询。而充分利用分组查询,可以按元组某一属性值进行分组计算,方便我们提取分类数据。使用SELECT语句构造查询的用法较多,除上述提到的基本方法外,还有利用空值查询、别名与自连接查询、内外层互相关嵌套查询、使用量词和谓词查询及超链接查询等。这里就不一一列举了,只有在平时多加运用,才能熟练掌握其用法。
二、 利用查询设计器设计查询
由于SQL SELECT语句的语法格式长且复杂,学生们用它构造查询的时候,都有些棘手。但我们用“查询设计器”可以方便地设计出查询。当然,我们首先还是要理解SELECT语句的基本语法框架。因为“查询设计器”是以SELECT语句为基础的,其界面上的各选项卡和SELECT语句的各短语是相对应的,把这些相对应的关系弄清楚了,用“查询设计器”便可以轻松地设计出各种各样的查询了。查询设计器界面上各选项卡与SELECT语句各短语的对应关系如下:①“字段”选项卡对应于SELECT短语,指定要查询的数据,这时可以单击“全部添加”选择所有字段,也可以逐个选择字段“添加”;在“函数和表达式”编辑框中可以输入或编辑计算表达式。②“连接”选项卡对应于JOIN ON短语,用于编辑连接条件。③“筛选”选项卡对应于WHERE短语,用于指定查询条件。④“排序依据”选项卡对应于ORDER BY短语,用于指定排序的字段和排序方式。⑤“分组依据”选项卡对应于GROUP BY短语和HAVING短语,用于分组。⑥“杂项”选项卡对应于可以指定是否要重复记录(对应于DISTINCT)及列在前面的记录(对应于TOP短语)等。
下面通过两个例子,介绍如何利用查询设计器来建立查询。查询要用到的关系表同上。
例1:利用分组功能统计各仓库年工资额的合计,并按年工资额降序排序。
步骤如下:①从“字段”选项卡选择并添加“职工.仓库号”字段,并在“函数和表达式”编辑框中输入表达式:SUM(职工.工资*12) AS 年工资合计,然后把它添加到“选定字段”框中。②从“分组依据”选项卡选择“职工.仓库号”字段并把它添加到“分组字段”框中。③从“排序依据”选项卡选择“职工.工资*12”字段,并把它添加到“排序条件”框中。
此时,运行查询即可得到所需要的统计结果。单击查询设计器工具栏中的显示SQL窗口图标,可以看到系统按照上述操作生成相应如下的SQL SELECT语句代码:
SELECT 职工.仓库号,SUM(职工.工资*12) AS 年工资合计;
FROM 职工ORDER BY SUM(职工.工资*12) DESC GROUP BY 职工.仓库号
上例是用查询设计器建立比较规则的查询。要想设计出复杂的查询,就要好好利用“连接”选项卡和“筛选”选项卡了。下面,以一例子来阐述用查询设计器设计较为复杂的查询。
例2:检索出和职工E1、E3都有联系的北京的供应商信息。
首先,把需要用到的表“供应商”和“订购单”添加进来。接着按如下步骤进行:①从“字段”选项卡选择“供应商.供应商号”“供应商.供应商名”“供应商.地址”字段,并把它们添加到“选定字段”框中。②从“连接”选项卡中建立“订购单.供应商号=供应商.供应商号”的内部连接关系。③从“筛选”选项卡中设置如下条件: 供应商.地址=“北京”AND供应商.供应商号 IN (SELECT 供应商号FROM订购单WHERE 职工号=“E1”) AND 供应商.供应商号IN (SELECT 供应商.供应商号FROM 订购单 WHERE职工号=“E3”)。④从“杂项”选顶卡中把“无重复记录”复选框勾上。
查询设计完毕后,即可运行查询,所得结果是:
S4 华通电子公司 北京。
单击查询设计器工具栏中的显示SQL窗口图标,可以看到系统按照上述操作生成相应如下的SQL SELECT语句代码:
SELECT DISTINCT供应商.*;
FROM供应商 INNER JOIN订购单ON订购单.供应商号=供应商.供应商号;
WHERE供应商.地址=“北京”;
AND供应商.供应商号IN (SELECT 供应商号 FROM 供应商WHERE职工号=“E1”);
AND供应商。供应商号IN (SELECT 供应商号 FROM 供应商WHERE职工号=“E3”)
上例中的(SELECT 供应商号 FROM 订购单WHERE 职工号=“E1”)和(SELECT 供应商.供应商号FROM 订购单 WHERE职工号=“E3”),是要在“筛选”选项卡中的“实例”项设计的内容。这也正是设计复杂的查询的关键所在。
三、 结束语
利用查询设计器能方便高效地设计复杂的查询,但这是要建立在对SELECT语句的句法框架有个较好的理解基础上的,同时还要明白其与查询设计器中各选项卡的对应关系。笔者在教学过程中,融入了上述方法,学生们很快便掌握了其方法技巧。在全国计算机等级考试的二级Visual FoxPro程序设计作答中,碰到在程序中需要填入SELECT查询语句时,较复杂的一般不直接写语句,同学们运用该设计方法,能够轻松正确地获得语句代码,填入程序设计答题中,既快捷又不易出现错误,取得了很好的效果。
[十堰职业技术(集团)学校]