SQL语句使用05--------案例

再后面是一些函数性质,权限管理的东西了,比较深入,一般开发中用的不多。先不写出来。
下面列举一些案例,表还是之前的表:
(表的基本结构:
Student(Sid,Sname,Sage,Ssex) 学生表
Course(Cid,Cname,Tid) 课程表
SC(Sid,Cid,score) 成绩表
Teacher(Tid,Tname) 教师表
)

1.查询学过“001”并且也学过编号“002”课程的同学的学号、姓名;

select student.sid,sname from sc inner join student on student.sid = sc.sid where sc.cid = '001' and sc.sid in (select sid from sc where sc.cid = '002');
//这个应该还好理解,思路就是:
//先连表查询----得到一张表(学习过001课程的学生)
    select student.sid,sname from sc inner join student on student.sid = sc.sid where sc.cid = '001'
//并且学习过002,即sid要在学习002的学生的集合表中
    sc.sid in (select sid from sc where sc.cid = '002')

这里写图片描述

2.查询没学过“曾老师”老师课的同学的学号、姓名

    select Student.Sid,Student.Sname from Student  where Sid not in (select distinct( SC.Sid) from SC,Course,Teacher where  SC.Cid=Course.Cid and Teacher.Tid=Course.Tid and Teacher.Tname='曾老师'); 
    //思路:先查询学了曾老师课的学生,然后查询出sid不在这个结果集中的学生
    //这些学生就行没有学过曾老师课的学生

这里写图片描述

3.查询课程编号“002”的成绩比课程编号“001”课程低的所有同学的学号、姓名;

    select Student.Sid,Student.Sname,score ,(select score from SC SC_2 where SC_2.Sid=Student.Sid and SC_2.Cid='002') score2 from Student,SC where Student.Sid=SC.Sid and Cid='001';
//先来第一步,我连接查询了两个表,这两个表里面有课程001的成绩和课程002的成绩

这里写图片描述

//然后我们再对那个表查询,表中有两个字段score,score2,所以我们就可以比较这两个字段了
//进而得到结果
    Select Sid,Sname from (select Student.Sid,Student.Sname,score ,(select score from SC SC_2 where SC_2.Sid=Student.Sid and SC_2.Cid='002') score2  from Student,SC where Student.Sid=SC.Sid and Cid='001') S_2 where score2 <score; 

这里写图片描述

总结:
时间有限,暂时就这些吧,慢慢再补充

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值