쿼리 질문입이다 0 1 901

by 다어려워 [2019.07.24 15:51:43]


4개의 테이블이 있습니다

커리큘럼  : 커리큘럼_ID | 과목 | 제목

커리큘럼 회차순서 : 커리큘럼_ID | 회차_ID | 회차순서

커리큘럼 학생 등록 관리 : 학생_ID | 커리큘럼_ID

학생 커리큘럼(회차별) 문제지 제출 : 학생_ID | 회차_ID | 문제번호 | 답안

이런 식으로 되어있습니다.

여기서 궁금한 것이

학생이 등록이 되어있으나 회차별 문제를 안 푼 학생(문제지 제출 테이블에 정보가 없는 학생)을 쿼리로 출력할 수 있나요?

JOIN을 사용하면서 지금 쿼리를 짜고 있는데 도통 안되서 질문을 올리게 되었습니다

답변 감사합니다

by 꼬랑지 [2019.07.24 17:02:50]

1. 일단 테이블들의 pk가 무엇인지, 테이블간 관계가 1:1인지 1:다인지 설명이 없다면 너무 추상적이어서 솔루션을 제시하는데 한계가 있습니다.

2. [커리큘럼 학생 등록 관리] 테이블은 학생id, 커리큘럼id로 되어 있는데 [학생 커리큘럼(회차별) 문제지 제출] 은 학생id,회차id로 되어 있네요.

해당 회차가 어느 커리큘럼에 속하는지 구분이 가능한가요? 즉, 회차id는 유니크한가요? 만일 유니크하지 않다면 모델링에 문제가 있어 쿼리가 불가능해 보입니다.

3. 만일 회차id가 유니크 하다면 [커리큘럼 학생 등록 관리 : 학생_ID] 와 [커리큘럼 회차순서]를 조인하여 해당 학생이 등록한 모든 회차id를 구할 수 있고 이 집합과 [학생 커리큘럼(회차별) 문제지 제출] 를 아웃조인 한다면  특정 학생이 특정 회차에 문제지를 제출했는지 여부를 알 수 있겠네요

 

select  *

from (

select 커리큘럼_ID,회차_ID,학생_ID

from 커리큘럼 학생 등록 관리 a, 커리큘럼 회차순서 b

where 1=1

and a.커리큘럼_ID = b.커리큘럼_ID

) a, 학생 커리큘럼(회차별) 문제지 제출 b

where 1=1

and a.학생_ID = b.학생_ID (+)

and a.회차_ID = b.회차_ID (+)

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입