求出選修了所有課程的學生姓名

2021-08-23 11:46:34 字數 1083 閱讀 3069

求出選修了所有課程的學生姓名

學生表 s(sno int pk,sn varchar(8)) --sno為學號 ,sn為學生姓名。

課程表 c(cno int pk,cn varchar(50)) --cno為課程號,cn為課程名

選修表 sc(sno int pk,cno int pk,score number(7,2),fk(sno,cno) ) --score為成績。

--以下語句為求出選修了所有課程的學生姓名.

select sn

from s

where (not exists

(select *

from c

where not exists

(select *

from sc

where sno = s.sno and cno = c.cno)))

解釋:沒有任何一門課程不再該生所選的課程中。

小朋友不會原因是不知道欄位的訪問規則,join 的查詢中後面的表可以用前面表中的字段作為條件。在巢狀查詢中子查詢可以使用父查詢表中的字段作為條件。

類似的題型還有:

1、求至少選修了學生學號為s003所選修的所有課程的學生姓名和學號。

select

distinct

sn,sno <?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

from

sc sc2

where

(not

exists

(select

cnofrom

sc sc1

where

sno=

's003'

andcno

notin

(select

cno

from

sc where

sc2.

sno=sc.

sno)))

解釋:沒有任何一門學號為s003學生所選修的課程編號不在該生所選的課程的編號中中。

注意此處該生與s003不是同乙個意思。該生泛指符合條件的學生。

SQL查詢選修了所有課程的學生姓名

select sname from student where not exists select from course where not exists select from sc where sno student.sno and cno course.cno 最內部的 select fro...

查詢選修了全部課程的學生姓名

select sname from student where not exists select from course where not exists select from sc where sno student.sno and cno course.cno 我的理解是 這是乙個相關子查詢...

查詢選修了全部課程的學生姓名

1.select 2.sname 3.from s 5.where notexists 6.select from course where notexists 7.select from sc where sno student.sno and cno course.cno where後面的 no...