OR절과 UNION 질의 0 1 337

by 온수동종점 [SQL Query] [2018.10.15 21:46:38]


TB_ABC 테이블이 아래와 같이 있을때, 

 

조건 1), 2), 3)의 합집합을 구하고자 합니다.

 

1) A_CD = '01'  AND  B_CD ='KOR'

2) A_CD = '02'  AND  B_CD ='USD'

3) A_CD = '03'

 

------------------------

 A_CD | B_CD | C_NAME

------------------------

 01   | KOR  | 홍길동    

 01   | USD  | 홍길순    

 01   | USD  | 홍길자    

 02   | KOR  | 홍길식    

 02   | KOR  | 홍길배    

 02   | USD  | 홍길정    

 03   | KOR  | 홍길석    

 03   | USD  | 홍길혁    

 

결과는 홍길동,홍길정,홍길석,홍길혁 이렇게 나오겠죠

보통 쉽게 생각할 수 있는게 아래와 같이 두가지 방법이 있는데요

(OR절 또는 UNION 사용)

 

이렇게 OR절 쓰던지 

 

SELECT C_NAME

FROM TB_ABC 

WHERE 1=1

AND (

      (A_CD = '01'  AND  B_CD ='KOR')

OR    (A_CD = '02'  AND  B_CD ='USD')

OR    (A_CD = '03') 

    )

 

이렇게 UNION절 쓰던지 

 

SELECT C_NAME

FROM TB_ABC

WHERE A_CD = '01' AND  B_CD ='KOR'

UINON

SELECT C_NAME

FROM TB_ABC

WHERE A_CD = '02' AND  B_CD ='USD'

UNION 

SELECT C_NAME

FROM TB_ABC

WHERE A_CD = '03' 

 

그런데 두가지 방법 다 맘에 들지 않네요 

제가 간단히 표현했지만 건수가 많을때 성능도 그렇고, 퀴리의 중복도 심한거 같아서...

다른 방법은 없을까요?

굳이 선택하면 UNION이 최선인가요?

 

고수님들의 조언 부탁드립니다 ㅠㅠ

by 마농 [2018.10.16 08:50:23]

UNION 이 아니라 UNION ALL 입니다.
이 둘의 차이를 정확히 알고 사용하셔야 합니다.
그리고 저는 단순한 OR 가 좋아 보이네요.
그리고 성능까지 고려한다면?
좀 더 정확한 정보가 필요합니다.
 - 인덱스 정보
 - 건수 정보 : 전체건수, 각각의 조건의 건수
 - 각 코드의 종류(가지수)와 특이사항(특정 코드가 많다던가)
 - 널 가능여부

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