본문 바로가기
Coding/Back-end

[SQL] where절 조회조건 무효화 시키기(와일드카드 % 활용)

by 또떠나 leavAgain 2023. 10. 25.
반응형

회사에서 쿼리를 짜고나면 실제 데이터값을 넣어서 테스트를 해야하는 상황이 발생하는데

이 때, join된 테이블이 많거나 실데이터가 아직 완전히 들어온 상태가 아니라면

조회조건으로 입력되는 테스트값을 찾는데 불필요한 시간이 소요될 수 있다

 

이럴 때를 대비하여 와일드카드'%'로 조회조건을 무효화 시키고

쿼리가 정상적으로 짜여졌는지 테스트 해볼 수 있는 방법을 공유해보겠다

 

먼저, 아래와 같은 코드를 짰다고 가정해보자

select tb1.COL1, tb2.COL2
from TABLE1 tb1
    inner join TABLE2 tb2 on tb2.COLNO = tb1.COLNO
where tb1.COLNO = :colId

조회 조건으로 colId 테스트값이 필요하다.

명확하게는 TABLE1, TABLE2 두 테이블에 공통으로 들어가있는 colId를 입력해야

쿼리가 정상적으로 조회되는데..

 

먼저 우리가 기본적으로 알고있는 방법은, 직접 각 테이블에 공통되는 데이터를 먼저 조회하는 것이다.

테스트 데이터를 준비하는 과정이다.

where절을 삭제하고 컬럼으로 COLNO를 추가해서, 공통되는 COLNO값을 직접 쿼리를 수정하여 확인한다.

select tb1.COLNO, tb1.COL1, tb2.COL2
from TABLE1 tb1
    inner join TABLE2 tb2 on tb2.COLNO = tb1.COLNO

물론 이렇게 조회조건이 하나인데다 간단한 쿼리인 경우에는 가능하겠지만.. 쿼리가 길어진다면?

조회조건이 하나가 아니라 5개 이상씩 된다면 그 쿼리를 다 수정해서 조회 할 것인가

 

조금더 간단한 방법을 소개하겠다.

와일드카드를 :colId 자리에 넣어서 조회하는 방법인데,

=을 like로 변경하고 와일드카드(%)를 사용해서 조회조건을 무효화 시키는 방법이다.

select tb1.COL1, tb2.COL2
from TABLE1 tb1
    inner join TABLE2 tb2 on tb2.COLNO = tb1.COLNO
where tb1.COLNO like '%'

이렇게 하면 COLNO의 조회조건으로 COLNO 전체값을 넣는것과 같은 의미이기 때문에

join 조건은 그대로 놓고, 가능한 테스트값 전체를 넣은 결과를 볼 수 있다

 

 

아래는 와일드카드를 조건으로 넣어 조회문을 돌려 본 예시이다.

조회 파라미터가 10개가 넘어간다고 했을때, 저런식으로 모두 와일드카드를 써버리면

테스트값 하나하나 적어놓고 돌려볼 필요없이 한번에 조회가 가능하다.

 

보통 이 방법으로 먼저 조건절에 like로 코드를 짜놓고

조건 파라미터 값은 모두 '%' 와일드카드로 조회한다.

select tb1.COL1, tb2.COL2
from TABLE1 tb1
inner join TABLE2 tb2 on tb2.COLNO = tb1.COLNO
where tb1.COLNO like :colId
  and tb1.COL2 like :param2
  and tb1.COL3 like :param3
  and tb1.COL4 like :param4
  and tb1.COL5 like :param5

이렇게 조회했을 때, join이나 쿼리에 문제가 없는게 확인되면

select tb1.COL1, tb2.COL2
from TABLE1 tb1
inner join TABLE2 tb2 on tb2.COLNO = tb1.COLNO
where tb1.COLNO = :colId
  and tb1.COL2 = :param2
  and tb1.COL3 = :param3
  and tb1.COL4 = :param4
  and tb1.COL5 = :param5

그 때, like를 다시 =(논리연산자)로 바꿔주면 된다.


응용 방법을 하나 더 알려드리자면

조회 파라미터의 자료형을 명확하게 파악하고 있는 경우

숫자, 문자열로 쿼리 파라미터를 나누어 작성해 놓으면 유효성 검사도 가능하고 더 명확한 쿼리를 작성할 수 있다.

 

param5는 숫자이고,

colId, param2, param3, param4는 문자열인데 일부문자열만 포함되면 조회결과로 포함하는 것으로 가정했을때

select tb1.COL1, tb2.COL2
from TABLE1 tb1
inner join TABLE2 tb2 on tb2.COLNO = tb1.COLNO
where tb1.COLNO like '%' || :colId || '%'
  and tb1.COL2 like '%' || :param2 || '%'
  and tb1.COL3 like '%' || :param3 || '%'
  and tb1.COL4 like '%' || :param4 || '%'
  and tb1.COL5 = :param5

위와 같이 코드를 작성할 수 있다.

 

728x90