데이터를 전체조회, 예를 들어 입력값을 공란으로 처리하였을때 모든 데이터를 조회한다고 할때 환경에 따라 쿼리 구성 방법이 달라진다.
또한 Where 조건절이 어떻게 반영되는지 어느정도 이해를 하고 있어야, 전체조회를 할 때 어떠한 방식으로 쿼리를 구성해야하는지 윤곽을 정할 수 있다.
WHERE 1=1
AND COLUMN_A = DECODE(:column_A, '', COLUMN_A, :column_A)
AND COLUMN_B LIKE '%' || DECODE(:column_A, '', COLUMN_B, :column_B)
여기서 핵심은 COLUMN_A = COLUMN_A의 조건이 성립하도록 구성해주는 것이다.
이 경우, 데이터가 NULL인 record는 조회하지 않는다.
이 부분은 좀 더 봐야하겠으나, WHERE 조건절 자체가 쿼리결과를 바탕으로 결과를 선별한다는 점을 생각하면, 해당 COLUMN_A이 NULL일 경우 NULL = NULL이 되어서 조건절로 아예 보지를 않아서 그런것 같다.
WHERE 1=1
AND NVL(COLUMN_A,0) LIKE DECODE(:column_A, '', '%', :column_A)
여기서 핵심은 0 = '%' 의 조건이 성립하도록 구성해주는 것이다.
이 경우, 데이터가 NULL이더라도 NVL에 의해 0으로 세팅되고 0 LIKE '%'의 조건절은 참이 되어서 모든 결과를 전체조회한다.
Where 조건절은 이미 연산된 쿼리 결과를 바탕으로 진행한다는 점을 기억한다.
쿼리 연산 -> 그 후에 Where 조건절로 선별
만약 조건절상 COLUMN이 NULL일 경우, NULL인 데이터는 조회하지 않는다.
Data가 있을 경우, 없을 경우 각각에 대한 전체 조회 방법 - https://limkydev.tistory.com/159