Я абсолютно уверен, что мне нужно присоединиться к трем таблицам 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
Кто-нибудь может помочь мне? Я искал все, что мог подумать:/
Здесь вы идете: ключевые точки выделены жирным шрифтом, для Q1 вам нужно всего 2 таблицы. Прикрепленный график связей.
Вопрос 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"));
Вопрос 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
'John'
. Обратитесь к stackoverflow.com/questions/1992314/…
Для вопроса 1 просто соедините все таблицы вместе Classes.ID = ClassesStudents.ClassID, ClassesStudents.StudentsID = Students.ID, затем подсчитайте таблицу и группу Student по классам.name. Для Вопроса 2 вы можете использовать обратное соединение из вопроса 1 и положил условие "ГДЕ" после присоединения...
JOIN
ClasssesСтудентам и классам,COUNT()
иGROUP BY