《管理信息系统》上机(1207)
数据库的设计与实施
MIS应用程序设计初步
实验环境:个人计算机,WindowsXP操作系统,VisualFoxPro6.0数据库管理软件。
实验内容:
一、SQL查询进阶
1、设置适当文件夹为默认目录。
2、创建“订货管理”数据库。
3、将客户表、订货表和订货明细表添加到该数据库中。
以下任务用SQL命令完成。
4、查询所有客户的客户名、订单号和地址。
select客户名,订单号,地址from客户,订货where客户.客户号=订货.客户号
注:此查询涉及的数据来自多个表,属多表查询。此类查询要求基本连接条件,即表间所有公共字段的值均要分别相等。客户表和订货表有唯一公共字段客户号,故有基本连接条件:客户.客户号=订货.客户号。
5、查询所有订单的订购器件名、订购日期和数量。
6、查询单价最低的2条订货记录。
selecttop2from订货明细orderby单价
注:orderby用于对查询结果排序,默认是升序(asc),降序为desc,topn表示输出最前面的n条记录。
7、查询订购数量最多的4条订购记录。
8、查询每个订单的订单号以及订购总金额。
select订单号,sum(单价数量)from订货明细groupby订单号
注:groupby用于对记录分组,订单号值相同的为一组,分组后集合函数,如求和函数sum,对每个分组分别求和。
9、查询至少有3个订单订购了的器件名和相应的订单数量。
selectcount()as订单数量,器件名from订货明细groupby器件号havingcount()>2
注:having条件通常和groupby联合使用,用于选择满足条件的分组。count()as订单数量用于给count()输出列取别名,即订单数量。
10、查询至少订购了3种器件的订单号和相应的订购器件数量。
11、查询订购总量最多的3种器件名以及相应的订购总量。
selecttop3sum(数量)as订购总量,器件名from订货明细groupby器件号orderby订购总量desc
12、查询客户表中无记录的订单号(即无相应客户号的订单号)。
selectdistinct订单号from订货明细where订单号notin(select订单号from订货)
注:此为嵌套查询。括号内为子查询,外为父查询。查询出订货明细表中没有在订货表中出现的订单号。Distinct的作用是去掉查询结果中的重复行。
13、查询没有订货记录的客户的客户名。
14、将查询8的查询结果输出到数组中,写出简要的测试结论。
select订单号,sum(单价数量)from订货明细groupby订单号intoarrayaa
注:intoarray表示将查询结果输出到某数组中。本例中数组aa保存了所有查询结果。在命令窗口中测试该数组元素的值,语法形式为:aa(n),aa为数组名,整数n为下标。例如
?aa(1)
将输出数组aa的第一个元素值。
15、将查询8的查询结果输出到表中保存。
select订单号,sum(单价数量)from订货明细groupby订单号intotable查询8
注:intotable或intodbf的作用是将查询结果保存到一个表中。本命令执行后将生成查询8.dbf表文件,观察其内容。
16、用命令将表查询8删除。
17、查询客户号为“C10001”客户的订购明细(包含订购日期)。
18、查询绝对价格波动(最高价与最低价之差)最小的4种器件的器件名以及相应的差价。
selecttop4器件名,max(单价)-min(单价)as差价from订货明细groupby器件号orderby差价
19、查询最新一笔订单的订货明细以及订购日期。
select订货明细.,max(订购日期)from订货,订货明细where订货明细.订单号=订货.订单号
二、用vfp向导创建窗口程序
创建一窗口(表单)程序,其功能是对客户表数据进行浏览、修改、添加和删除等常规操作和管理。
步骤如下:
1)文件|新建选择表单选项,点向导按钮;
2)选择表单向导
3)选择客户表的所有字段
4)选择浮雕式表单样式
5)设置客户号升序为记录排序次序
6)设置表单标题为客户信息管理,保存并运行表单程序。
7)在该表单中,将客户号为“B21001”记录的地址修改为“生命科技园A1号”;添加一个新客户记录:
客户号:A30112客户名:寰宇网络
地址:科星大道1066号电话:77695233
三、创建简单表单程序
用新建表单方式创建如下界面的表单窗口,要求:
1)表单中有2个标签,2个文本框,1个命令按钮;
2)设置表单的对象的适当属性值,使得表单不能最大化;
选中表单对象,在属性窗口中,选中maxbutton属性,将其值修改为.F.。
3)设置订单总金额文本框对象的适当属性值,使得只能在其中显示输出数据,而不能输入修改数据;
选中订单总金额对象,在属性窗口中,选中readonly属性,将其值修改为.T.。
4)用户在订单号文本框中输入订单号,然后点查询按钮,若订货明细表中存在该订单号,则在订单总金额文本框中显示总金额,否则弹出“没有这个定单!”消息框。
提示:
1)弹出消息框语句的语法是:messagebox(提示信息,样式,标题)。
如:messagebox(“登陆成功!”,0,“用户登陆”)
2)用查询命令查找表中记录时,若找到满足条件的记录,则found()函数返回.t.,否则返回.f.。
3)条件语句语法是:
If条件表达式
语句块1
Else
语句块2
Endif
功能是:若条件表达式成立,则指定语句块1,否则执行语句块2(如果有)。
4)vfp数据统计命令与SQL统计函数类似:
Average范围数值表达式for条件to变量
sum范围数值表达式for条件to变量
count范围for条件to变量
以上命令分别统计平均值、求和、记录个数,并可将结果保存到变量中。
解答:双击查询命令按钮,在弹出的程序设计窗口中,选中command1对象的click过程,在该过程中编写如下代码:
settalkoff
use订货明细
locateallforALLTRIM(订单号)==ALLTRIM(thisform.text1.value)
iffound()
sum单价数量toxforALLTRIM(订单号)==ALLTRIM(thisform.text1.value)
thisform.text2.value=x
else
thisform.text2.value=""
messagebox("没有这个订单!",0,"订单金额查询")
endif
use
settalkon
|
|