[SQL] 채번 쿼리 작성 & COALESCE 사용 주의할 점

2025. 5. 24. 15:49DB

728x90

 

만약, 특정 테이블 기준으로 max+1을 수행하는 SQL을 작성하고자 한다.
다만, 최초 생성 테이블의 경우는 row데이터가 미존재하므로 null을 고려한 쿼리를 작성하고자 한다.
row데이터가 미존재시 1을 반환하고 , 존재한다면 그 값을 기준으로 +1을 출력하고자 한다고 가정하였을 때
실수할만한 예시 SQL과 잘 작성된 SQL 예시를 기록해 두고자 한다.

 

[실수예시]

select max(COALESCE(no,0)) + 1
from student;

// row데이터 미존재시 출력결과 : null
// row데이터 존재시 출력결과 : 1

row데이터 미존재시 출력결과 null인 이유 :

1) COALESCE(no,0) 은 row데이터존재&& 'no'컬럼이 null일 경우 0으로 치환 하지만, 위의 경우 row데이터가 아예 존재하지 않으므로, null이 아닌 결과값자체가 없음

2) max( ) 집계함수는 괄호 안의 값이 아예 없으므로 (row데이터미존재시) null을 리턴

* 집계함수는 무조건 row데이터를 리턴하기에 출력값이 없는 게 아닌 null을 리턴 하는 구조

 

[올바른예시]

SELECT COALESCE(MAX(no) + 1, 1)
FROM student;

//출력결과 : 1

row데이터 미존재여도 출력결과 1인 이유 :

1)max(no)+1 집계함수는 row데이터가 미존재하여도 무조건 row데이터를 리턴 null반환

2) COALESCE(null,1) 은 데이터가 null이므로 1을 리턴

* 당연히 row데이터 존재시에는 max(no)+1 이 null이 아닌 데이터를 리턴하게 되므로 COALESCE 무시 되므로 예상하는 출력값 반환 가능

728x90