《数据库学习打卡》第5天SQL查询语句篇(2)
《数据库学习打卡》第5天
1、设教学数据库中有三个关系:**
学⽣关系S(SNO,SNAME,AGE,SEX,SDEPT)sql容易学吗
学习关系SC(SNO,CNO,GRADE)
课程关系C(Cno,CNAME,CDEPT,TNAME)
其中Sno、Cno、SNAME、AGE、SEX、GRADE、CNAME分别表⽰学号、课程号、姓名、年龄、性别、成绩和课程名。
(1)检索计算机系的全体学⽣的学号,姓名和性别;
Select  Sno,Sname,Sex from S where Sdept ='计算机'
(2)检索学习课程号为C2的学⽣学号与姓名;
Select Sno,Sname from S where Sno In(
//2.然后再通过得到的学号在学⽣表⾥查出他们的姓名
Select Sno from SC where Cno ='C2'
//1.⾸先从学⽣选课表查询出课程号为C2的学⽣的学号
)
(3)检索选修课程名为“DS”的学⽣学号与姓名;
//相关嵌套查询
Select Sno,Sname from S where Sno In(
//3.最后通过选修了这门课程的学⽣学号在学⽣表内到学⽣的学号和姓名
Select Sno from SC where Cno In(
//2.然后通过已到的课程号在学⽣选课表⾥到选修了这门课程号的学⽣学号
Select Cno from C where Cname ='DS'))
/
/1.⾸先从课程表⾥到课程名为“DS”的课程号
(4)检索选修课程号为C2或C4的学⽣学号;
Select Sno from SC where Cno In('C2','C4')
//⼀个In等同于多个or
//等同于Select Sno from SC where Cno = 'C2' or Cno = 'C4'
(5)检索⾄少选修课程号为C2和C4的学⽣学号;
Select Sno from S  Where Sno In
(Select Sno from SC where Cno='C2')
//2.从SC表⾥查出选修了课程号为C2的学⽣的学号
And Sno In(Select Sno from SC where Cno ='C4')
//1.从SC表⾥查出选修了课程号为C4的学⽣的学号
(6)检索不学C2课和C4课的学⽣姓名和年龄;
Select Sname,age from S
//3.最后⽤Not In(取不在这个集合⾥的其他元组),即不学C2和C4课程的学⽣的学号
Where Sno Not In(Select Sno from SC where Cno = ‘C2’)
//2.从SC表⾥查出选修了课程号为C2的学⽣的学号
And Sno Not In(Select Sno from SC where Cno = ‘C4’)
//1.从SC表⾥查出选修了课程号为C4的学⽣的学号
(7)检索学习全部课程的学⽣学号和姓名;
//Exists⼦句只返回true值 Not Exists只返回false值。
//
select Sname from Student
where Not Exists(select *from Course
where Not Exists(select *from SC where Sno = Student.Sno And Cno = Course.Cno))
⾸先我们是要查询选了全部的课程的学⽣。那么假设有⼀个 Sno=‘2012 ’的学⽣的选择了全部课程和⼀个Sno=2013 的学⽣只选择了全部课程的其中⼏门; 假设先以Sno=2012(也就是选了全部课程的那位),那么先往最内层开始查询,既然选择了全部课程那么最内层查询就有结果集,既然有结果集那么第3⾏的NOT EXISTS不就是为false嘛!,也就是第3⾏得到的结果嘛。 既然第3⾏为false那不就是第2⾏的结果集为空,既然第3⾏的结果集为空那么第2⾏的NOT EXISTS不就是为 true , 那么最后最外层当前元组不就加⼊到最后查询结果集了。
(8)查询所学课程包含学⽣S3所学课程的学⽣学号。
//简⽽⾔之,就是查询和学⽣S3选修了同⼀课程号的学⽣的学号。
Select Sno from SC Where Cno In
(Select Cno from SC where Sno ='S3')
//这道题我也上机验证过了,确实是可⾏的。
(9)查询所学课程包含学⽣S3所学课程的学⽣学号和姓名。
Select Sname from Where Sno In
(Select Sno from SC Where Cno In
(Select Cno from SC where Sno ='S3'))

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。