sourcecode

mysql의 테이블이 3개인 내부 조인

copyscript 2023. 9. 21. 21:12
반응형

mysql의 테이블이 3개인 내부 조인

이너 조인으로 더 많은 테이블에서 데이터를 선택하고 싶습니다.

이것들이 제 테이블입니다.

Student (studentId, firstName, lastname)
Exam (examId, name, date)
Grade (gradeId, fk_studentId, fk_examId, grade)

나는 모든 학생들이 어떤 시험, 학년, 날짜를 가봤는지를 보여주는 진술서를 쓰고 싶습니다.날짜별로 정렬했습니다.

이것이 제 진술입니다.실행은 되지만 제대로 하고 있는지 확인하고 싶습니다.

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

거의 정확하게..조인을 보세요. 잘못된 필드를 참조하고 있습니다.

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

정확한 문장은 다음과 같습니다.

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

표는 정의된 대외 키 관계에 기초하여 다른 것을 지칭합니다.데이터가 쿼리된 것으로 표시되도록 하려면 ID를 제대로 참조해야 합니다.따라서 적절한 관계를 정의하지 않은 id에만 있는 것이 아니라 ids를 테이블의 적절한 외부 키에 참조해야 합니다.

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

코드를 쓰는 더 전문적인 방법은 "Aliases"를 사용하는 것입니다.

SELECT
  s.firstname,
  s.lastname,
  e.name,
  e.date,
  g.grade
FROM grade AS g
 INNER JOIN student AS s
   ON s.studentId = g.fk_studentId
 INNER JOIN exam AS e
   ON e.examId = g.fk_examId
 ORDER BY e.date;

언급URL : https://stackoverflow.com/questions/16013364/inner-join-with-3-tables-in-mysql

반응형