使用桥连接表

时间:2016-12-19 16:39:09

标签: sql oracle10g

    Courses         Teachers        Students        StudentCourses
    CourseID        TeacherID       StudentID       CourseID
    CourseName      TeacherName     StudentName     StudentID
    TeacherID

您好,
这些是我的表,我有两个问题..

  1. 我需要获取所有学生的名单以及每个学生注册的课程数量
  2. 所有注册课程的学生都以#34; Art"开始。
  3. 我很困惑,因为StudentCourses表。提前谢谢!

    1

    SELECT *
    FROM Students s
    INNER JOIN StudentCourses sc
    ON  s.StudentID =  sc.StudentID
    UNION
    SELECT COUNT(courseID)
    FROM StudentCourses dd
    INNER JOIN Student ss
    ON ss.studentID = dd.studentID
    GROUP BY studentID
    

    在这种情况下JOIN是否合适?

    2

    SELECT *
    FROM Students s
    JOIN StudentCourses sc
    ON  s.StudentID =  sc.StudentID
    JOIN Courses c
    ON sc.COurseID = c.CourseID
    WHERE CourseName = ‘Art%’
    

    这是对的吗?

1 个答案:

答案 0 :(得分:1)

对于您的第一个答案,您说您需要学生列表(我假设您需要输出仅在学生表中提供的详细信息,例如姓名),以及他们注册的课程数量。

这个问题的第二部分可以通过计算每个学生的学生课程表中有多少行来完成:

SELECT studentid, COUNT(courseID) num_of_enrolled_courses
FROM   studentcourses
GROUP BY studentID;

完成后,您只需将此查询加入学生表即可获得额外信息:

select s.studentname,
       sc.num_of_enrolled_courses
from   studentname s
       inner join (SELECT studentid, COUNT(courseID) num_of_enrolled_courses
                   FROM   studentcourses
                   GROUP BY studentID) sc on s.studentid = sc.studentid;

对于您的第二个查询,您几乎是正确的 - 您在课程表上的过滤器必须为CourseName like 'Art%'(即使用like而不是' ='当您和' #39;重新进行通配符搜索)。您还需要输出您感兴趣的列,可能是students.studentname和courses.coursename。