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 |
댓글