mysql中exists的用法 用 EXISTS查询上了CS-101和CS-190两门课的所有学生学号和姓名

mysql中exists的用法 用 EXISTS查询上了CS-101和CS-190两门课的所有学生学号和姓名,第1张

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的用法等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/9810644.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-02
下一篇 2023-05-02

发表评论

登录后才能评论

评论列表(0条)

保存