|
(3)有如下表(30分)
S(S#,SN,SD,SA)S#,SN,SD,SA分别代表学号,学员姓名,所属单位,学员年龄
C(C#,CN)C#,CN分别代表课程编号,课程名称
SC(S#,C#,G) S#,C#,G分别代表学号,所选的课程编号,学习成绩
问题一:查询选修课程名称为’税收基础’的学员学号和姓名?
select S#,SN from S where s# in
(select S# from C,SC where C.C#=SC.C# and CN='税收基础');
问题二:查询选修课程编号为’C2’的学员姓名和所属单位?
select SN,SD from S,SC where S.S#=SC.S# and SC.C#='C2';
问题三:查询不选修课程编号为’C5’的学员姓名和所属单位?
select SN,SD from S
where S# not in (select S# from SC where C#='C5');
问题四:查询选修课程超过5门的学员学号和所属单位?
select SN,SD from S where S# in
( select S# from SC group by S# having count(distinct C#)>5);
问题五:查询表A中存在ID重复三次以上的记录?
select * from(select count(ID) as count from A group by ID)tt where tt.count>3;
问题六:查询选修了课程的学员人数?
select count(distinct S#) from SC;
3. 假设存在名为AAA的数据库,包括S(S# char(8),SN varchar(8),AGE int,DEPT varchar(20),DateT DateTime)和SC(S# char(8),CN varchar(10),GRADE numeric(5,2))两张表。请按下列要求写一存储过程。
问题1:修改SC表中学号为@s1的值、课程名为@c1的值的学生成绩为@g1的值。(10分)
create or replace procedure proc01( @s1 in char(8),@c1 in varchar(10),@g1 in numeric(5,2) )
is
begin
update SC set GRADE==@g1 where S#=@s1 and CN=@c1;
end proc01;
问题2:写一个存储过程,要求传入一个表名,一预估表行数的开始和结束值,判断该表实际的记录数是否在指定范围内并给出输出提示 (假设传入的表在数据库中都存在)(10分)
create or replace procedure proc02(@tablename in varchar(10))
is
fag number;
start_row number :=0;
end_row number :=100;
begin
select count(*) into fag from @tablename;
if fag>=0 then
if fag <=100 then
dbms_output.put.line("The table note at intending");
end if;
else
dbms_output.put.line("The don't table note at intending"); |
|