SQL是结构化查询语言。
以下是讲解的例题:
1、设学生课程数据库中有三个关系:
学生关系S(S#,SNAME,AGE,SEX)
学习关系SC(S#,C#,GRADE)
课程关系C(C#,CNAME)
其中S#、C#、SNAME、AGE、SEX、GRADE、CNAME分别表示学号、课程号、姓名、年龄、性别、成绩和课程名。
用SQL语句表达下列操作
(1)检索选修课程名称为“MATHS”的学生的学号与姓名
SELECT SNAME,AGE
FROM S,SC,C
WHERE S.S#=SC.S# AND C.C#=SC.C# AND CNAME=’ MATHS’
(2)检索至少学习了课程号为“C1”和“C2”的学生的学号
SELECT S# FROM SC
WHERE CNO=’C1’ AND S# IN( SELECT S# FROM SC WHERE CNO=’C2’)
(3)检索年龄在18到20之间(含18和20)的女生的学号、姓名和年龄
SELECT S#,SNAME,AGE FROM S
WHERE AGE BETWEEN 18 AND 20 AND SEX=’女’
(4)检索平均成绩超过80分的学生学号和平均成绩
SELECT S# ,AVG(GRADE) 平均成绩 FROM SC
GROUP BY S# HAVING AVG(GRADE)>80
(5)检索选修了全部课程的学生姓名(第一种方法有点绕,建议学习第二种方法)
第一种方法(查询一个学生的姓名,这个学生不存在课程没选择):
SELECT SNAME FROM S
WHERE NOT EXISTS
(SELECT * FROM C
WHERE NOT EXISTS
(SELECT * FROM SC
WHERE S#=S.S# AND C#=C.C# ))
第二种方法(该学生的选修的课程门数 = 所有课程的门数):
SELECT Sname FROM Student
WHERE Sno in (
SELECT Sno FROM SC
GROUP BY Sno HAVING COUNT() =
(SELECT COUNT() FROM Course));
(6)检索选修了三门课以上的学生的姓名
SELECT SNAME FROM S,SC
WHERE S.S#=SC.S#
GROUP BY S#,SNAME HAVING COUNT(*)>3