sql-语句
like
Exists子句只返回true值,Not Exists只返回false值。的用法
设教学数据库Education有三个关系:
学生关系S(Sno,Sname, Ssex,Sage,Sdept);
学习关系SC(Sno,Cno,Grade);
课程关系C(Cno,Cname,Cdept,Tname)
查所年龄在20至23岁之间的学生姓名、系别及年龄。
select Sname,Sdept,Sage
from S
where Sage between 20 and 23
查缺考的学生的学号和课程号。
select Sno,Cno
from SC
where Grade is null
查询全体学生的情况,查询结果按所在系升序排列,对同一系中的学生按年龄降序排列。
select *
from S
order by Sdept asc,Sage desc
检索至少选修课程号为C2和C4的学生学号; (子查询)
select Sno
from SC
where Cno='C2' and Sno in
(select Sno
from SC
where Cno='C4')
检索学习全部课程的学生姓名;
//Exists子句只返回true值,Not Exists只返回false值。
select Sname
from S
where not exists
(select * from C
where not exists
(select * from SC
where S.Sno=SC.Sno and SC.Cno=C.Cno))
//查找学习了所有课程的学生,即是在C中不存在一门课程没有学。
查询计算机系选修了3门以上课程的学生的学号。
select S.Sno
from S,SC
where S.Sdept='CS' and S.Sno=SC.Sno
group by S.Sno
having count(*)>3
16、求基本表S中男同学的每一年龄组(超过50人)有多少人?要求查询结果按人数升序排列,人数相同按年龄降序排列。
select Sage,count(Sno)
from S
group by Sage
having count(*)>50
order by count(*) asc,Sage desc
统计每一年龄选修课程的学生人数。
select Sage,count(distinct S.Sno)
from S,SC
where S.Sno=SC.Sno
group by S.Sage
查询全部学生的成绩 成绩为0分的用*代替,缺考的用_代替
SELECT name,CASE score.score WHEN 0 THEN '*' ELSE IFNULL(score.score,'_') END AS score FROM student LEFT JOIN score ON student.id=score.stu_id;