Chinaunix首页 | 论坛 | 博客
  • 博客访问: 86595
  • 博文数量: 14
  • 博客积分: 2010
  • 博客等级: 大尉
  • 技术积分: 305
  • 用 户 组: 普通用户
  • 注册时间: 2007-08-01 19:49
文章分类

全部博文(14)

文章存档

2011年(1)

2008年(13)

我的朋友
最近访客

分类: 数据库开发技术

2008-03-11 22:15:24

问题说明:有三个表,项目表、合同表、付款表
一个项目可能会有签署多个合同,每个合同会分几次付款。

--下面是建立表的语句
create table 项目(项目编号 int,项目名称 varchar(50))
insert 项目
select 1, '项目1'
union
select 2, '项目2'
union
select 3, '项目3'


create table 合同(合同编号 int,项目编号 int,合同金额 numeric(7,3))

insert 合同
select 1,1,1000
union
select 2,1,1500
union
select 3,2,2000

create table 付款(付款编号 int,合同编号 int,付款金额 numeric(7,3))

insert 付款
select 1,1,100
union
select 2,2,200
union
select 3,2,800

 

问题(一):
设计一个查询,要求返回结果如下:
----------------------------------------------------------
项目编号    项目名称             项目所有合同的金额     
----------- ------------------------ ---------------------
1           项目1                    2500
2           项目2                    2000
3           项目3                    NULL

解答:

select a.项目编号,a.项目名称,sum(b.项目金额) from 项目 a  left join 合同 b on a.项目编号 = b.项目编号 group by a.项目编号,a.项目名称
如果将"left join" 改为 "join" 返回结果如下:
----------------------------------------------------------
项目编号    项目名称             项目所有合同的金额     
----------- ------------------------ ---------------------
1           项目1                    2500
2           项目2                    2000

问题(二):
设计一个查询,要求返回结果如下:
----------------------------------------------------------
项目编号    项目名称             项目所有付款的金额     
----------- ------------------------ ---------------------
1           项目1                    1100

2           项目2                    null

3           项目3                    NULL

解答:

select a.项目编号,a.项目名称,sum(b.付款金额) 项目所有合同金 from
项目 a left join 合同 c on a.项目编号 = c.项目编号 left join 付款 b on c.合同编号 = b.合同编号 group by a.项目编号,a.项目名称

如果将第一个left join 改为 join。返回结果如下:
----------------------------------------------------------
项目编号    项目名称             项目所有付款的金额     
----------- ------------------------ ---------------------
1           项目1                    1100

2           项目2                    null

如果将两个left join 改为 join。返回结果如下:

----------------------------------------------------------
项目编号    项目名称             项目所有付款的金额     
----------- ------------------------ ---------------------
1           项目1                    1100

问题(三):
设计一个查询,要求返回结果如下:
--------------------------------------
项目编号    项目所有合同已付款金额   
----------- --------------------------
1           1100
2           NULL
--------------------------------------

 

select a.项目编号,sum(c.付款金额)

from 项目 a right join 合同 b on a.项目编号 = b.项目编号 left join 付款 c on b.合同编号 =c.合同编号

 一 单词解释(2分/个) 34

  Data 数据Database 数据库RDBMS 关系数据库管理系统GRANT 授权

  REVOKE取消权限DENY 拒绝权限DECLARE 定义变量PROCEDURE存储过程

  Transaction事务TRIGGER触发器继续 continue唯一 unqiue

  主键 primary key标识列 identity外键 foreign kdy 检查 check

  约束 constraint

  二 编写SQL语句(5分/题)50

  1) 创建一张学生表,包含以下信息,学号,姓名,年龄,性别,家庭住址,联系电话

  Create table stu (学号 int ,

  姓名 varchar(8),

  年龄 int,

  性别 varchar(4),

  家庭地址 varchar(50),

  联系电话 int

  );

  2) 修改学生表的结构,添加一列信息,学历

  Alter table stu add 学历 varchar(6);

  3) 修改学生表的结构,删除一列信息,家庭住址

  Alter table stu drop column 家庭地址

  4) 向学生表添加如下信息:

  学号 姓名年龄性别联系电话学历

  1A22男123456小学

  2B21男119中学

  3C23男110高中

  4D18女114大学

  Insert into stu values(1,’A’,22,’男’,123456,’小学’)

  Insert into stu values(2,’B’,21,’男’,119,’中学’)

  Insert into stu values(3,’C’,23,’男’,110,’高中’)

  Insert into stu values(4,’D’,18,’女’,114,’大学’)

阅读(1791) | 评论(1) | 转发(0) |
0

上一篇:没有了

下一篇:oracle 部分问题解答

给主人留下些什么吧!~~

chinaunix网友2009-06-19 19:58:24

答案呢 SQL编程题目2