数据库面试题(4)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
数据库面试题
四数据库写 SQL题( 30)
1.按要求写 SQL语句:根据集团成员培训业务,建立以下三张表:
S (S#,SN,SD,SA) S#,SN,SD,SA 分别代表学号、学员姓名、所属单位、学员年龄
C (C#,CN ) C#,CN 分别代表课程编号、课程名称
SC ( S#,C#,G ) S#,C#,G分别代表学号、所选修的课程编号、学习成绩
要求如下:
1)使用标准 SQL语句查询成员名单中所属单位叫“技术一部”的人员总数及
平均年龄;
2)使用标准的 SQL语句更新学号为‘S#1’的姓名为“Mike”;
3)使用嵌套语句查询选修课程编号为‘C2’的学员姓名和所属单位;
4)使用嵌套语句查询不选修课程编号为‘C5’的学员姓名和所属单位;
5)查询选修课程超过 5门的学员学号和所属单位;
解答:
1) select count(SN),avg(SA) from S where SD='技术一部';
2) update S set SN='Mike' where S#='S#1';
3) select SN,SD from S where S#=(select S# from SC where C#='C2');
4) select SN,SD from S where S# not in(select S# from SC where C#='C5');
5) select S#,SD from S where S#=
(select S# from SC group by S# having count(S#)>=5);
2.请根据以下四张表(其中course_t表的 teacher_id字段是teacher_t表的 id字段的外键引用),
拼写出相应的sql语句(oracle语法)。(15分)
学生表:students_t
id name sex
001赵学生 Male
002钱学生 Male
003孙学生 Male
004李学生 Female
005周学生 Female
………
教师表:teacher_t
id name sex
001吴老师 Male
002郑老师 Male
003王老师 Male
004刘老师 Female
005张老师 Female
课程表:course_t
id name credit teacher_id
001语文 3 001
002数学 3 002
003英语 4 003
004物理 3 004
005化学 2 005
006政治 1 001
007生物 1 005
008计算机 2 005
选课表:student_course_t
id student_id course_id
001 001 001
002 001 002
003 001 003
004 002 001
005 002 007
………
1)统计每个学生选修的学分,并按学分降序排序
2)统计每个学生选修的所有课程和对应的任课老师;并按学生 Id和课程 Id排序
3)统计所有学生、所有课程和所有任课老师的对应关系;并按学生 Id和课程 Id排序
解答:
1)select sc.student_id,count(c.credit)
from students_t s, course_t c, student_course_t sc
where s.id=sc.student_id and c.id=sc.course_id group by
sc.student_id order by count(c.credit);
2) select as s_name, as c_name , as t_name
from students_t s, course_t c, student_course_t sc,teacher_t t
where s.id=sc.student_id and c.id=sc.course_id and t.id=c.teacher_id order by s.id,c.id;
3)与 2)相同
3.假设有以下的两个表:
Cus_A
ID* Name Address
………
Cus_B
ID* Name Address
………
*主键
表 Cus_A 和表 Cus_B的结构完全相同,表 Cus_A 和表 Cus_B中既存在 ID相同的记录,也存在 ID不
同的记录。现要求将ID只存在于表表Cus_A 中而不存在于表Cus_B中的记录全部插入到Cus_B表中,
并用表 Cus_A中的记录更新 Cus_B中相同的 ID的记录,请写出完成这一功能的存储过程。解答:
create or replace procedure test
is
cust_record cus_a%rowtype ;
cursor cust_cursor is select id,name,address from cus_a;
Begin
Open cust_cursor;
LOOP
Fetch cust_cursor into cust_record;
EXIT WHEN cust_cursor %NOTFOUND;
--先删除在插入
delete from cus_b where id=cust_record.id;
insert into cus_b values(cust_record.id, cust_, cust_record.address);
END LOOP;
end;
4、已有“成绩”如下表所示:
学号课程号分数
S1 C1 80
S1 C2 75