【问题标题】:How to write SQL Subquery queries如何编写 SQL 子查询查询
【发布时间】:2020-10-04 01:06:02
【问题描述】:

我有一个有 5 个表的数据库

COURSES (CourseID, CourseName, Credit) // CourseID 是主键

TEACHERS (SSN, Name) // SSN 是主键

OFFER (CourseID, SSN) // CourseID 和 SSN 是外键

STUDENTS (StudentID, Name, Department) // StudentID 是主键

ENROLL(StudentIDCourseID学期 em>)

并且我想查找注册课程的学生的姓名,这些课程由名为“Jack Lion”的学生注册。

我尝试了以下语句,但我不知道如何解决。

SELECT STUDENTS.Name from STUDENTS
WHERE STUDENTS.StudentID IN (SELECT ENROLL.StudentID from ENROLL
 -- I don't know what to write here
)

我刚走到这一步,你能帮我吗,或者至少给我一些例子来帮助我解决这个问题。顺便说一下,我用的是微软的sql server。

【问题讨论】:

  • 必须使用子查询是课程要求吗?他们是否必须注册杰克注册的所有课程?
  • 用sql server为什么要标记其他数据库?
  • @Shawn 因为我认为 mssql 和 mysql 等没有什么不同。
  • @byakuyaxx2 '彼此没有那么不同' - 情况并非如此,答案可能会有很大不同 - 因为它们可能适用于 sqlserver,具体取决于您使用的版本..PS 你是哪个版本开吗?
  • @P.Salmon 是的,你是对的。我用的是MSSQL server management studio 18。但是我必须使用SQL-99 Standarts来解决这个问题。

标签: sql sql-server sqlite


【解决方案1】:

嵌套子查询

SELECT STUDENTS.Name from STUDENTS
WHERE STUDENTS.StudentID IN (SELECT ENROLL.StudentID 
                            from ENROLL
                             WHERE CourseID IN (SELECT CourseID 
                                                FROM ENROLL 
                                                WHERE StudentID IN (SELECT StudentID 
                                                                    FROM  STUDENTS  
                                                                    WHERE Name = 'Jack Lion'


                                             )
                                          )
                        )

【讨论】:

  • @byakuyaxx2 这是如何工作的?你在评论中说:他们必须注册 jack 注册的所有课程
  • 我看到了,这是我的错,我给了你错误的信息。我检查了问题,并没有说他们必须注册所有课程。很抱歉。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-09-18
  • 2021-01-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多