具有exists和not exists的查询

cclgggtu  于 2021-07-26  发布在  Java
关注(0)|答案(1)|浏览(419)

我有一个包含5个表的数据库。

COURSES (***CourseID***, CourseName, Credit)

TEACHERS (***SSN***, Name)

OFFER (***CourseID***,***SSN***)

STUDENTS (***StudentID***, Name, Department)

ENROLL (***StudentID***,***CourseID***, Semester)

我想找出至少招收一名“汽车工程”学生的课程名称。但是,课程也不能由天使提供。我的意思是至少招收一名“汽车工程”学生,而不是由“天使”提供(教授)的课程。
我从另一个问题得到了下面的答案,但我不知道从这里怎么走。

select C.CourseName
from Courses C
-- A student from the selected department is enrolled in this course
where exists (
    select 1
    from Enroll E
    inner join Students S on S.StudentId = E.StudentId
    where S.Department = 'Automotive Engineering' and E.CourseID = C.CourseID
)

上面的代码给出了至少招收一名“汽车工程”学生的课程名称,但我如何检查课程是否由“天使”提供?

w6lpcovy

w6lpcovy1#

这个 exists 对至少有一名相关专业的学生参加的课程进行筛选的方法是好的。从现有的查询开始,您可以添加更多的联接,以将课程教师和筛选器带出 'Angel' :

select C.CourseName
from Courses C
inner join Offer O on O.CourseId = C.CourseID
inner join Teachers T on T.SSN = O.SSN
where 
    exists (
        select 1
        from Enroll E
        inner join Students S on S.StudentId = E.StudentId
        where S.Department = 'Automotive Engineering' and E.CourseID = C.CourseID
    )
    and T.Name <> 'Angel'

相关问题