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#));
教师关系: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#));
相关文章推荐
- 一些常用的SQL查询语句
- 一些常用的linux命令---方便查询
- 常用的一些正则表达式写法
- jQuery的Select一些常用操作集合
- SQL 单表查询的一些常用语句和函数及单表的插入修改删除操作
- 常用的一些HQL查询语句详解(1)
- css里面常用一些通用样式写法
- sql 查询时间的一些常用语句
- 写一些自己常用到的一些的Myeclipse快捷键,以后自己忘记,再查询
- CSS动画(补充一些常用写法)
- DB2数据库(Database)常用SQL查询(SELECT语句)命令
- 一些常用的MDX查询语句(基于SSAS 2008)
- MongoDB的一些常用查询方法
- thinkPHP数据查询常用方法总结【select,find,getField,query】
- 常用的一些HQL查询语句详解(2)
- select一些常用属性
- jquery 针对html标签一些常用方法(select、radio、checkbox)
- 本人搜集的一些常用的SQL查询语句(不定期更新)
- .net一些常用功能(记录下,方便以后查询,慢慢完善)
- 在Javascript中对Array的一些方法扩展,实现常用的查询处理。