Ответ на задание 1
Для объединения связанных строк двух таблиц используется
JOIN.
SELECT
Student.FullName,
StudentGroup.GroupName
FROM Student
INNER JOIN StudentGroup
ON Student.GroupID
= StudentGroup.GroupID;
Условие:
ON Student.GroupID = StudentGroup.GroupID
определяет, по каким столбцам связываются таблицы.
INNER JOIN возвращает только те строки, для которых
существует соответствующая запись в обеих таблицах.
Для повышения читаемости можно использовать псевдонимы:
SELECT
s.FullName,
g.GroupName
FROM Student AS s
INNER JOIN StudentGroup AS g
ON s.GroupID =
g.GroupID;
Например, результат может выглядеть так:
FullName
GroupName
----------------------------
Алиев Арман
CS-101
Серикова Алия
CS-101
Иванов Максим
CS-102
Ответ на задание 2
В данном случае необходимо объединить три таблицы.
Таблица Enrollment связывает студентов и дисциплины:
SELECT
s.FullName,
c.CourseName,
e.Grade
FROM Enrollment AS e
INNER JOIN Student AS s
ON e.StudentID =
s.StudentID
INNER JOIN Course AS c
ON e.CourseID =
c.CourseID;
Связи имеют следующую структуру:
Student
|
| StudentID
↓
Enrollment
|
| CourseID
↓
Course
Первый JOIN связывает регистрацию со студентом:
ON e.StudentID = s.StudentID
Второй связывает регистрацию с дисциплиной:
ON e.CourseID = c.CourseID
В результате можно получить:
FullName
CourseName Grade
------------------------------------------------
Алиев Арман Базы
данных 90
Алиев Арман
Программирование 85
Серикова Алия Базы
данных 95
Таким образом, JOIN позволяет получить связанную информацию,
которая физически хранится в разных таблицах.
Ответ на задание 3
Если необходимо вывести всех студентов, включая студентов
без регистрации на дисциплины, следует использовать LEFT JOIN.
SELECT
s.StudentID,
s.FullName,
e.CourseID,
e.Grade
FROM Student AS s
LEFT JOIN Enrollment AS e
ON s.StudentID =
e.StudentID;
LEFT JOIN возвращает все строки левой таблицы Student,
даже если соответствующей строки в Enrollment нет.
Например:
StudentID
FullName CourseID Grade
------------------------------------------------
1 Алиев
Арман 10 90
1 Алиев
Арман 12 85
2 Серикова
Алия 10 95
3 Иванов
Максим NULL NULL
В данном примере Иванов Максим еще не зарегистрирован ни на
одну дисциплину, поэтому значения CourseID и Grade равны NULL.
Если использовать INNER JOIN, этот студент вообще не попадет
в результат.
Таким образом: