SELECT
FROM
student
WHERE
EXISTS (
SELECT 1
FROM takes
WHERE takesID = studentID AND takescourse_id = 'CS_101'
)
AND
EXISTS (
SELECT 1
FROM takes
WHERE takesID = studentID AND takescourse_id = 'CS_190'
)
卤煮你好,
答案写法很好,我看了很久才弄明白,但我认为有漏洞,实际应用的话应该需要完善
我先说我的写法,再解释答案的逻辑
我的:
select stsno, stsname
FROM student st
where exists(
select 1 from SC a join Cource b on aCno=bCno where aSno=stSno and
aCno in(3,5,8) having count()=3
)
或者
select stsno, stsname
FROM student st
where exists(
select 1 from SC where Sno=stSno and
Cno in(3,5,8) having count()=3
)
/通过和上面的比较你可以发现其实Cource其实没有作用,但是第一种写法更加严密,因为可以判断SC中的Cno是不是有效的/
-------分割线--------------------------
再来看看这个答案
SELECT studentsno, studentsname
FROM student
WHERE not exists(select coursecno
from course
where coursecno in (3,5,8) and not exists(select
from sc
where studentsno=scsno and coursecno=sccno));
看起来很复杂,我们先来拆分下
因为SQL 的查询和执行是逐条进行的,主体是从Student表中中选数据,我们假设Student中有小明这个人,如何判断小明是不是该出来呢,只要
select coursecno
from course
where coursecno in (3,5,8) and not exists(select
from sc
where ‘小明’=scsno and coursecno=sccno)
这一大坨不返回结果即可,
这一坨
,select coursecno
from course
where coursecno in (3,5,8) and not exists(select
from sc
where ‘小明’=scsno and coursecno=sccno)
意思就比较明确了(我这儿迷糊了好一阵子)
只要小明同时选修了3,5,8那么这段话就不返回结果,所以最终小明就出现了!
/ps题目有个地方我没太看明白,“3且5且8” 是指的是同时选修3,5,8呢还是同时选修3,5,8且只选修这三个。如果是后者这3个写法还要再加一句exists/
----三段写法全部测试通过,卤煮可以尽情测试~要给分啊!!!!!!!!!!!!
WHERE EXISTS(SELECT TID FROM TEACHER T WHERE TID = STID)
等同于WHERE STID IN(SELECT TID FROM TEACHER)
但exists的效率要高很多 你原来那句相当于没有任何关联关系 所以相当于
SELECT SNAME FROM STUDENT S 不懂hi我
IN表示条件是在一个集合里,比如
in ('A','B','C','D')条件就是在ABCD这个集合里找。
EXISTS返回的是一个布尔值,也就是它判断的是真假,比如
EXISTS (select from 用户表 where 姓名='张三')表示:有张三这个用户则返回“真”,否则返回“假”
以上就是关于mysql中exists的用法 用 EXISTS查询上了CS-101和CS-190两门课的所有学生学号和姓名全部的内容,包括:mysql中exists的用法 用 EXISTS查询上了CS-101和CS-190两门课的所有学生学号和姓名、数据库语言关于not exist的用法、PL/SQL EXISTS的用法等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)