IT월급쟁이의 삶
[ORACLE DB] 존재하지않는 ROW값 구하기 본문
오라클DB에서 가끔 검색되지 않는 Row값을 구해야할때가 있다.
물론 NVL, NVL2라는 함수가 있지만, 이는 ROW의 검색값이 NULL일때만 동작한다.
NULL이 아니라 아예 조회되지 않을 경우에는 어떻게 표기해야 할까?
먼저 기존의 코드를 보면, NVL 함수로 TEST_COL의 값이 NULL이면 0으로 표기한다.
하지만 실행해보면 해당 ROW값이 아예 나오질 않을 것이다.
그 이유는 검색조건에 만족하는 TEST_COL 자체의 값이 없기 때문이다.
즉, NULL이라도 조회가 될려면 검색조건에 만족하는 TEST_COL값에 NULL이 입력되어 있어야 하지만
이는 아예 조회할 수 없는 ROW이기 때문에 아무것도 조회되지 않는다.
SELECT NVL(TEST_COL,0)
FROM TB_TEST
WHERE A = 'A'
AND B = 'B';
그럼 데이터베이스에서 조회를 하여 BACK-END 단에서 어떤 작업을 제어하기 위해서는 값이 필요하다면
이런 없는 ROW값을 조회하는 방법은 무엇일까?
아래와 같이 수정하면 값을 조회한다.
SELECT NVL(TEST_COL,0)
FROM TB_TEST RIGHT OUTER JOIN DUAL
ON A = 'A'
AND B = 'B';
위와 같이 DUAL 테이블에 JOIN을 이용해서 사용하면 조회되지 않는 ROW라도 값을 0으로 뱉는다.
DUAL테이블은 오라클에서 기본제공하는 테이블이다.
DUAL테이블이랑 조인을 하게되면 당연히 NULL값이 나올 수 밖에 없어 0을 뱉어낸다.
이렇게 DUAL테이블을 이용하여 여러가지 응용을 할 수가 있다.
물론 이 방법 말고도 다양한 방법이 있겠지만, 내가 생각했을 땐 가장 편하다.
DUAL테이블 참고
goddaehee.tistory.com/92
음... 근데 은근히 전 개발자가 짜논 쿼리에 NVL(X,0)이 많다.
물론 조회되지않는 ROW값에서.. 흠..
틱톡라이트 신규가입하고 출석체크 10일동안 연속으로 달성하면 3만포인트를 지급하고 있습니다! 은행출금도 가능하니 자투리 시간 활용해서 받아가세요!!!
https://lite.tiktok.com/t/ZS25p7Aar/
'월급쟁이 코딩 스케치북' 카테고리의 다른 글
[JSTL EL] JSTL EL 표현식 사용하기 (0) | 2024.09.11 |
---|---|
[Spring + Mybatis 에러] java.lang.Integer cannot be cast to java.util.Map (0) | 2024.09.11 |
[Mybatis 에러] For input string: "Y" 해결방법 (0) | 2021.04.22 |
데이터의 범위 정리 (0) | 2020.01.17 |