**
1、 有3个表如下:
Student 学生表(id(自增),学号,姓名,性别,年龄,组织部门)
Course 课程表 (编号,课程名称)
Sc 选课表(学号,课程编号,成绩)
1)写一个sql语句,查询选修了‘计算机原理’的学生学号和姓名
2)写一个sql语句,查询‘周星驰’同学选修了的课程名字
3)写一个sql语句,查询选修了5门课程的学生学号和姓名
4)写一个sql语句,学生表中有id不同其他字段相同的记录(脏数据),保留最新的数据记录(删除脏数据)。
2、现有三个表表结构主要字段如下:
学生表 student:
S_id int //学生ID
S_name varchar2 //学生姓名
课程表 class :
C_id int //课程id
C_name varchar2 //课程名称
选课表 chosen_class
Id int //选课id
S_id int //学生id
C_id int //课程id
Grade int //成绩
请给出以下sql语句:
1)没有选修课程名称为“C1”的学生姓名
2)列出每门课程名称和平均成绩,并按照升序排序
3)选了2门课以上的学生姓名
答案:没一点难度吧!!!
3、实际应用
Student(S#, Sname, Sage, Ssex)学生表
Course(C#, Cname, T#) 课程表
SC(S#, C#, score) 成绩表
Teacher(T#, Tname) 教师表
问题:
1)查询所有同学的学号和平均成绩
2)查询姓“李”的老师的信息;
3)查询所有同学的学号、姓名、选课数、总成绩;
4)查询各科成绩前三名的记录:(不考虑成绩并列情况)
答案:???
4、 假设顾客购物表customer_shopping 结构如下:
Customer commodity amount
A 甲 2
B 乙 4
C 丙 1
A 丁 2
B 丙 5
……
请写sql查询所有购入商品为两种或两种以上的购物人记录
答案:没有答案!!!!
5、 假设学生成绩表student_score 结构如下:
Name course score
张青 语文 72
王华 数学 72
张华 英语 81
张青 物理 67
张燕 物理 70
张青 化学 76
……
请写sql查询出所有“张”姓学生中平均成绩大于75分的学生信息:
①
答案:
1)方案一:select s.stuno, s.stuname from student s left join (
select sc.stuno, c.cname from course c left join sc sc on c.cid = sc.cid) cc
on s.stuno = cc.stuno and cc,cname = '计算机原理'
方案二:select s.stuno, s.stuname from student s, sc sc, course c where s.stuno = sc.stuno and sc.cid = c.cid and c.cname = '计算机原理'
2)select c.cname from student s, sc sc, course c where s.stuno = sc.stuno and sc.cid = c.cid and s.stuname = '周星驰' (可以使用left join)
3)select s.stuno, s.stuname, count(sc.cid) from student s, sc sc where s.stuno = sc.stuno group by s.stuno, s.stuname having count(sc.cid) >= 5
4) select distinct stuno , stuname, sex, age, deptname, max(id) from student
group by stuno , stuname, sex, age, deptname
②
答案:
1)select * from student s where s.S_id not in (select S_id from chosen_class cc where cc.C_name= ‘C1’)
2)select c.C_name, avg(cc.Grade) from class c, chosen_class cc where c.C_id = cc.C_id group by c.C_name ORDER BY avg(cc.Grade)
3) select s.S_name, count(cc.C_id) from student s, chosen_class cc where s.S_id = cc.S_id group by s.S_name having count(cc.C_id) > 2
③
答案:
1)select s.S#, avg(SC.SCORE) from Student s, SC SC where s.S# = SC.S# group by s.S#
2)select * from Teacher where Tname like '李%'
3)select s.S#, s.Sname, count(sc.C#), sum(sc.score) from Student s, SC sc where s.S# = sc.S# group by s.S#, s.Sname
4)select * from (
select t.*, rownum rn from (
select sc.C#, s.* from Student s, SC sc where s.S# = sc.S# group by sc.C#, s.*
) t where rownum < 4
)where rn >=1
④
答案:
1)select cs.Customer, count(cs.commodity) from customer_shopping cs group by cs.Customer having count(cs.commodity) >=2
⑤
答案:
1)select ss.Name, avg(ss.score) from student_score where ss.Name like '张%' group by ss.Name having avg(ss.score) > 75