我是新來的sql 我有2個表第一個帶有標記,第二個帶有學生。 標記有一個標記ID的主鍵,學生有主鍵學生ID。 我想知道兩張桌子之間應該有什麼關係,所以每個學生都可以有不同的標記。 和什麼將是sql查詢來獲取他們的數據。什麼應該是兩個表之間的關係,所以每個學生可以有不同的標記
我曾經試過一次用這個選擇查詢 S =「選擇s.Student名稱,從學生小號z.Hourly1Marks,標誌着Z」 一個關係,但它顯示的條目的笛卡爾乘積。
我是新來的sql 我有2個表第一個帶有標記,第二個帶有學生。 標記有一個標記ID的主鍵,學生有主鍵學生ID。 我想知道兩張桌子之間應該有什麼關係,所以每個學生都可以有不同的標記。 和什麼將是sql查詢來獲取他們的數據。什麼應該是兩個表之間的關係,所以每個學生可以有不同的標記
我曾經試過一次用這個選擇查詢 S =「選擇s.Student名稱,從學生小號z.Hourly1Marks,標誌着Z」 一個關係,但它顯示的條目的笛卡爾乘積。
研究INNER JOIN(如果每個學生有一個標記,即1:1關係)和LEFT JOIN(如果每個學生可以有多個標記,即1:n關係)的概念。
您使用了沒有限制的內部連接。你需要的是像
SELECT S.name, Z.marks
FROM students S
JOIN marks Z ON S.student_id = Z.student_id
或等價
SELECT S.name, Z.marks
FROM students S, marks Z
WHERE S.student_id = Z.student_id
爲1:1的關係的情況下,或
SELECT S.name, Z.marks
FROM students S
LEFT JOIN marks Z ON S.student_id = Z.student_id
爲1:N的關係的情況下。
假如你有兩個表:
Students
--------------
IDStudent
Name
....
Marks
--------------
IDMarks
Hourly1Marks
和Studend和標記之間的關係是「一個學生可以有0個或多個商標」,那麼你需要在表格標記添加一列 - 稱之爲studentID
並且此列用作學生表的外鍵。
,那麼你可以這樣寫查詢
select s.Name, z.Hourly1Marks
from Student s left join marks z
on z.studentID = s.IDStudent
,會給你回所有的學生和他們的標記(也沒有任何標誌的學生) 或者,如果只需要學生提供至少一個標記
select s.Name, z.Hourly1Marks
from Student s inner join marks z
on z.studentID = s.IDStudent
內部連接也覆蓋1:N關係。左(外)連接唯一有用的時候是當你在連接列上有空或者不匹配的值時,我不確定是否適用於他的問題。你的答案中也沒有明確區分。 –
@TimPote:當有人說1:N時,通常認爲'N> = 0',因爲這種關係遠遠超過'N> 0',這使得內部連接適用於1:N關係例外的規則。如果學生有可能有幾個分數,那麼他很有可能不會有任何 - 內連接失敗。 – Amadan