쿼리 질문이요~ 0 5 1,375

by 초보개발자민짱 [SQL Query] [2014.12.31 10:01:01]


  SELECT 
     A.YEAR     
  ,  A.HAKGI    
  ,  A.HAKBEON
  ,  COMMON.SF_CS_BUSEO_CODE(B.HAKGWA_CD) as HAKGWA_NM
  ,  COMMON.SF_CS_BUSEO_CODE(B.JEONGONG_CD) as JEONGONG_NM            
  ,  A.SINCHEONG_ILJA          
  ,  B.NAME
  ,  B.JUMIN_NO2
  ,  MOD(SUBSTR(B.JUMIN_NO2,1,1),2) AS SEX
  ,  DECODE(MOD(SUBSTR(B.JUMIN_NO2,1,1),2),'1','남','0','여') AS SEX_NM
  ,  B.HAKNYEON
  ,  B.JUMIN_NO1 || CRYPTO.DEC('PATTERN1',JUMIN_NO2) AS JUMIN_NO            
  ,  SUBSTR(B.HP_NO,1,3) || '-' || SUBSTR(B.HP_NO,4,4) || '-' || SUBSTR(B.HP_NO,8,4) || ''  AS HP_NO
  ,  CASE WHEN TELNO IS NULL THEN '' ELSE SUBSTR(B.TELNO,1,3) || '-' || SUBSTR(B.TELNO,4,3) || '-' || SUBSTR(B.TELNO,7,4) || ''  END AS TELNO
  ,  B.EMAIL
  ,  B.HYEON_POST_NO
  ,  B.HYEON_JUSO1
  ,  B.DAEHAK_CD
  ,  DECODE(MOD(SUBSTR(B.JUYA_GBCD,1,1),2),'1','야간','0','주간') AS JUYA_GBCD
  ,  B.GWAJEONG
  ,  B.HAKJEOK_ST
  ,  B.HAKGWA_CD
  ,  B.JEONGONG_CD
  ,  B.BOHOJA_TELNO
  ,  CASE WHEN BOHOJA_HP_NO IS NULL THEN '' ELSE  SUBSTR(B.BOHOJA_HP_NO,1,3) || '-' || SUBSTR(B.BOHOJA_HP_NO,4,4) || '-' || SUBSTR(B.BOHOJA_HP_NO,8,5) || ''  END AS BOHOJA_HP_NO
  ,  A.SEONGIN_YN     
  ,  A.CHAEKJEONG_AEK
  ,  A.NAPBU_CD                 
  ,  A.NAPBU_ILJA
  ,  A.NAPBU_BANK_CD
  ,  A.TOEGEO_YN                
  ,  A.NAPBU_AEK
  ,  A.NAPBU_WAY
  ,  A.BIGO
  ,  A.HOSIL
  ,  A.GEONMUL_GBCD
  
        FROM BK_SINCHEONG_M A
        INNER JOIN  HAKSA.HS_HAKJEOK_V B
        ON A.HAKBEON = B.HAKBEON
     
WHERE  1 = 1            
AND     YEAR                  = #YEAR#
AND     HAKGI                 = #HAKGI#
AND     B.DAEHAK_CD             LIKE #DAEHAK_CD#
AND     NVL(B.HAKGWA_CD,' ')    LIKE #HAKGWA_CD#
AND     NVL(B.JEONGONG_CD,' ')  LIKE #JEONGONG_CD#
AND     TO_CHAR(B.HAKNYEON)     LIKE #HAKNYEON#
AND  (A.HAKBEON LIKE #HAKBEON# || '%' OR B.NAME LIKE #HAKBEON# || '%')

     ORDER BY YEAR
  ,  HAKGWA_CD
  ,  HAKNYEON

 

여기서 수정해야됄 쿼리나 조금더 쿼리튜닝을 하고싶은데 선임분들 조언듣고싶습니다!

by 초보개발자민짱 [2014.12.31 10:33:08]

선임분들이보시기에 이부분은 이렇게 하는게 좋겟다라는 조언 듣고싶습니다ㅎㅎ


by 아발란체 [2014.12.31 10:43:28]

쿼리만 보면 잘 모르겠는데영... ㅋㅋ

인덱스 구성, 실행계획 등을 올려주시면 도움이 될거 같습니다.


by 마농 [2014.12.31 11:16:35]
바인드 변수들의 의미와 입력값에 대한 설명, nvl 을 사용한 이유 등도 올려주세요.

by 인생설계중 [2014.12.31 11:18:48]

실제 데이터 들도 개인적으로 궁금하네여.. 샘플로 볼수 있을까여...

AND     NVL(B.HAKGWA_CD,' ')    LIKE #HAKGWA_CD#

AND     NVL(B.JEONGONG_CD,' ')  LIKE #JEONGONG_CD#

AND     TO_CHAR(B.HAKNYEON)     LIKE #HAKNYEON#
 
왜 이렇게 LIKE..가 많을까여.. _CD 는 코드성 테이블 이라는 건데.. 흐음..
그리고.. 학년도... 숫자만 있는거 아니에여? 혹시??
 
AND  (A.HAKBEON LIKE #HAKBEON# || '%' OR B.NAME LIKE #HAKBEON# || '%')
개인적인 의견으로.. 학번은 정해진 숫자 일거 .. 같은데.. 만약 홈페이지나 어디서
입력 받은걸로 구현한다면.. 학번 12345678 인데 123 으로 오타치면.. 엄청나게 많은 데이터가.. 나올거 같은데... 원하시는게 맞나요..?
 

by 아발란체 [2014.12.31 11:42:33]
AND     B.DAEHAK_CD             LIKE #DAEHAK_CD#
AND     NVL(B.HAKGWA_CD,' ')    LIKE #HAKGWA_CD#
AND     NVL(B.JEONGONG_CD,' ')  LIKE #JEONGONG_CD#
AND     TO_CHAR(B.HAKNYEON)     LIKE #HAKNYEON#
 
like에 %가 없다면 like가 아닌 등치 조건(=)으로 하는 것이 좋을 것 같습니다.
그리고 NVL(... 부분은 마농님 말씀처럼 의미가 없다면 삭제하는 것이 역시 좋을 것 같습니다.
댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입