Требуется помощь в запросе базы данных

#mysql #sql #database #mysql-workbench #outer-join

Вопрос:

Итак, вот база данных, которая у меня есть: https://imgur.com/EmQm9vx

Прошло некоторое время с тех пор, как я в последний раз работал с базой данных MySQL, поэтому у меня было несколько проблем, которые мне нужно решить.

Прежде всего, мне нужно написать запрос, который покажет мне как имя ученика, так и класс, в котором он зарегистрирован. Я пробовал кое-что с «ГДЕ», но часто терялся.

РЕШЕНИЕ: Использование СОЕДИНЕНИЯ-это правильный путь, так как вам нужно подключить 3 таблицы.

Комментарии:

1. пожалуйста, поделитесь образцами данных со сценариями создания таблицы и вставки данных. Изображение не будет работать. Кроме того, по одному вопросу на пост.

2. Задавайте свои другие вопросы в отдельном посте.

3. Вы отметили outer join , но это будет использоваться только в том случае, если вам нужны ученики, у которых нет соответствующего класса и/или классов, у которых нет соответствующего ученика. Вам нужно будет указать это требование. Если вы хотите , чтобы придерживались только совпадений [INNER] JOIN , где INNER ключевое слово необязательно.

Ответ №1:

Начните с первого вопроса. У нас есть отношения «многие ко многим», в которых класс student_class связывает каждый идентификатор student_id с идентификатором класса, но имена хранятся в связанной таблице учащихся и таблице классов. Поэтому нам нужно объединить все три таблицы.

 SELECT student.name, class.name
  FROM student
  JOIN student_class
    ON student.id = student_class.student_id
  JOIN class
    ON class.id = student_class.class_id
;
 

Ответ №2:

Вам нужно внутренне объединить таблицу учащихся с таблицей регистрации классов на основе идентификатора учащегося, а затем объединить таблицу регистрации классов с таблицей классов на основе идентификатора класса.

 SELECT student.Name, class.ClassName
  FROM student
  inner join class_registration 
    ON student.id = class_registration.StudentId
 inner join class
    ON class.classid = class_registration.ClassId
;