Ответ на задание 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, этот студент вообще не попадет в результат.

Таким образом: