下面是一个设备管理数据库,包括四张表。 <?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

设备清单表

<?xml:namespace prefix = v ns = "urn:schemas-microsoft-com:vml" /> 设备大修表

部门代码表

增值表

 

问题:

1. 找出价格低于 20000 元的设备名称、启用日期与部门

Select 名称 , 启用日期 , 部门 , 价格 from 设备清单表 ;

where 价格 <20000

2. : 查询大修过的设备的编号、名称和部门名

Select 设备大修表 . 编号 , 设备清单表 . 名称 , 部门代码表 . 名称 ;

as 部门名 from 设备清单表 , 设备大修表 , 部门代码表 ;

where 设备大修表 . 编号 = 设备清单表 . 编号 ;

And 部门代码表 . 代码 = 设备清单表 . 部门

3. 将设备清单表的记录按部门升序排列 , 部门相同时按价格降序排列 .

Select * from 设备清单表 order by 部门 , 价格 desc

4. 求出每一设备的增值金额 .

Select 设备清单表 . 名称 ,sum( 增值表 . 增值 ) from 增值表 , 设备清单表 ;

Where 设备清单表 . 编号 = 增值表 . 编号 group by 增值表 . 编号

5.  求出各部门的设备总价

方法一 :

Select 部门 ,sum( 价格 ) from 设备清单表 group by 部门

方法二 :

Select 设备清单表 . 部门 ,sum( 设备清单表 . 价格 ), 部门代码表 . 名称 ;

from 设备清单表 , 部门代码表 ;

 where 部门代码表 . 代码 = 设备清单表 . 部门 ;

 group by 设备清单表 . 部门

6. 找出大修费用已超过 5000 元的设备 , 并将结果存入数组 y

Select 编号 from 设备大修表 group by 编号 ;

Having sum( 费用 )>5000 Into array y

注意: 在存在 group by 子句时 , 设置查询条件应用 having 子句 , 而不是 where 子句 .

7. 求出设备总价超过 20000 元的部门

Select 部门代码表 . 名称 ,sum( 设备清单表 . 价格 ) ;

from 部门代码表 , 设备清单表 ;

where 部门代码表 . 代码 = 设备清单表 . 部门 ;

group by 设备清单表 . 部门 having sum( 设备清单表 . 价格 ) >20000

8. 查找增值设备的编号、名称及每次增值的金额。

  方法 1

  SELECT 设备清单表 . 编号 , 设备清单表 . 名称 , 增值表 . 增值 ;

FROM 设备清单表 INNER JOIN 增值表 ;

 ON 设备清单表 . 编号 = 增值表 . 编号

或者   SELECT 设备清单表 . 编号 , 设备清单表 . 名称 , 增值表 . 增值 ;

FROM 增值表 INNER JOIN 设备清单表 ;

ON 设备清单表 . 编号 = 增值表 . 编号

方法 2

 SELECT 设备清单表 . 编号 , 设备清单表 . 名称 , 增值表 . 增值 ;

 FROM 设备清单表 , 增值表 ;

WHERE 设备清单表 . 编号 = 增值表 . 编号

9. 试汇总设备的大修费用,要求:

 (1) 编号头三位小于 038

 (2) 显示设备名称与大修费用小计

 (3) 显示结果按大修费用小计降序排列

  方法一 :

  SELECT 设备清单表 . 名称 ,SUM( 设备大修表 . 费用 ) ;

FROM 设备清单表 INNER JOIN 设备大修表 ;

 ON 设备清单表 . 编号 = 设备大修表 . 编号 ;

    WHERE LEFT( 设备大修表 . 编号 ,3)<“<?xml:namespace prefix = st1 ns = "urn:schemas-microsoft-com:office:smarttags" />038”;

    GROUP BY 设备大修表 . 编号 ORDER BY 2 DESC

方法二 :

SELECT 设备清单表 . 名称 ,SUM( 设备大修表 . 费用 );

 FROM 设备清单表 , 设备大修表 ;

   WHERE 设备大修表 . 编号 = 设备清单表 . 编号 AND ;

   LEFT( 设备清单表 . 编号 ,3)<“038”;

   GROUP BY 设备大修表 . 编号 ;

   ORDER BY 2 DESC

10. 查询价格小于 10 万元的设备的启用日期。

Select 名称 , 启用日期 from 设备清单表 where 价格 <100000

11. 查询车间使用的设备或价格不小于 10 万元的设备的部门名,查询结果按启用日期从小到大排列。

Select 设备清单表 . 名称 , 设备清单表 . 价格 , 设备清单表 . 启用日期 ,;

部门代码表 . 名称 from 设备清单表 , 部门代码表 ;

Where 设备清单表 . 部门 = 部门代码表 . 代码 ;

and (“ 车间 ”$ 部门代码表 . 名称 or 设备清单表 . 价格 >=100000);

 order by 设备清单表 . 启用日期

12. 查询 1990 年启用的设备的名称和部门名。

Select 设备清单表 . 名称 , 部门代码表 . 名称 , 设备清单表 . 启用日期 ;

from  设备清单表 , 部门代码表 ;

where 设备清单表 . 部门 = 部门代码表 . 代码 and ;

year( 设备清单表 . 启用日期 )=1990

13. 查询大修过的设备的编号和名称,查询结果输出到表 RESULT.DBF

Select 设备大修表 . 编号 , 设备清单表 . 名称 ;

From  设备清单表 , 设备大修表 ;

Where 设备清单表 . 编号 = 设备大修表 . 编号 into dbf result.dbf

14. 查询有增值的设备的设备名和部门名。

Select 设备清单表 . 名称 , 部门代码表 . 名称 , 增值表 . 增值 ;

From 设备清单表 , 部门代码表 , 增值表 ;

Where 设备清单表 . 部门 = 部门代码表 . 代码 and ;

设备清单表 . 编号 = 增值表 . 编号

15. 试算出 1992 年启用的主要设备的台数。

Select count( 编号 ) from 设备清单表 where 主要设备 =.t. ;

And year( 启用日期 )=1992

16. 试算出大修过的设备中每种设备大修费用的平均值。

Select 设备清单表 . 名称 ,avg( 设备大修表 . 费用 ) ;

From 设备清单表 , 设备大修表 ;

Where 设备清单表 . 编号 = 设备大修表 . 编号 ;

group by 设备大修表 . 编号

17 .查询最早启用和最晚启用的设备。

方法一 :

Select max( 启用日期 ),min( 启用日期 ) from 设备清单表 ;

Into array x

Select 名称 , 启用日期 from 设备清单表 ;

Where 启用日期 =x(1) or 启用日期 =x(2)

方法二 :

Select 名称 , 启用日期 from 设备清单表 ;

where 启用日期 =(Select max( 启用日期 ) from 设备清单表 ) ;

or 启用日期 =(Select min( 启用日期 ) from 设备清单表 )

注释 : 方法二属于嵌套查询 .