SQL相关子查询是逐行查询么?
分别用“相关子查询”和“非相关子查询”形式,查询“所有课程成绩均大于85分的学生的学号、姓名”信息。写出SQL语句。(假设有表s(sno,sname,sex,age)、s...
分别用“相关子查询”和“非相关子查询”形式,查询“所有课程成绩均大于85分的学生的学号、姓名”信息。写出SQL语句。(假设有表s(sno,sname,sex,age)、sc(sno,cno,grade))
那么相关子查询
select sno,sname
from s
where exist
(select * from sc
where grade>85 and s.sno=sc.sno)
这个是对的么?
如果一个sno 在SC表里有很多个grade而且有大与85和小于85的,是逐行查询的话不就真真假假都返回了么?还是需要在grade前面加个min的聚组函数? 展开
那么相关子查询
select sno,sname
from s
where exist
(select * from sc
where grade>85 and s.sno=sc.sno)
这个是对的么?
如果一个sno 在SC表里有很多个grade而且有大与85和小于85的,是逐行查询的话不就真真假假都返回了么?还是需要在grade前面加个min的聚组函数? 展开
3个回答
展开全部
1、
select sno,sname,score
from SC a
where exists
(select 1 from sc
where grade>85 and sno=a.sno and sname=a.sname)
2、select sno,sname,score
from SC a
where not exists
(select 1 from sc
where grade<=85 and sno=a.sno and sname=a.sname)
select sno,sname,score
from SC a
where exists
(select 1 from sc
where grade>85 and sno=a.sno and sname=a.sname)
2、select sno,sname,score
from SC a
where not exists
(select 1 from sc
where grade<=85 and sno=a.sno and sname=a.sname)
展开全部
不知道你的教程上怎么说的,这样用“相关子查询”和“非相关子查询”看着别扭,
比较常用的如下
SELECT s.sno, s.sname
FROM s
INNER JOIN sc ON sc.sno=s.sno
WHERE sc.grade>85
也可以
SELECT s.sno, s.sname
FROM s, sc
WHERE sc.sno=s.sno AND sc.grade>85
比较常用的如下
SELECT s.sno, s.sname
FROM s
INNER JOIN sc ON sc.sno=s.sno
WHERE sc.grade>85
也可以
SELECT s.sno, s.sname
FROM s, sc
WHERE sc.sno=s.sno AND sc.grade>85
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
不用加,就这样恩
追问
那么就是子查询里不是逐行返回的咯?
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询