테이블 4개 조인 질문이 있습니다. 0 9 1,732

by 개논물 [SQL Query] [2014.09.29 14:43:56]


SELECT A.CM_SEQ, A.USER_SEQ, C.USER_NM , B.PUB_CODE, D.STORE_NM  FROM
TB_COUPON_DETAIL A , TB_COUPON B , TB_USER C , TB_STORE D
WHERE A.CM_SEQ = B.CM_SEQ
AND A.USER_SEQ  = C.USER_SEQ
AND B.PUB_CODE = D.STORE_CODE
AND A.USE_YN = 1 AND B.USE_YN = 1 AND C.USE_YN = 1 AND D.USE_YN = 1

 

이런 씩으로 4 개의 테이블의 조인을 했는데요  

이쿼리의 의미가   A 테이블 B 테이블  INNER JOIN 결과에  C 테이블 INNERJOIN   이결과에 D 테이블 INNERJOIN

의 이미가 맞나요?  선배님들 조언좀 부탁드립니다.

 

 

 

by 마농 [2014.09.29 15:13:05]

맞을수도 있고 아닐수도 있습니다.
SQL 은 구조적 질의어로 절차적 언어와는 상당히 다릅니다.
우리는 SQL을 통해 4개의 테이블을 조인해라 라고 명령하면 되고
이 4개의 테이블의 연결관계만 기술할뿐, 읽는 순서는 지정하지 않습니다.
처리 순서가 어떻게 될지는 알 수 없습니다.


by 시정잡배 [2014.09.29 15:13:40]

예를들어 A, B, C, D 4개의 테이블을 조인하고자 할 경우 옵티마이저는 ( ( (A JOIN D) JOIN C) JOIN B)와 같이 순차적으로 조인을 처리하게 된다고 하네요.

먼저 A와 D 테이블을 조인 처리하고, 그 결과 집합과 C 테이블을 다음 순서에 조인 처리하고, 마지막으로 3개의 테이블을 조인한 처리 집합과 B 테이블을 조인 수행하게 된다고 보시면 되겠네요 ㅎㅎ


by 아발란체 [2014.09.29 15:27:09]

옵티마이저는 정해진 순서에 따라 조인을 한다는 것이 보장되지 않는 것 같습니다.

순서가 보장 된다면 순서 힌트를(ordered, leading) 쓸 필요가 없겠지용.


by 개논물 [2014.09.29 15:19:15]

답변 감사합니다 ㅎ 많이 배우고 갑니다.
 


by 개논물 [2014.09.29 15:21:48]

답변 감사합니다. 근데 위의 방식으로 쓰는게 틀린 문법은 아니죠?

그냥  A innerjoin b on a.test=b.test

         innerjoin c

         on  a.test = c.test

이런 씩으로 쓰는게 나을까요?


by 아발란체 [2014.09.29 15:28:09]

INNER JOIN이 표준이긴 한데, 가독성은 생략하는 것이 더 좋은 것 같습니다.


by 시정잡배 [2014.09.29 15:31:03]

장단점이 있는것 같아요

ON 조건절을 쓰시면 JOIN 서술부(ON 조건절)와 비JOIN 서술부(WHERE 조건절)를 분리하여 이해하기가 쉽지만 FROM 절에 테이블이 많이 사용될 경우 다소 복잡하게 보여 가독성이 떨어지는 단점이 있을수 있겠네요 ㅎㅎ


by 마농 [2014.09.29 15:28:36]

여러 DB에 대한 이식성을 높이려면 ANSI JOIN 구문을 쓰는게 나을 것이구요.
예전 조인방식에 익숙하신 분은 그냥 예전 방식 사용하셔도 됩니다.
어느것이 맞다 틀리다가 있는것은 아니죠.
각 프로젝트에서 정한 개발 표준을 따르시면 됩니다.


by 개논물 [2014.09.29 15:34:23]

많이 배우고 갑니다 너무 감사합니다.

 

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