繁体   English   中英

SQL查询以查找有关未在特定班级注册的学生的所有信息

[英]Sql query to find everything about the students who are not registered in a particular class

假设我有三个表Student,Class,Student_Class(链接表)。

Table:Student
Student_ID
FirstName
LastName

Table:Class
Class_ID
Class_name

Table:Student_Class (Linking Table)
StudentClass_ID
Class_ID
Student_ID

给定一个特定的Class_ID,我想了解有关未注册该特定班级的学生的所有信息。

我尝试了以下操作,但不起作用。 可以说我尝试输入班级ID = 3

SELECT DISTINCT Student.* 
FROM Student 
INNER JOIN Student_Class 
    ON Student.Student_ID = Student_Class.Student_ID 
WHERE ((NOT (Student_Class.Class_ID)= 3))

  1. 匹配所有学生和所有班级
Student INNER JOIN Student_Class ON (Student.Student_ID = Student_Class.Student_ID)
  1. 拒绝特定班级的学生(示例3)
(Student_Class.Class_ID <> 3)

查询:

SELECT Student.* 
  FROM Student INNER JOIN Student_Class 
    ON (Student.Student_ID = Student_Class.Student_ID)
 WHERE (Student_Class.Class_ID <> 3);

为了让所有学生都没有上课,请尝试以下操作:

SELECT Student.*
  FROM
       (
        SELECT Student.*
             , Student_Class.Class_ID
          FROM Student LEFT JOIN Student_Class ON Student.Student_ID = Student_Class.Student_ID
         WHERE ((Student_Class.Class_ID <> 3) OR (Student_Class.Class_ID IS NULL))
        ) Student LEFT JOIN Class ON Student.Class_ID = Class.Class_ID
;

数据:

在此处输入图片说明

结果:

在此处输入图片说明

下面的查询将显示所有未参加1个或更多课程的学生,包括班级名称。

SELECT Student.Student_ID, Student.FirstName, Student.LastName, 
Class.Class_ID, Class.Class_name
FROM Class, Student
WHERE NOT EXISTS
(
SELECT *
FROM Student_Class
WHERE Student_Class.Student_ID = Student.Student_ID AND   
Student_Class.Class_ID = Class.Class_ID

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM