조인 문의드립니다. 1 2 679

by DB초보자입니다 [Oracle 기초] [2021.03.09 09:54:51]


안녕하세요 오랜만에 글을 남기네요

쿼리를 작성하다가 궁금한점이 있어서요

저힇 회사 선배님들 쿼리를 짜놓은걸 보다가 

비슷한 쿼리인데 A선배는

WITH STF_TABLE AS
(
 SELECT '20200001' AS STF_NO , 'AA' AS DEPT_CD FROM DUAL
 UNION ALL
 SELECT '20200002' AS STF_NO , 'AA' AS DEPT_CD FROM DUAL
)
, DEPT_TABLE AS
(
 SELECT   'AA' AS DEPT_CD FROM DUAL
 UNION ALL
  SELECT  'BB' AS DEPT_CD FROM DUAL
 UNION ALL
  SELECT  'CC' AS DEPT_CD FROM DUAL
)
SELECT *
  FROM STF_TABLE A
     , DEPT_TABLE B
WHERE A.DEPT_CD = B.DEPT_CD
  AND A.DEPT_CD = 'AA' 바인드변수(파라미터)
  AND B.DEPT_CD = 'AA' 바인드변수(파라미터)

위와같이 A B테이블 둘다 부서 조건을 걸어놓고 

B선배는

WITH STF_TABLE AS
(
 SELECT '20200001' AS STF_NO , 'AA' AS DEPT_CD FROM DUAL
 UNION ALL
 SELECT '20200002' AS STF_NO , 'AA' AS DEPT_CD FROM DUAL
)
, DEPT_TABLE AS
(
 SELECT   'AA' AS DEPT_CD FROM DUAL
 UNION ALL
  SELECT  'BB' AS DEPT_CD FROM DUAL
 UNION ALL
  SELECT  'CC' AS DEPT_CD FROM DUAL
)
SELECT *
  FROM STF_TABLE A
     , DEPT_TABLE B
WHERE A.DEPT_CD = B.DEPT_CD
  AND A.DEPT_CD = 'AA' 바인드변수(파라미터)

A테이블의 부서코드에만 조건을 걸어놨더라구용...

데이터는 동일하게 출력되는거같은데 성능적으로는 어떤식으로 쿼리를 짜는게..도움이 될까 궁금해서요

제생각에는 A, B 테이블에 각각 변수를 대입하는게 성능적으로 유리하지 않을까라는..생각이 들기는하는데(A B테이블에 각각 범위를 줄여주니..) 제 생각이 맞는지..

고수님들의 답변 부탁드리겠습니다.

 

 

by 마농 [2021.03.09 13:41:33]

상수조건 : a=b, a=1 의 경우 b=1 조건이 자동으로 생성됨.
조인조건 : a=b, a=c 의 경우 b=c 조건이 생성되지 않음.
상수조건의 경우 조건절 이행이라는 쿼리 변환이 수행됩니다.
따라서 굳이 조건을 추가로 적어주지 않아도 됩니다.
조인조건의 경우엔 조건절 이행이 되지 않습니다.
따라서 조건을 어떻게 주느냐에 따라 실행계획이 달라질 수 있습니다.

(a=b, a=c, b=c) 3개 조건 중 2개 조건 만으로도 충분조건이 되지만
어떤 조건을 선택하느냐에 따라 성능이 달라질 수 있습니다.
최적의 실행계획을 수립할 수 있는 조건 2개를 선택하거나
선택이 어려우면 차라리 3개 조건 다주는 방법도 있습니다.


by DB초보자입니다 [2021.03.09 13:57:25]

감사합니다!!

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