解释sql语句

来源:百度知道 编辑:UC知道 时间:2024/05/31 23:17:48
三个表如下所示
s(s#,sname,age,sex),sc(s#,c#,grade,),c(c#,cname,teacher)
现要检索所学课程包含学生s3所学课程的学生学号
select distinct s#
from sc as x
where not exists
(select * from sc as y
where y.s#='s3'
and not exists
(select * from sc as z
where z.s#=x.s#
and z.c#=y.c#))
请各位大虾详细解释下,尤其是最后一句的嵌套where z.s#=x.s#
and z.c#=y.c#)),这个实在是搞不清楚是什么意思

这是常用判断真假的方式;

当然也可用in的方式楼主看看能不能理解

select
s#
from sc as x
where x.c# in(
select c#
from sc
where s#='s3')
group by s#
having count(c#)=(select count(c#) from sc where s#='s3 )

哇,上面来了个微软专家哦,呵呵,希望专家以后给网友回答尽可能做到:
“能用一行来实现的程序,不要用两行!”
因为来这里的都是初学者,你把问题复杂化,只会让大家感到害怕,
呵呵,个人意见,本人也是菜鸟,多多指教,呵呵!

我的大哥,你给的程序也太烂了吧,哪里来的??我真的不愿意解释你的程序!

给你写一个简洁而且短一点的吧,功能一样!

select distinct (select s# from sc where c#=s3c#)
from ( select c# as s3c# from sc where s#=s3 )

我的非常简单,先从第二行解释起吧:
从sc表中查询和 s3同学 所学的所有课程号:c# 组成一个临时表
以这个临时表提供的C#作为内部字段查询的条件 c#=s3c#
在sc表里查询并获得学生号,
当然,不同的课程里肯定有相同的学生号,(一个学生修多个课程嘛)
最后用distinct消除重复的学生号!

这个解释起来很麻烦,不是一句半句能解释清楚的,用下面的句子吧,相信你能看明白。
select s# from sc,(select c# as s3c# from sc x where s#='S3')
where c#=s3c#;
************************
我写的效果:
[TEST@ora1] SQL>select s# from sc,(selec