再后面是一些函数性质,权限管理的东西了,比较深入,一般开发中用的不多。先不写出来。
下面列举一些案例,表还是之前的表:
(表的基本结构:
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;
总结:
时间有限,暂时就这些吧,慢慢再补充