下面和大家分享一个比较经典的场景,数据库的面试题目,主要的表是学生、课程、成绩、教师四张表,本示例的特点是有模拟数据,加深理解和印象,答案主要基于Oracle来实现的
1、四张表分别为:
Student(S#,Sname,Sage,Ssex) 学生表 S#:学号;Sname:学生姓名;Sage:学生年龄;Ssex:学生性别
Course(C#,Cname,T#) 课程表 C#:课程编号;Cname:课程名字;T#:教师编号
SC(S#,C#,score) 成绩表 S#:学号;C#,课程编号;score:成绩
Teacher(T#,Tname) 教师表 T#:教师编号; Tname:教师名字
2、题目要求
1、查询“111”课程比“112”课程成绩高的所有学生的学号; 2、查询平均成绩大于60分的同学的学号和平均成绩; 3、查询所有同学的学号、姓名、选课数、总成绩; 4、查询姓“李”的老师的个数; 5、查询没学过'陈奕迅'老师课的同学的学号、姓名; 6、查询学过“001”并且也学过编号“002”课程的同学的学号、姓名; 7、查询学过“叶平”老师所教的所有课的同学的学号、姓名; 8、查询课程编号“002”的成绩比课程编号“001”课程低的所有同学的学号、姓名 9、查询所有课程成绩小于60分的同学的学号、姓名 10、查询没有学全所有课的同学的学号、姓名 11、查询至少有一门课与学号为“1001”的同学所学相同的同学的学号和姓名 12、查询至少学过学号为“001”同学所有一门课的其他同学学号和姓名 13、把“SC”表中“叶平”老师教的课的成绩都更改为此课程的平均成绩 14、查询和“1002”号的同学学习的课程完全相同的其他同学学号和姓名 15、删除学习'陈奕迅'老师课的SC表记录 16、向SC表中插入一些记录,这些记录要求符合以下条件:没有上过编号“003”课程的同学学号、2号课的平均成绩 17、按平均成绩从高到低显示所有学生的“语文1”、“生物2”、“化学1”三门的课程成绩,按如下形式显示 18、查询各科成绩最高和最低的分:以如下形式显示:课程ID,最高分,最低分 19、按各科平均成绩从低到高和及格率的百分数从高到低顺序 20、查询如下课程平均成绩和及格率的百分数(用"1行"显示) 21、查询不同老师所教不同课程平均分从高到低显示 22、查询如下课程成绩第 3 名到第 6 名的学生成绩单:语文1(111),语文2(112),数学1 (113),数学2(114) 23、统计列印各科成绩,各分数段人数:课程ID,课程名称,[100-85] 优秀人数,[85-70] 良好人数,[70-60] 一般人数,[ <60] 刚及格人数 24、查询学生平均成绩及其名次 25、查询各科成绩前三名的记录:(不考虑成绩并列情况) 26、查询每门课程被选修的学生数 27、查询出只选修了一门课程的全部学生的学号和姓名 28、查询男生、女生人数 29、查询名字中有'黑'的学生名单 30、查询同名同性学生名单,并统计同名人数
32、查询每门课程的平均成绩,结果按平均成绩升序排列,平均成绩相同时,按课程号降序排列 33、查询平均成绩大于85的所有学生的学号、姓名和平均成绩 34、查询课程名称为'语文1',且分数低于60的学生姓名和分数 35、查询所有学生的选课情况 36、查询任何一门课程成绩在70分以上的姓名、课程名称和分数 37、查询不及格的课程,并按课程号从大到小排列 38、查询课程编号为003且课程成绩在80分以上的学生的学号和姓名 39、求选了课程的学生人数 40、查询选修“叶平”老师所授课程的学生中,成绩最高的学生姓名及其成绩 41、查询各个课程及相应的选修人数 42、查询不同课程成绩相同的学生的学号、课程号、学生成绩 43、查询每门功成绩最好的前两名 44、统计每门课程的学生选修人数(超过10人的课程才统计)。要求输出课程号和选修人数,查询结果按人数降序排列,查询结果按人数降序排列,若人数相同,按课程号升序排列 45、检索至少选修两门课程的学生学号 46、查询全部学生都选修的课程的课程号和课程名 47、查询没学过'陈奕迅'老师讲授的任一门课程的学生姓名 48、查询两门以上不及格课程的同学的学号及其平均成绩 49、检索'114'课程分数小于60,按分数降序排列的同学学号 50、删除'2'同学的'111'课程的成绩
3、在数据库建表
/*====================================*/ /*===== CREATE TABLE ======*/ /*====================================*/ --学生表 CREATE TABLE STUDENT ( S# NUMBER(12,0) PRIMARY KEY, SNAME VARCHAR2(10) NOT NULL, SAGE NUMBER(3,0) NOT NULL, SSEX CHAR(2) NOT NULL ); COMMENT ON TABLE STUDENT IS '学生信息表'; COMMENT ON COLUMN STUDENT.S# IS '学号'; COMMENT ON COLUMN STUDENT.SNAME IS '学生姓名'; COMMENT ON COLUMN STUDENT.SAGE IS '学生年龄'; COMMENT ON COLUMN STUDENT.SSEX IS '学生性别'; --课程表 CREATE TABLE COURSE ( C# NUMBER(12,0) PRIMARY KEY, CNAME VARCHAR2(10) NOT NULL, T# NUMBER(12,0) NOT NULL ); COMMENT ON TABLE COURSE IS '课程表'; COMMENT ON COLUMN COURSE.C# IS '课程编号'; COMMENT ON COLUMN COURSE.CNAME IS '课程名字'; COMMENT ON COLUMN COURSE.T# IS '教师编号'; --成绩表 CREATE TABLE SC ( S# NUMBER(12,0), C# NUMBER(12,0), SCORE NUMBER(3,0) NOT NULL ); ALTER TABLE SC ADD CONSTRAINTS PK_SC PRIMARY KEY (S#,C#); COMMENT ON TABLE SC IS '成绩表'; COMMENT ON COLUMN SC.S# IS '学号'; COMMENT ON COLUMN SC.C# IS '课程编号'; COMMENT ON COLUMN SC.SCORE IS '成绩'; --教师表 CREATE TABLE TEACHER ( T# NUMBER(12,0) PRIMARY KEY, TNAME VARCHAR2(10) NOT NULL ); COMMENT ON TABLE TEACHER IS '教师表'; COMMENT ON COLUMN TEACHER.T# IS '教师编号'; COMMENT ON COLUMN TEACHER.TNAME IS '教师名字';
*注:别的数据库将备注修改成相应的格式
4、模拟数据
学生表
--学生表 INSERT INTO STUDENT(S#,SNAME,SAGE,SSEX) VALUES(1,'小红',10,'女'); INSERT INTO STUDENT(S#,SNAME,SAGE,SSEX) VALUES(2,'小明',12,'男'); INSERT INTO STUDENT(S#,SNAME,SAGE,SSEX) VALUES(3,'小绿',13,'男'); INSERT INTO STUDENT(S#,SNAME,SAGE,SSEX) VALUES(4,'小蓝',15,'男'); INSERT INTO STUDENT(S#,SNAME,SAGE,SSEX) VALUES(5,'小青',11,'男'); INSERT INTO STUDENT(S#,SNAME,SAGE,SSEX) VALUES(6,'小白',10,'女'); INSERT INTO STUDENT(S#,SNAME,SAGE,SSEX) VALUES(7,'小紫',14,'女'); INSERT INTO STUDENT(S#,SNAME,SAGE,SSEX) VALUES(8,'小黄',13,'男'); INSERT INTO STUDENT(S#,SNAME,SAGE,SSEX) VALUES(9,'小粉',12,'女'); INSERT INTO STUDENT(S#,SNAME,SAGE,SSEX) VALUES(10,'小橙',11,'女'); INSERT INTO STUDENT(S#,SNAME,SAGE,SSEX) VALUES(11,'小黑',9,'男'); INSERT INTO STUDENT(S#,SNAME,SAGE,SSEX) VALUES(12,'小粉',14,'男');
课程表
INSERT INTO COURSE(C#,CNAME,T#) VALUES(111,'语文1',50); INSERT INTO COURSE(C#,CNAME,T#) VALUES(112,'语文2',51); INSERT INTO COURSE(C#,CNAME,T#) VALUES(113,'数学1',52); INSERT INTO COURSE(C#,CNAME,T#) VALUES(114,'数学2',53); INSERT INTO COURSE(C#,CNAME,T#) VALUES(115,'英语1',54); INSERT INTO COURSE(C#,CNAME,T#) VALUES(116,'英语2',55); INSERT INTO COURSE(C#,CNAME,T#) VALUES(117,'生物1',56); INSERT INTO COURSE(C#,CNAME,T#) VALUES(118,'生物2',57); INSERT INTO COURSE(C#,CNAME,T#) VALUES(119,'物理1',58); INSERT INTO COURSE(C#,CNAME,T#) VALUES(120,'物理2',59); INSERT INTO COURSE(C#,CNAME,T#) VALUES(121,'化学1',60); INSERT INTO COURSE(C#,CNAME,T#) VALUES(122,'化学2',61); INSERT INTO COURSE(C#,CNAME,T#) VALUES(123,'政治1',50); INSERT INTO COURSE(C#,CNAME,T#) VALUES(124,'政治2',54); INSERT INTO COURSE(C#,CNAME,T#) VALUES(125,'历史1',58); INSERT INTO COURSE(C#,CNAME,T#) VALUES(126,'历史2',53); INSERT INTO COURSE(C#,CNAME,T#) VALUES(127,'地理1',56); INSERT INTO COURSE(C#,CNAME,T#) VALUES(128,'地理2',60);
成绩表
INSERT INTO SC(S#,C#,SCORE) VALUES(1,111,69); INSERT INTO SC(S#,C#,SCORE) VALUES(1,112,80); INSERT INTO SC(S#,C#,SCORE) VALUES(1,