1.用一条语句查询出每门课都大于80分的学生姓名
name |
class |
Socre |
张三 |
语文 |
81 |
张三 |
数学 |
75 |
李四 |
语文 |
76 |
李四 |
数学 |
90 |
王五 |
语文 |
81 |
解法一:
1 2 3
| select distinct name from table where name not in ( select distinct name from table where score<=80 )
|
解法二:
1
| select name from table groupby name having min(fenshu)>80
|
2.删除除了自动编号不同外,其他都相同的学生冗余信息
自动编号 |
学号 |
姓名 |
课程编号 |
课程名称 |
课程分数 |
1 |
2005001 |
张三 |
0001 |
数学 |
69 |
2 |
2005002 |
李四 |
0001 |
数学 |
80 |
3 |
2005001 |
张三 |
0001 |
数学 |
69 |
1
| delete tablename where 自动编号 not in (select min(自动编号) groupby 学号,姓名,课程编号,课程名称,课程分数)
|
3.有两个表A 和B ,均有key 和value 两个字段,如果B 的key 在A 中也有,就把B 的value 换为A 中对应的value
1
| update b set b.value=(select a.value from a where a.key=b.key) where b.id in (select b.id from b,a where b.key=a.key);
|
5.查询表A中存在ID重复三次以上的记录
1
| select * from(select count(ID) as count from table group by ID)T where T.count>3
|
6.取出每个班级成绩前两名的同学,表结构为sno、sname、class、score
1 2 3
| select sname,class,score from grade where ( select count(*) from grade as f where f.class==grade.class and f.score>=grade.score ) <=2
|
6.经典的学习成绩问题
已知关系模式:
s (sno,sname) 学生关系。sno 为学号,sname 为姓名
c (cno,cname,cteacher) 课程关系cno 为课程号,cname 为课程名,cteacher 为任课教师
sc(sno,cno,scgrade) 选课关系。scgrade 为成绩
1.找出没有选修过“李明”老师讲授课程的所有学生姓名
1
| select sname from s where cno in (select cno from c where cteacher=='李明')
|
2.列出有二门以上(含两门)不及格课程的学生姓名及其平均成绩
3.列出既学过“1”号课程,又学过“2”号课程的所有学生姓名
4.列出“1”号课成绩比“2”号同学该门课成绩高的所有学生的学号
5.列出“1”号课成绩比“2”号课成绩高的所有学生的学号及其“1”号课和“2”号课的成绩