数据库查询的例子及SQL语句(二)

2014-11-24 15:45:55 · 作者: · 浏览: 4
个Cno,所以可以把就有相同Sno的值用group by分为一组
就可以得到一个Sno对应的选择课程情况,然后用count(*)对每一组计数,,此处用having 短语来进行条 件筛选
查询语句:select Sno from SC group by Sno having count(*)>2;
---------------------------------------------------------------------------------------------------------------------------
例六):查询每个学生的(学号)Sno.(姓名)Sname,Cname(课程名),Grade(成绩)
问题分析:
查询数据:Sno,Sname,Cname,Grade
涉及的表:应为Sno和Sname是Student的属性列,Cname是Course的属性列,Grade是SC的属性列,所以用到Student,Course,SC三个表
分析:三个表是根据Sno,Cno联系起来的 www.2cto.com
查询语句:select Student.Sno,Sname,Cname,Grade
from Student,SC,Course
where Student.Sno = SC.Sno and SC.Cno = Course.Cno;
--------------------------------------------------------------------------------------------------------------------------
例七):查询与“刘晨”在同一个系学习的学生
问题分析:
查询数据:学生信息,限定条件是与刘晨同一个系,
未知数据:刘晨所在的系
已知数据:学生的名字刘晨
涉及的表:Student
分析:可以根据已知的数据来查询未知的数据
查询语句:
1)确定刘晨所在的系
select Sdept from student where Sname = "刘晨"
2)查找在所在系与1查询结果相同的学生信息
select * from Student where Sdept = 'CS';
综合起来就是:select * from Student where Sdept in (select Sdept from student where Sname = "刘晨");
由于每个学生只能有一个系,所以1中的查询结果只有一个,所以也可以写成下面的语句 www.2cto.com
:select * from Student where Sdept = (select Sdept from student where Sname = "刘晨");
其实,也可以用自身连接来查询:把Student看成两个表来A和B,那么该题的可以叙述成如下所示:
查询A的学生信息:要求A所在的系与B中名字叫刘晨的同学所在的系相同,那么可以写成如下
select * from Student as A where Sdept = (select Sdept from student as B where Sname = "刘晨");
进而改进为
select A.* from Student A,Student B where A.Sdept = B.Sdept and B.Sname = "刘晨";
-----------------------------------------------------------------------------------------------------------------------------
例八):找出每个学生超过他选修的课程的平均成绩的课程号
问题分析:
先换个问题求:求每个学生的成绩超过全班平均成绩的Sno,Cno
查询语句:select Sno,Cno from SC where Grade > (select AVG(Grade) from SC)
所有对比着所换的那个问题,很容易写出下面的语句
select Sno,Cno from SC as A where Grade >=(select avg(Grade) from SC as B where A.Sno = B.Sno); www.2cto.com
----------------------------------------------------------------------------------------------------------------------------
例九):将计算机系所有的同学的成绩设置为零
问题分析:
涉及的表:成绩的表在SC中,院系Sdept在Student表中,因此涉及到两个表SC和Student
查询语句1): UPDATE SC SET Grade = 100
WHERE 'CS'= (select Sdept from Student where Student.Sno = SC.Sno); www.2cto.com
查询语句2): UPDATE SC set Grade = 0
where SC.Sno in (select Student.Sno from Student where Sdept = 'CS');