至少查询且不存在于SQL表中

时间:2019-01-13 07:59:42

标签: sql-server tsql

我有两个查询:

  1. 查询至少参加subj1和subj2课程的学生的身份证号(至少我不知道如何编码)
  2. 查询未注册subj2课程的学生的ID号,姓名和年龄。

我编写了如下代码-即使我应该获得一些值,它也会返回一个空表。

Select sno, sname, age 
from student
where not exists (select cno from course where cno ='C2');

1 个答案:

答案 0 :(得分:1)

我假设您有一张表格,将学生与多门课程联系起来,以便每个学生可以注册一门以上的课程,并且每门课程可以包含多名学生。

因此,出于本示例的考虑,我们将其称为“ StudentsToCourses”。 该表应包含学生ID和课程ID,并且其主键应包含其两列的组合。

因此,第一个查询将类似于(使至少两个课程中的一个注册学生人数):

SELECT sno
FROM StudentToCourses 
WHERE cno IN ('C1', 'C2')

或这样做(以使学生同时参加这两个课程):

SELECT sno
FROM StudentToCourses 
WHERE cno IN ('C1', 'C2')
GROUP BY sno
HAVING COUNT(DISTINCT cno) = 2

请注意,EXISTS运算符中的子查询与使用学生编号的主查询相关。

第二个查询与第一个查询几乎相同,除了使用IN代替=,使用EXISTS代替NOT EXISTS
由于这似乎是一个家庭作业问题,因此我将由您自己来编写代码,否则您将不会从中学到任何东西。