2016-12-19 24 views
0
Courses   Teachers  Students  StudentCourses 
    CourseID  TeacherID  StudentID  CourseID 
    CourseName  TeacherName  StudentName  StudentID 
    TeacherID 

你好,
這些都是我的表,我有兩個問題..加入表使用橋

  1. 我需要獲得所有學生的名單,有多少課程,每先後就讀於
  2. 所有參加課程的學生都以「藝術」開始。

我很困惑,因爲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%’ 

這是正確的嗎?

+0

那麼,你有什麼嘗試? StudentCourses將學生鏈接到一門課程,因此您需要參加這個課程。 – OldProgrammer

+0

StudentCourses表格用於強化學生和課程之間的多對多關係。 1名學生可以有很多課程,1門課程可以有很多學生。通過將關係拆分爲2個表格,您現在有1個student_course行匹配到一個學生行和1個課程行。你需要做的是寫一個加入學生,學生課程和課程表的查詢。然後,您可以根據需要修改該查詢來回答您的問題。如果您遇到問題,請編輯您的問題以顯示您迄今爲止所嘗試的內容,然後我們將爲您提供進一步的指導。 – Boneist

+0

(事實上,對於你的第一個問題,你可能會逃避一起加入Students和StudentCourses表) – Boneist

回答

1

對於第一個答案,你說你需要學生的列表(我假定你的意思是你需要輸出僅在學生表中可用的詳細信息,例如姓名),以及他們參加的課程數量。

這個問題的第二部分可以有多少行以每studentid的studentcourses表計數來完成:

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而不是'=')。您還需要輸出您感興趣的列,可能是students.studentname和courses.coursename。

+0

我明白了。加入名爲sc的查詢。我會牢記這一點。非常感謝你對我的耐心。我需要更多練習hmm – user6185827

+0

沒問題* {:-)如果您想要更多的練習,您可以隨時閱讀StackOverflow上#oracle和/或#sql標記的問題,並嘗試回答/閱讀其他人給出的答案。 AskTom是另一個很好的資源。 – Boneist

+0

@ user6185827 - 「通過名爲sc的查詢連接」是正確的。 (加入「to」更常見,但這只是英文)。真的,您正在加入查詢的結果或輸出。 (在這種情況下,在更復雜的代碼中使用時,稱爲「子查詢」)。問題是子查詢的輸出是一組行。就像一張桌子。就像一個觀點。真正重要的是 - 你加入的是什麼,你選擇什麼等,是一組「行」。在這種情況下,子查詢的輸出與存儲的表無法區分。你從這個答案中正確地提取了正確的結論。 – mathguy