Notice
Recent Posts
Recent Comments
Link
«   2025/04   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30
Tags
more
Archives
Today
Total
관리 메뉴

blog

[ORACLE] NVL vs IS NULL 본문

Web/SQL

[ORACLE] NVL vs IS NULL

hjkongkong 2022. 9. 22. 05:26

결론부터 말하자면 "둘 다 해보고 더 빠른 것을 선택"해야한다.

 

MEMBER 테이블에 존재하지 않는 파라미터(List)의 AUTH_CD 수를 반환하려한다. → OUTER JOIN 후 null count

1번 쿼리 - nvl2를 이용

2번쿼리 - WHERE절에서 IS NULL을 이용

# Mybatis, size 40인 list로 foreach문을 돈다.

1번

<select id="CodeCHK" parameterType="java.util.List" resultType="int">
	SELECT 
  	COUNT(
    	NVL2(B.AUTH_CD, NULL, 'CHK')
  	) AS AUTH_CD
	from 
  	(
    	< foreach collection = "list" item = "item" open = "" separator = "union" close = "" > 
    		SELECT 
      		#{item.AUTH_CD} AS AUTH_CD
    		FROM DUAL
        </ foreach >
 	 ) A 
  LEFT OUTER JOIN MEMBER B ON A.AUTH_CD = B.AUTH_CD
</select>

2번

<select id="CodeChk" parameterType="java.util.List" resultType="int">
	SELECT COUNT(A.AUTH_CD) AS AUTH_CD from (
	<foreach collection="list" item="item" open="" separator="union" close="">
		SELECT 
			#{item.AUTH_CD} AS AUTH_CD
			FROM DUAL
	</foreach>
	) A
	LEFT OUTER JOIN MEMBER B ON A.AUTH_CD = B.AUTH_CD
	WHERE A.AUTH_CD IS NULL
</select>

 

위에서부터 1번, 2번 쿼리

실행 계획을 보면

차이가 난다.

https://dba.stackexchange.com/questions/147421/nvl-v-s-check-is-null

 

NVL v/s Check IS NULL

We have queries in procedures in oracle like, SELECT ...... WHERE ..... AND (SomeColumn IS NULL OR SomeColumn = SomeThing) But our DBA is saying this is not good, and saying use NVL

dba.stackexchange.com

Try both and see which one works best for your specific query.

이게 가장 맞는 말인 것 같다ㅎㅎ

'Web > SQL' 카테고리의 다른 글

[MYSQL] DATE_FORMAT  (4) 2024.09.18
[MySQL] SUBSTRING  (0) 2024.09.18
[MySQL] REPLACE 데이터 치환  (0) 2022.10.19
[MySQL] DB에 Column 데이터 추가하기  (0) 2022.09.14
SQLD 시험 응시 방법 및 후기  (0) 2022.09.14