본문 바로가기
Dev/MySQL

[Oracle / MySQL] NULL 개념, 처리

by 흰바다제비 2022. 6. 11.
728x90

ORACLE / MYSQL NULL 개념, 처리방법

--

  • MySQL 에서 NULL
CREATE TABLE test_db.t1 (ID INT,C1 VARCHAR(10));

INSERT INTO test_db.t1 VALUES (1,1);
INSERT INTO test_db.t1 VALUES (2,'2');
INSERT INTO test_db.t1 VALUES (3,NULL);
INSERT INTO test_db.t1 VALUES (4,'4');
INSERT INTO test_db.t1 VALUES (5,'');
INSERT INTO test_db.t1 VALUES (6,6);
INSERT INTO test_db.t1 VALUES (7,' ');
INSERT INTO test_db.t1 VALUES (8,'8');
INSERT INTO test_db.t1 VALUES (9,0);
INSERT INTO test_db.t1 VALUES (0,'0');

SELECT *
FROM test_db.t1
WHERE C1 IS NULL;
--> ID = 3 인 컬럼이 NULL

--

  • ORACLE 에서 NULL
CREATE TABLE KB0156.T2 (
ID NUMBER,
C1 VARCHAR(10)
);

INSERT INTO KB0156.T2 VALUES (1,1);
INSERT INTO KB0156.T2 VALUES (2,'2');
INSERT INTO KB0156.T2 VALUES (3,NULL);
INSERT INTO KB0156.T2 VALUES (4,'4');
INSERT INTO KB0156.T2 VALUES (5,'');
INSERT INTO KB0156.T2 VALUES (6,6);
INSERT INTO KB0156.T2 VALUES (7,' ');
INSERT INTO KB0156.T2 VALUES (8,'8');
INSERT INTO KB0156.T2 VALUES (9,0);
INSERT INTO KB0156.T2 VALUES (0,'0');

SELECT *
FROM KB0156.T2
WHERE C1 IS NULL;
--> ID = 3,5 인 컬럼이 NULL --> '' 공백 문자열도 NULL로 취급한다.

Oracle은 '' 공백 문자열도 NULL로 취급한다.

--

  • 정렬 순서
    mysql -> 오름차순 정렬하면 null이 먼저 나온다
    ORACLE -> 오름차순 정렬하면 null이 가장 마지막

-- MySQL

SELECT *
FROM test_db.t1
ORDER BY C1 ASC;
ID	C1
3	(NULL) --> NULL
5	
7	
9	0
0	0
1	1
2	2
4	4
6	6
8	8

-- ORACLE

SELECT *
FROM KB0156.T2
WHERE ID <> 7
ORDER BY C1 ASC;
ID	C1
9	0
0	0
1	1
2	2
4	4
6	6
8	8
3	  --> NULL
5     --> NULL

--

  • ORACLE NULL 정렬 : NULLS LAST, NULLS FIRST
    EX) ORDER BY COLUMN DESC NULLS FIRST
SELECT *
FROM KB0156.T2
ORDER BY C1;
ID	C1
7	
9	0
0	0
1	1
2	2
4	4
6	6
8	8
3	  --> NULL
5     --> NULL
SELECT *
FROM KB0156.T2
ORDER BY C1 NULLS FIRST;
ID	C1
5	  --> NULL
3	  --> NULL
7	
9	0
0	0
1	1
2	2
4	4
6	6
8	8

--

  • NULL 처리
    • IFNULL(MYSQL),
    • NVL , NVL2 (ORACLE)
    • COALESCE (공용) : 가장 앞에 있는 EXPR 값이 NULL이 아닌 것을 반환

-- MySQL

  • IFNULL

IFNULL(EXPR1,EXPR2) : EXPR1이 NULL이 아니면 EXPR1을, NULL이면 EXPR2를 출력한다.

SELECT ID, IFNULL(C1,'NULL') AS NVL
FROM test_db.t1;
ID	NVL
1	1
2	2
3	NULL
4	4
5	
6	6
7	
8	8
9	0
0	0

-- ORACLE

  • NVL

NVL(EXPR1,EXPR2) : EXPR1이 NULL이 아니면 EXPR1을, NULL이면 EXPR2를 출력한다.

SELECT ID, NVL(C1,'NULL') AS NVL
FROM KB0156.T2;
ID	NVL
1	1
2	2
3	NULL
4	4
5	NULL
6	6
7	
8	8
9	0
0	0
  • NVL2

NVL2(EXPR1,EXPR2,EXPR3) : EXPR1이 NULL이 아니면 EXPR2를, NULL이면 EXPR3을 출력한다.

SELECT ID, NVL2(C1,'NOT NULL','NULL') AS NVL2
FROM KB0156.T2;
ID	NVL2
1	NOT NULL
2	NOT NULL
3	NULL
4	NOT NULL
5	NULL
6	NOT NULL
7	NOT NULL
8	NOT NULL
9	NOT NULL
0	NOT NULL
728x90

'Dev > MySQL' 카테고리의 다른 글

4. XtraBackup 상황별 스크립트  (0) 2022.07.03
3. XtraBackup Master-Slave 원격 백업  (0) 2022.07.02
2. XtraBackup 백업과 복구, 그리고 옵션  (0) 2022.06.29
1. XtraBackup 개요와 설치  (0) 2022.06.26
[MySQL] OR -> UNION  (0) 2022.06.21

댓글