3개 테이블 조인 질문드립니다. 0 7 1,676

by 댕댕구 [2021.08.30 17:53:09]


SELECT "SURVEY_ID", "SURVEY_TITLE", "SURVEY_CONTENT", "SURVEY_REGDATE", "SURVEY_ENDDATE", "USER_NAME", "SURVEY_CNT", "SURVEY_CHECK" FROM( select survey.*, users_survey.SURVEY_CHECK from survey, users_survey where survey.survey_id = users_survey.survey_id) where rownum <= 10 order by survey_regdate desc;

 

 

 

현재 join 공부중에 있습니다. survey 테이블과 users_survey 테이블을 조인해서 맞는 건지는 모르겠지만... 값을 가져오는데 성공은 했습니다. 그런데 추가적으로 Question이라는 테이블의 question_type 을 survey 테이블에 조인해야하는 상황인데 테이블 3개의 조인은 전체적으로 이해가 너무 어렵습니다... 혹시 조금 쉽게 설명해주실 수 있을까요?

 

select DISTINCT

S.SURVEY_ID,
S.SURVEY_TITLE,
S.SURVEY_CONTENT,
S.SURVEY_REGDATE,
S.SURVEY_ENDDATE,
S.USER_NAME,
S.SURVEY_CNT,
U.SURVEY_CHECK,
Q.QUESTION_TYPE
FROM survey s
inner join users_survey u
on s.survey_id = u.survey_id
INNER join question q
on s.survey_id = q.survey_id;

 

혹시 이런 쿼리가 맞을까요?? 값은 제대로 나오는 것 같은데... 확신이 안서네요 ㅠㅠ 

by 마농 [2021.08.30 18:23:54]

DISTINCT 를 왜 사용하죠?
중복이 발생된다면? 조인 조건이 누락된게 아닐런지?


by 축구쟁이 [2021.08.30 18:24:50]

1. INNER JOIN이 여러개일 경우 순차적으로 생각하시면 됩니다. (사실 순서에 관계없이 결과는 항상 동일하며 사칙연산의 곱셈이라고 보시면 됩니다. (A * B) * C = A * (B * C) )

survey 테이블과 users_survey 테이블을 조인한 결과를 테이블 자체로 생각하시고 question 테이블과 조인한다고 보시면 됩니다.

2. INNER JOIN에서 중복된 값이 있을 경우에는 테이블과 테이블의 관계를 보셔야 합니다.

JOIN 조건으로 주신 s.survey_id = u.survey_id 또는 s.survey_id = q.survey_id 기준으로 테이블의 데이터 관계가 1:1인지 1:N인지 N:M인지를 보시면 되는데

N:M일 경우에는 결과에 중복 데이터가 존재합니다.


by 댕댕구 [2021.08.30 18:38:10]

마농님 답변 정말 감사합니다. 공부할수록 어려운 세계네요 db의 세상이란...

중복값이 나오는 이유를 잘 모르겠습니다... 단순히 제 생각으로는 위 쿼리를 실행할 때 survey_id가 1이라고 가정하면 같은 survey_id 값을 가진 question_id가 2개가 존재하여 위 쿼리를 사용하면 2개의 survey_id 값이 뽑혀나오는건가 라고 생각했봤는데 혹시 다른 이유일까요?

우선은 당장 해결하기가 어려워 DISTINCT를 사용했습니다...

 

축구쟁이님 자세한 설명 답변 정말 감사합니다. 

아직도 조금은 이해하기 어렵지만 그래도 훨씬 많이 이해할 수 있었습니다! 정말 감사합니다! 조금 더 노력해서 완벽히 이해할 수 있도록 공부하겠습니다! 


by 마농 [2021.08.30 19:07:26]

(설문 1개) 에 (질문 2개) 가 조인되는 것은 중복이 아닙니다.
정상적인 조인 입니다. 결과는 2개 행이 나오는게 맞습니다.
DISTINCT 를 제거한 결과와 포함한 결과가 다른가요?


by 댕댕구 [2021.08.30 19:10:18]

마농님 답변 감사합니다.

결과는 동일합니다! DISTINCT 를 제거하면 question 값만 0과 1로 다르게 나오고 나머지는 모두 동일하게 2개 행이 나옵니다.

혹시 정상적인 조인이 맞는건가요? 


by 마농 [2021.08.30 19:11:53]

1:N 관계의 두 집합이 조인되어 N 건이 나오는 것은 정상입니다.


by 댕댕구 [2021.08.30 19:16:35]

마농님 답변 감사합니다.

그렇군요!! 저는 결과물이 이상한 줄 알고 걱정했습니다 ㅠㅠㅠ 매번 감사합니다!!!

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