Je veux sélectionner des données provenant de plusieurs tables avec jointure interne.
Ce sont mes tables.
Student (studentId, firstName, lastname)
Exam (examId, name, date)
Grade (gradeId, fk_studentId, fk_examId, grade)
Je veux écrire une déclaration qui montre à quel examen, quelle note et quelle date ont été les élèves. Trié après la date.
Ceci est ma déclaration. Il fonctionne, mais je veux m'assurer que je le fais correctement.
SELECT
student.firstname,
student.lastname,
exam.name,
exam.date,
grade.grade
FROM grade
INNER JOIN student
ON student.studentId = grade.gradeId
INNER JOIN exam
ON exam.examId = grade.gradeId
ORDER BY exam.date
Presque correctement .. Regardez les jointures, vous faites référence aux mauvais champs
SELECT student.firstname,
student.lastname,
exam.name,
exam.date,
grade.grade
FROM grade
INNER JOIN student ON student.studentId = grade.fk_studentId
INNER JOIN exam ON exam.examId = grade.fk_examId
ORDER BY exam.date
La déclaration correcte devrait être:
SELECT
student.firstname,
student.lastname,
exam.name,
exam.date,
grade.grade
FROM grade
INNER JOIN student
ON student.studentId = grade.fk_studentId
INNER JOIN exam
ON exam.examId = grade.fk_examId
ORDER BY exam.date
Une table est référée à une autre sur la base de la relation de clé étrangère définie. Vous devez vous référer correctement aux identifiants si vous souhaitez que les données s'affichent comme interrogées. Donc, vous devriez référencer les identifiants aux clés étrangères appropriées dans la table plutôt que simplement à l'identifiant qui ne définit pas une relation correcte
SELECT
student.firstname,
student.lastname,
exam.name,
exam.date,
grade.grade
FROM grade
INNER JOIN student
ON student.studentId = grade.fk_studentId
INNER JOIN exam
ON exam.examId = grade.fk_examId
GROUP BY grade.gradeId
ORDER BY exam.date