题干:
1 create table student( 2 sno varchar2(10) primary key, 3 sname varchar2(20), 4 sage number(2), 5 ssex varchar2(5) 6 ); 7 create table teacher( 8 tno varchar2(10) primary key, 9 tname varchar2(20) 10 ); 11 create table course( 12 cno varchar2(10), 13 cname varchar2(20), 14 tno varchar2(20), 15 constraint pk_course primary key (cno,tno) 16 ); 17 create table sc( 18 sno varchar2(10), 19 cno varchar2(10), 20 score number(4,2), 21 constraint pk_sc primary key (sno,cno) 22 ); 23 /*******初始化学生表的数据******/ 24 insert into student values (‘s001‘,‘张三‘,23,‘男‘); 25 insert into student values (‘s002‘,‘李四‘,23,‘男‘); 26 insert into student values (‘s003‘,‘吴鹏‘,25,‘男‘); 27 insert into student values (‘s004‘,‘琴沁‘,20,‘女‘); 28 insert into student values (‘s005‘,‘王丽‘,20,‘女‘); 29 insert into student values (‘s006‘,‘李波‘,21,‘男‘); 30 insert into student values (‘s007‘,‘刘玉‘,21,‘男‘); 31 insert into student values (‘s008‘,‘萧蓉‘,21,‘女‘); 32 insert into student values (‘s009‘,‘陈萧晓‘,23,‘女‘); 33 insert into student values (‘s010‘,‘陈美‘,22,‘女‘); 34 commit; 35 /******************初始化教师表***********************/ 36 insert into teacher values (‘t001‘, ‘刘阳‘); 37 insert into teacher values (‘t002‘, ‘谌燕‘); 38 insert into teacher values (‘t003‘, ‘胡明星‘); 39 commit; 40 /***************初始化课程表****************************/ 41 insert into course values (‘c001‘,‘J2SE‘,‘t002‘); 42 insert into course values (‘c002‘,‘Java Web‘,‘t002‘); 43 insert into course values (‘c003‘,‘SSH‘,‘t001‘); 44 insert into course values (‘c004‘,‘Oracle‘,‘t001‘); 45 insert into course values (‘c005‘,‘SQL SERVER 2005‘,‘t003‘); 46 insert into course values (‘c006‘,‘C#‘,‘t003‘); 47 insert into course values (‘c007‘,‘JavaScript‘,‘t002‘); 48 insert into course values (‘c008‘,‘DIV+CSS‘,‘t001‘); 49 insert into course values (‘c009‘,‘PHP‘,‘t003‘); 50 insert into course values (‘c010‘,‘EJB3.0‘,‘t002‘); 51 commit; 52 /***************初始化成绩表***********************/ 53 insert into sc values (‘s001‘,‘c001‘,78.9); 54 insert into sc values (‘s002‘,‘c001‘,80.9); 55 insert into sc values (‘s003‘,‘c001‘,81.9); 56 insert into sc values (‘s004‘,‘c001‘,60.9); 57 insert into sc values (‘s001‘,‘c002‘,82.9); 58 insert into sc values (‘s002‘,‘c002‘,72.9); 59 insert into sc values (‘s003‘,‘c002‘,81.9); 60 insert into sc values (‘s001‘,‘c003‘,‘59‘); 61 commit;
题目及解答
1 SQL> --1、查询“c001”课程比“c002”课程成绩高的所有学生的学号; 2 SQL> select a.sno from sc a, sc b where a.cno = ‘c001‘ and b.cno = ‘c002‘ and a.score > b.score and a.sno = b.sno; 3 SNO 4 ---------- 5 s002 6 7 SQL> --2、查询平均成绩大于60 分的同学的学号和平均成绩; 8 9 SQL> select sno, avg(score) from sc group by sno having avg(score) > 60; 10 SNO AVG(SCORE) 11 ---------- ---------- 12 s003 81.9 13 s004 60.9 14 s001 73.6 15 s002 76.9 16 17 SQL> --3、查询所有同学的学号、姓名、选课数、总成绩; 18 SQL> select s.sno, s.sname, count(cno), sum(score) from sc c, student s where c.sno = s.sno group by s.sno, s.sname; 19 SNO SNAME COUNT(CNO) SUM(SCORE) 20 ---------- -------------------- ---------- ---------- 21 s001 张三 3 220.8 22 s003 吴鹏 2 163.8 23 s004 琴沁 1 60.9 24 s002 李四 2 153.8 25 26 SQL> ----4、查询姓“刘”的老师的个数; 27 SQL> select count(1) from teacher where tname like ‘刘%‘ group by tname; 28 COUNT(1) 29 ---------- 30 1 31 32 SQL> ----5、查询没学过“谌燕”老师课的同学的学号、姓名; 33 SQL> select sno, sname from student where sno not in (select sno from sc c, teacher t, course o where c.cno = o.cno and o.tno = t.tno and t.tname = ‘谌燕‘); 34 SNO SNAME 35 ---------- -------------------- 36 s005 王丽 37 s006 李波 38 s007 刘玉 39 s008 萧蓉 40 s009 陈萧晓 41 s010 陈美 42 6 rows selected 43 44 SQL> --6、查询学过“c001”并且也学过编号“c002”课程的同学的学号、姓名 45 SQL> select s.sno, s.sname from sc a, sc b, student s where a.cno = ‘c001‘ and b.cno = ‘c002‘ and s.sno =a.sno; 46 SNO SNAME 47 ---------- -------------------- 48 s001 张三 49 s001 张三 50 s001 张三 51 s002 李四 52 s002 李四 53 s002 李四 54 s003 吴鹏 55 s003 吴鹏 56 s003 吴鹏 57 s004 琴沁 58 s004 琴沁 59 s004 琴沁 60 12 rows selected 61 62 SQL> select * from sc a, sc b where a.cno = ‘c001‘ and b.cno = ‘c002‘; 63 SNO CNO SCORE SNO CNO SCORE 64 ---------- ---------- ------ ---------- ---------- ------ 65 s001 c001 78.90 s001 c002 82.90 66 s002 c001 80.90 s001 c002 82.90 67 s003 c001 81.90 s001 c002 82.90 68 s004 c001 60.90 s001 c002 82.90 69 s001 c001 78.90 s002 c002 72.90 70 s002 c001 80.90 s002 c002 72.90 71 s003 c001 81.90 s002 c002 72.90 72 s004 c001 60.90 s002 c002 72.90 73 s001 c001 78.90 s003 c002 81.90 74 s002 c001 80.90 s003 c002 81.90 75 s003 c001 81.90 s003 c002 81.90 76 s004 c001 60.90 s003 c002 81.90 77 12 rows selected 78 79 SQL> select * from sc a, sc b where a.cno = ‘c001‘ and b.cno = ‘c002‘ and a.sno = b.sno; 80 SNO CNO SCORE SNO CNO SCORE 81 ---------- ---------- ------ ---------- ---------- ------ 82 s001 c001 78.90 s001 c002 82.90 83 s002 c001 80.90 s002 c002 72.90 84 s003 c001 81.90 s003 c002 81.90 85 86 SQL> select s.sno, s.sname from sc a, sc b, student s where a.cno = ‘c001‘ and b.cno = ‘c002‘ and a.sno =b.sno and s.sno =a.sno; 87 SNO SNAME 88 ---------- -------------------- 89 s001 张三 90 s002 李四 91 s003 吴鹏 92 93 SQL> -- 7、查询学过“谌燕”老师所教的所有课的同学的学号、姓名; 94 SQL> select o.cno from teacher t, course o where o.tno = t.tno and t.tname = ‘谌燕‘; 95 CNO 96 ---------- 97 c001 98 c002 99 c007 100 c010 101 102 SQL> select s.sno, s.sname from student s, teacher t, course o, sc c where o.tno = t.tno and s.sno = c.sno and c.cno = o.cno and t.tname = ‘谌燕‘; 103 SNO SNAME 104 ---------- -------------------- 105 s001 张三 106 s001 张三 107 s002 李四 108 s002 李四 109 s003 吴鹏 110 s003 吴鹏 111 s004 琴沁 112 7 rows selected 113 114 SQL> -- 8、查询课程编号“c002”的成绩比课程编号“c001”课程低的所有同学的学号、姓名; 115 SQL> select s.sno, s.sname from student s, sc a, sc b where a.cno = ‘c002‘ and b.cno = ‘c001‘ and a.score < b.score and a.sno = b.sno 116 2 and s.sno = a.sno; 117 SNO SNAME 118 ---------- -------------------- 119 s002 李四 120 121 SQL> -- 9、查询所有课程成绩小于60 分的同学的学号、姓名; 122 SQL> select s.sno, s.sname from student s, sc c where 123 2 c.score < 60 and s.sno = c.sno; 124 SNO SNAME 125 ---------- -------------------- 126 s001 张三 127 128 SQL> -- 10、查询没有学全所有课的同学的学号、姓名; 129 SQL> select s.sno, s.sname from student s, sc c where s.sno = c.sno 130 2 group by s.sno, s.sname having count (c.cno) < (select count(cno) from course); 131 SNO SNAME 132 ---------- -------------------- 133 s001 张三 134 s003 吴鹏 135 s004 琴沁 136 s002 李四 137 138 SQL> -- 11、查询至少有一门课与学号为“s001”的同学所学相同的同学的学号和姓名; 139 SQL> select s.sno s.sname from student s, sc c where s.sno = c.sno 140 2 and c.cno in(select cno from sc where sno = ‘s001‘); 141 select s.sno s.sname from student s, sc c where s.sno = c.sno 142 and c.cno in(select cno from sc where sno = ‘s001‘) 143 ORA-00923: 未找到要求的 FROM 关键字 144 145 SQL> select distinct(s.sno), s.sname from student s, sc c where s.sno = c.sno 146 2 and c.cno in(select cno from sc where sno = ‘s001‘); 147 SNO SNAME 148 ---------- -------------------- 149 s001 张三 150 s001 张三 151 s001 张三 152 s002 李四 153 s002 李四 154 s003 吴鹏 155 s003 吴鹏 156 s004 琴沁 157 8 rows selected 158 159 SQL> select distinct(s.sno), s.sname from student s, sc c where s.sno = c.sno 160 2 and c.cno in(select cno from sc where sno = ‘s001‘); 161 SNO SNAME 162 ---------- -------------------- 163 s001 张三 164 s003 吴鹏 165 s004 琴沁 166 s002 李四 167 168 SQL> -- 12、查询至少学过学号为“s001”同学所有一门课的其他同学学号和姓名; 169 SQL> select distinct(s.sno), s.sname from student s, sc c where s.sno = c.sno 170 2 and c.cno in(select cno from sc where sno = ‘s001‘) and s.sno <> ‘s001‘; 171 SNO SNAME 172 ---------- -------------------- 173 s003 吴鹏 174 s004 琴沁 175 s002 李四
时间: 2024-10-12 21:32:20