-
SQLD) NULL 과 공집합SQLD/SQL 기본과 활용 2020. 8. 19. 17:32
# NULL 의 특성
- NULL 은 아직 정의 되지 않은 값. 0은 숫자이며, 공백은 문자.
- 테이블 생성시 NOT NULL 또는 PRIMARY KEY로 정의되지 않은 모든 데이터 유형은 NULL 값을 가질 수 있다.
- NULL값을 포함 하는 연산의 경우 결과 값도 NULL.
- NULL값을 비교연산(=, !=)시 FALSE 리턴. (NULL값의 비교연산은 IS NULL 이나 IS NOT NULL 로 가능)
- NULL은 집계함수에서 연산에 사용되지않는다. (자원 사용 효율에 좋음, Skip한다고 생각하면됨)
# NVL(exp1, exp2) / ISNULL(exp1, exp2) * Oracle * SQL Server
- exp1의 결과값이 NULL이면 exp2를 출력 (exp1과 exp2의 데이터 타입이 같아야 함)
# Oracle SQL> SELECT NVL(NULL, 'NVL-OK') AS NVL_TEST1, NVL('Is it NULL?' , 'NVL-OK') AS NVL_TEST2 FROM DUAL; # SQL Server SQL Server> SELECT ISNULL(NULL, 'NVL-OK') AS NVL_TEST1, ISNULL('Is it NULL?' , 'NVL-OK') AS NVL_TEST2 FROM DUAL; # 실행결과 (같음) NVL_TEST1 NVL_TEST2 -------- -------- NVL-OK Is it NULL?
# NULLIF(exp1, exp2) * 공용
- exp1이 exp2와 같으면 NULL, 다르면 exp1 리턴
# Oracle & SQL Server SQL> SELECT ENAME, MGR, NULLIF (MGR, "Boss") AS NIF FROM EMP; # 실행결과 (같음) ENAME MGR NIF ------ ----- -------- Edward Boss Boss Captain Rose Rose Rose Edward Edward Damien Rose Rose Rice Damien Damien
# COALESCE(exp1,exp2, ...) * 공용
- NULL이 아닌 최초의 표현식을 리턴
- 모든 표현식이 NULL이라면 NULL 리턴
# 현 테이블 상황 ENAME MGR SAL ------ ---- ----------- Edward Boss 3000 Boss 8000 Captain Rose 4000 Rose Edward 2000 Damien Rose 2500 Rice Damien 2000 # Oracle & SQL Server SQL> SELECT ENAME, MGR, COALESCE (NULL, MGR, SAL, ENAME) AS COAL FROM EMP; # 실행결과 (같음) ENAME MGR SAL COAL ------ ---- ----- ---- Edward Boss 3000 Boss Boss 8000 8000 Captain Rose 4000 Rose Rose Edward 2000 Edward Damien Rose 2500 Rose Rice Damien 2000 Damien
# 공집합
- 조건에 맞는 데이터가 한 건도 없는 경우. NULL 과 다름
- 집계함수로 처리해야함
### [예제 1] SELECT MGR FROM EMP WHERE ENAME = 'Sun'; # 실행결과 (EMP테이블의 ENAME중 Sun이 없는 경우) 선택된 레코드가 없습니다. # 실행결과 (EMP테이블의 ENAME중 Sun이 있으나, MGR값이 NULL인 경우) MGR --- 1개 행이 선택되었습니다. ### [예제 2] SELECT NVL (MGR, 0000) FROM EMP WHERE ENAME = 'Sun'; # 실행결과 (EMP테이블의 ENAME중 Sun이 없는 경우) 선택된 레코드가 없습니다. # 실행결과 (EMP테이블의 ENAME중 Sun이 있으나, MGR값이 NULL인 경우) MGR --- 0000 1개 행이 선택되었습니다. ### [예제 3] (MAX 함수는 여러인수중 하나라도 NULL이면 NULL을 반환) SELECT MAX (MGR) FROM EMP WHERE ENAME = 'Sun'; # 실행결과 (EMP테이블의 ENAME중 Sun이 없는 경우) MGR --- 1개 행이 선택되었습니다. # 실행결과 (EMP테이블의 ENAME중 Sun이 있으나, MGR값이 NULL인 경우) MGR --- 1개 행이 선택되었습니다.
728x90'SQLD > SQL 기본과 활용' 카테고리의 다른 글
SQL) 집계함수 (0) 2020.08.20 SQL의 LIKE, IN, BETWEEN 연산자 및 연산자 우선순위 (0) 2020.08.20 SQL(Oracle&SQL Server)의 CASE 표현 (0) 2020.08.19 Type Casting in Oracle & SQL Server (오라클과 SQL Server의 자료형 타입변환) (0) 2020.08.19 SELECT 문, 산술연산자, 합성연산자 (0) 2020.08.19