Backend

SQL - 선택조건 조건줄 구현하기

GOMJ 2024. 4. 7. 22:16

선택조건이란 있어도 되고 없어도 되는 조건을 의미한다.

예를 들어서 상품을 검색할때 이름, 카테고리라는 조건이 있다고 가정해보자. 만약 고기를 산다고 가정해보자.

{
 "이름": "삼겹살",
  "카테고리" : "수입"
}

 

이렇게 검색을 할 수 있고 다음과 같이 카테고리 없이도 검색이 가능할 것이다.

{
 "이름": "삼겹살"
}

 

전자는 수입인 삼겹살에 대해서만 검색 결과가 나오고 후자의 경우 국내산, 수입산 상관없이 모든 삼겹살의 정보가 반환될것이다. 지금까지 검색 조건을 구현하면서 선택 조건 구현은 JPA로 했기에 쿼리로 직접 작성할 일이 없었다. 하지만 환경이 마이바티스를 사용하는 환경으로 넘어오면서 선택 조건을 직접 쿼리로 구현해야했다. 2가지 방법을 통해 선택 조건을 구현할 수 있다.

 

우선 첫번째는 각각 조건에 대해 구현을 해주는것이다.

SELECT *
    FROM PRODUCT P
        WHERE ((${이름} IS NULL) OR (${이름} IS NOT NULL AND P.이름 = ${이름})) 
            AND ((${카테고리} IS NULL) OR (${카테고리} IS NOT NULL AND P.카테고리 = ${카테고리}))

 

즉 선택 조건을 선택하지 않았을 경우와 선택을 했을 경우를 구분해 WHERE절에 조건을 기재하는것이다.

 

두번째 방법으로는 NVL을 사용하면 된다.

SELECT *
    FROM PRODUCT P
        WHERE NVL(${이름}, P.이름) = P.이름
            AND NVL(${카테고리}, P.카테고리) = P.카테고리