PostgreSQL과 Oracle의 NULL 차이
- PostgreSQL
- Null은 값 자체가 없는 것 <> ''은 길이가 0인 문자열
- Oracle
- Null = ''(Empty String)
이로인해 PostgreSQL에서는 문자열과 null 연산 시 차이가 발생한다
PostgreSQL
Oracle
예시
--PostgreSQL
select concat('1', null); --> 1
select '1'||null; --> [NULL] -- null로 뭉개짐!
--Oracle
select concat('1', null) from dual; --> 1
select '1'||null from dual; --> 1
하지만 PostgreSQL에서는 대상 레코드가 많을수록 'concat()'은 ‘||’보다 느리다.
/*PostgreSQL*/
--CASE 1. ||
select * from tb
where col1 = 'id'||'0001'
--CASE 2. CONCAT()
select * from tb
and col1 = concat('id', '0001')
* CASE 1. str||str: 상수처럼 처리 빠름
* CASE 2. concat(str, str): 스칼라 쿼리 처럼 건수에 비례하는 처리 속도
--예시
and col2 = COALESCE(null, '123')||'456';