Застрял! Как мне объединить три таблицы SQL, чтобы ответить на эти два вопроса? Или мне не нужно?

0

Я абсолютно уверен, что мне нужно присоединиться к трем таблицам SQL, чтобы ответить на эти два вопроса, но я не могу понять это! Вопрос 1 меня полностью превзошел, но я думаю, что я близок к вопросу 2. Важно помнить, что эта база данных фактически не существует, только теоретически.

Оба вопроса 1 и 2 используют одни и те же таблицы:

Классы
Я БЫ
название

Ученики
Я БЫ
название

ClassesStudents
ID класса
Студенческий билет

Вопрос 1: Напишите SQL-запрос, который будет возвращать имя каждого класса и сколько студентов его принимают.

Вопрос 2: Напишите SQL-запрос, который вернет имена классов, которые принимает ученик с именем "Джон". Предположим, что в базе данных есть только один ученик с таким именем.

Мое предположение по Вопросу 1 (WIP):

SELECT ClassesStudents.StudentID, ClassesStudents.ClassID, 
Classes.Name
FROM ClassesStudents, Classes; 

Мое предположение о вопросе 2:

SELECT Classes.Name
FROM Students
JOIN ClassesStudents ON ClassesStudents.StudentID=Students.ID AND 
Students.Name = "John"
JOIN Classes ON Classes.ID=ClassesStudents.ClassID

Кто-нибудь может помочь мне? Я искал все, что мог подумать:/

Изображение 174551

  • 0
    Вопрос 1 Подсказка: JOIN ClasssesСтудентам и классам, COUNT() и GROUP BY
  • 0
    Все еще не следую: / Сможете ли вы дать ответы, чтобы я мог их анализировать? Вот так я учусь лучше всего.
Показать ещё 4 комментария
Теги:
database

3 ответа

0

Здесь вы идете: ключевые точки выделены жирным шрифтом, для Q1 вам нужно всего 2 таблицы. Прикрепленный график связей. Изображение 174551

Вопрос 1:
SELECT Classes.ClassName, Count (ClassesStudents.StudentID) AS CountOfStudentID
FROM Classes INNER JOIN ClassesStudents ON Classes.ClassID = ClassesStudents.ClassID
GROUP BY Classes.ClassName;

Вопрос 2:
SELECT Classes.ClassName
FROM Students INNER JOIN (классы INNER JOIN ClassesStudents ON Classes.ClassID = ClassesStudents.ClassID) ON Students.StudentID = ClassesStudents.StudentID
WHERE (((Students.StudentName) = "John"));

  • 0
    Спасибо за помощь!
0

Вопрос 1:

SELECT  
Classes.Name, COUNT(*)
FROM ClassesStudents 
JOIN Classes
ON ClassesStudents.ClassID = Classes.ID
GROUP BY Classes.Name

Предположим, что у двух классов нет одинакового имени. В противном случае включите ClassID в запрос:

SELECT ClassesStudents.ClassID,
Classes.Name, COUNT(*)
FROM ClassesStudents 
JOIN Classes
ON ClassesStudents.ClassID = Classes.ID
GROUP BY ClassesStudents.ClassID, Classes.Name
  • 0
    Спасибо! Я думаю, это начинает иметь смысл. Я был близок с Q2?
  • 0
    Q2 должен работать, но я бы использовал одинарную кавычку вместо двойной кавычки 'John' . Обратитесь к stackoverflow.com/questions/1992314/…
Показать ещё 3 комментария
0

Для вопроса 1 просто соедините все таблицы вместе Classes.ID = ClassesStudents.ClassID, ClassesStudents.StudentsID = Students.ID, затем подсчитайте таблицу и группу Student по классам.name. Для Вопроса 2 вы можете использовать обратное соединение из вопроса 1 и положил условие "ГДЕ" после присоединения...

  • 0
    Спасибо за вашу помощь. Я обновил свой ответ на Q1. Я иду в правильном направлении?

Ещё вопросы

Сообщество Overcoder
Наверх
Меню