Jestem nowy w sql Najpierw mam 2 stołyoceny i drugi ze studentami. znaki mają podstawowy klucz markid, a uczniowie mają klucz podstawowy id studenta. Chcę wiedzieć, jaka powinna być relacja między obiema tabelami, aby każdy uczeń mógł mieć osobny znacznik. i jakie będzie zapytanie SQL, aby uzyskać ich dane.
Próbowałem relacji jeden do jednego z tym zapytaniem s = "wybierz s.Student Name, z.Hourly1Marks from Student s, marks z" ale pokazuje kartezjański produkt wpisów.
Odpowiedzi:
0 dla odpowiedzi № 1Przestudiuj pojęcie ŁĄCZENIA WEWNĘTRZNEGO (jeśli każdy uczeń ma jedną ocenę, tj. Relację 1: 1) i LEWE DOŁĄCZ (jeśli każdy uczeń może mieć wiele ocen, tj. Relacja 1: n).
Użyłeś złączenia wewnętrznego bez ograniczeń. Potrzebujesz czegoś takiego
SELECT S.name, Z.marks
FROM students S
JOIN marks Z ON S.student_id = Z.student_id
lub równoważnie
SELECT S.name, Z.marks
FROM students S, marks Z
WHERE S.student_id = Z.student_id
w przypadku relacji 1: 1 lub
SELECT S.name, Z.marks
FROM students S
LEFT JOIN marks Z ON S.student_id = Z.student_id
dla przypadku relacji 1: N.
0 dla odpowiedzi nr 2
Załóżmy, że masz dwie tabele:
Students
--------------
IDStudent
Name
....
Marks
--------------
IDMarks
Hourly1Marks
a relacja między Studend a Markami jest następująca: „Uczeń może mieć 0 lub więcej Marków”, wtedy musisz dodać kolumnę w tabeli Marks - nazwij to studentID
i ta kolumna jest używana jako klucz obcy dla tabeli ucznia.
wtedy możesz napisać to zapytanie
select s.Name, z.Hourly1Marks
from Student s left join marks z
on z.studentID = s.IDStudent
które zwrócą ci wszystkich uczniów i ich oceny (także ucznia bez żadnych ocen) lub, jeśli chcesz tylko studentów z co najmniej jednym znakiem
select s.Name, z.Hourly1Marks
from Student s inner join marks z
on z.studentID = s.IDStudent