您的位置:首页 > 其它

select 最常用到的一些查询写法

2011-03-14 11:03 411 查看
教学数据库中的四个关系:

教师关系:T(T#,TNAME,TITLE)

课程关系:C(C#,CNAME,T#)

学生关系:S(S#,SNAME,AGE,SEX)

选课关系:SC(S#,C#,SCORE)

1)、检索学习课程号为C2的学生学号与成绩

select s#,SCORE

from SC

where c#="C2"

2)、检索学习课程号为C2课程的学生学号与姓名

第一种写法:(连接查询)

SELECT S.S#,SNAME

FROM S,SC

WHERE S.S#=SC.S# AND C#="C2"

第二种写法:(嵌套查询)

SELECT S#,SNAME

FROM S

WHERE S# IN(SELECT S#

FROM SC

WHERE C#=“C2”);

注:这里的嵌套的子查询在外层查询处理之前执行。查询涉及多个基本表时用嵌套结构逐次求解层次分明,具有结构程序设计特点。并且嵌套查询的执行效率也比连接查询的笛卡儿积效率高。

第三种写法:(使用存在量词的嵌套查询)

SELECT S#,SNAME

FROM S

WHERE EXISTS(SELECT *

FROM SC

WHERE SC.S#=S.S# AND C#="C2")

3)、检索至少选修LIU老师所授课程中一门课程的学生学号与姓名

SELECT S.S#,SNAME

FROM S,SC,C,T

WHERE S.S#=SC.S# AND SC.C#=C.C#

AND C.T#=T.T# AND TNAME="LIU";

4)、检索选修课程号为C2或者C4课程的学生学号

SELECT S#

FROM SC

WHERE C#="C2" OR C#="C4"

5) 检索至少选修课程号为C2和C4课程的学生学号

SELECT X.S#

FROM SC AS X ,SC AS Y

WHERE X.S#=Y.S# AND X.C#="C2" AND Y.C#="C4"

6)、检索不学C2课程的学生姓名与年龄

SELECT SNAME,AGE

FROM S

WHERE S# NOT IN (SELECT S#

FROM SC

WHERE C#="C2");

或者

SELECT SNAME,AGE

FROM S

WHERE NOT EXISTS( SELECT *

FROM SC

WHERE SC.S#=S.S# AND C#="C2")

注:这个查询不能使用连接查询写法。

7)、检索学习全部课程的学生姓名

换言之:在S表中找学生,在C中不存在一门课程,这个学生没有学。

SELECT SNAME

FROM S

WHERE NOT EXISTS

(SELECT *

FROM C

WHERE NOT EXISTS

(SELECT *

FROM SC

WHERE SC.S#=S.S# AND SC.C#=C.C#));

8)、检索所学课程包含学号为S3学生所学课程的学生学号。

SELECT DISTINCT S#

FROM SC AS X

WHERE NOT EXISTS

(SELECT *

FROM SC AS Y

WHERE Y.S#="A3"

AND NOT EXISTS

(SELECT *

FROM SC AS Z

WHERE Z.S#=X.S# AND Z.C#=Y.C#));
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: