RDBMS VERSION
RDBMS | VERSION | VERSION CHECK SQL |
TIBERO | 7 FS02 (Compiled at Jun 20 2022 11:29:40 build seq 202489 init rev {2022-03-10}) | SELECT * FROM VT_VERSION; |
ORACLE | Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production | SELECT * FROM V$VERSION; |
MySQL | 8.0.29 | SELECT VERSION(); |
MariaDB | 10.8.3-MariaDB-1:10.8.3+maria~jammy | SELECT VERSION(); |
MS SQL Server | Microsoft SQL Server 2022 (CTP2.0) - 16.0.600.9 (X64) | SELECT @@VERSION; |
IBM Db2 | DB2 v11.5.7.0 | SELECT * FROM SYSIBMADM.ENV_INST_INFO; |
PostgreSQL | PostgreSQL 14.3 (Debian 14.3-1.pgdg110+1) on x86_64-pc-linux-gnu, compiled by gcc (Debian 10.2.1-6) 10.2.1 20210110, 64-bit | SELECT VERSION(); |
CUBRID | 11.2.0.0658 | SELECT VERSION(); |
NULL
ā¢
NULLģ ģ¶ģģ ģø ģ미
ā¦
미ģ§ģ ź°
ā¦
ģ ģ ģė ź°
ā¦
ģ ķ“ģ§ģ§ ģģ ź°
ā¢
NULL ā ģ¤ķģ
ė§ģ»¤
NULL ģ ģ„
RDBMS | ORACLE | TIBERO | MySQL | MariaDB | MS SQL Server | PostgreSQL | IBM Db2 | SQLite | CUBRID |
NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL |
'NULL' | string | string | string | string | string | string | string | string | string |
' ' | string | string | string | string | string | string | string | string | string |
'' | NULL | NULL | string | string | string | string | string | string | string |
ā¢
'' ā empty ź°ģ NULL ėė stringģ¼ė” RDBMS ė§ė¤ ė¤ė„ø ź²½ģ°ź° ģģ
ģ“źø°ģ¢
RDBMSź°ģ ė°ģ“ķ° ė§ģ“ź·øė ģ“ģ
ģģ
ģķ ģ 주ģ
ORACLE (NULL) ā PostgreSQL(NULL) : 문ģ ģģ
PostgreSQL('') ā ORACLE(NULL) : '' ź°ģ“ NULLė” ģ¹ķ ėģ“ ź²°ź³¼ź° ė¬ė¼ģ§ė ė¬øģ ź° ė°ģķ ģ ģģ // '' ź°ģ ģ
ė „ ģ ORACLE NOT NULL ģ ģ½ ģ”°ź±“ģ ģķ“ ģ
ė „ ģ¤ķØ ķ ģ ģģ (ģ¬ģ ķģ ķģ)
NULL ģ ģ„ SQL
NULL ķ¬źø°
ā¢
ģ ķ“ģ§ģ§ ģģ ź°ģ“ė¼ź³ ķģ§ė§ ė°ģ“ķ° ė² ģ“ģ¤ģ ģ ķ“ģ§ģ§ ģģ ź°ģ“ė¼ź³ ė§ķ¹ ģ ėė ķ“주ģ“ģ¼ķźø° ė문ģ ė¶ėŖ
NULLė ģ ķ“ģ§ ķ¬źø°ź° ģģ
TIBERO
ORACLE
TIBERO | ORACLE
MySQL / MariaDB
PostgreSQL
MS SQL Server
CUBRID
IBM Db2
RDBMSė³ NULLģ“ HEAPģ ģ ģ„ėė ģ¤ģ ķ¬źø°
RDBMS | ORACLE | TIBERO | MySQL | MariaDB | MS SQL Server | PostgreSQL | IBM Db2 | CUBRID |
NULL ķ¬źø° (byte) | 0 | 0 ėė 1 | 0 | 0 | 0 | 0 | - | 0 ėė ģ ģøė ė°ģ“ķ° ķģ
ģ ė°ė¦ |
NULL ģ²ė¦¬ ė°©ģ
SELECT NULL
SELECT ģ NULL ģ°ģ°
RDBMS | ORACLE | TIBERO | MySQL | MariaDB | MS SQL Server | PostgreSQL | IBM Db2 | SQLite | CUBRID |
NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL |
1 + NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL |
1 - NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL |
1 * NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL |
1 / NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL |
SELECT ģ NULL ė¬øģ ź²°ķ©
RDBMS | ORACLE | TIBERO | MySQL | MariaDB | MS SQL Server | PostgreSQL | IBM Db2 | SQLite | CUBRID |
'A'||NULL||'Cā | AC | AC | NULL (ģ°ģ°) | NULL (ģ°ģ°) | - | NULL | NULL | NULL | NULL |
'A'+NULL+'Cā | - | NULL (ģ°ģ°) | NULL (ģ°ģ°) | NULL (ģ°ģ°) | NULL | - | - | NULL (ģ°ģ°) | NULL |
CONCAT('A',NULL,'C') | - | - | NULL | NULL | AC | AC | - | - | NULL |
CONCAT('A',NULL) | A | A | NULL | NULL | A | A | NULL | - | NULL |
ā¢
NULL (ģ°ģ°) : ė¬øģ ź²°ķ©ģ“ ģė 문ģ ģ°ģ°
ā¢
- : 미ģ§ģ
SELECT ģ NULL ė ģ§ģź° ģ°ģ°
RDBMS | ORACLE | TIBERO | MySQL | MariaDB | MS SQL Server | PostgreSQL | IBM Db2 | SQLite | CUBRID |
ė ģ§ģź°ķØģ + NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL |
SELECT ģ NULL ė¶ģø ė¹źµ
RDBMS | ORACLE | TIBERO | MySQL | MariaDB | MS SQL Server | PostgreSQL | IBM Db2 | SQLite | CUBRID |
NULL or TRUE | - | - | TRUE (1) | TRUE (1) | - | TRUE | TRUE | TRUE (1) | - |
NULL or FALSE | - | - | NULL | NULL | - | NULL | NULL | NULL | - |
ā¢
TRUE : TRUE ė°ķ
ā¢
TRUE (1) : 1 ė°ķ
ā¢
- : 미ģ§ģ
SELECT ģ NULLģ²ė¦¬ SQL
ģ§ź³ ķØģ
ā¢
ķ
ģ¤ķø 결과넼 ķµķ“ NULLź³¼ģ ģ°ģ°/ ė¹źµė NULLģ²ė¦¬ź° ėź±°ė NULLģ 묓ģķ“ė²ė¦½ėė¤.
ā¢
ģ§ź³ ź“ė Ø ķØģģģė NULLģ“ ķ¬ķØė ė”ģ°ė” ģøķ ģ“ė¤ ģķ„ģ“ ģģź¹ģ
ķ
ģ¤ķø ķ
ģ“ėø
x | xx |
1 | NULL |
2 | NULL |
3 | NULL |
4 | 40 |
5 | 50 |
RDBMS | ORACLE | TIBERO | MySQL | MariaDB | MS SQL Server | PostgreSQL | IBM Db2 | SQLite | CUBRID |
COUNT(*) | 5 | 5 | 5 | 5 | 5 | 5 | 5 | 5 | 5 |
COUNT(x) | 5 | 5 | 5 | 5 | 5 | 5 | 5 | 5 | 5 |
COUNT(xx) | 2 | 2 | 2 | 2 | 2 | 2 | 2 | 2 | 2 |
SUM(x) | 15 | 15 | 15 | 15 | 15 | 15 | 15 | 15 | 15 |
SUM(xx) | 90 | 90 | 90 | 90 | 90 | 90 | 90 | 90 | 90 |
SUM(x+xx) | 99 | 99 | 99 | 99 | 99 | 99 | 99 | 99 | 99 |
AVG(x) | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 |
AVG(xx) | 45 | 45 | 45 | 45 | 45 | 45 | 45 | 45 | 45 |
AVG(x+xx) | 49.5 | 49.5 | 49.5 | 49.5 | 49 | 49.5 | 49 | 49.5 | 49.5 |
ā¢
ģ§ź³ ķØģģģė NULL ė”ģ°ė ķ¬ķØķģ§ ģź³ ģ§ź³ź° ģķ ė©ėė¤.
ā¦
COUNT(xx), SUM(xx), AVG(xx)
ā¢
ģ§ź³ ķØģģģ ėź° ģ“ģģ COLUMNģ ź°ģ“ķ ź²½ģ° NULL ė”ģ°ģ ķ“ė¹ķė ź°ģ ģ ė¶ ė¬“ģ ė©ėė¤.
ā¦
x ģ»¬ė¼ź³¼ xx컬ė¼ģ NULL ź°ģ ź³ ė ¤ķģ§ ģź³ ģ§ź³ ķØģź° ģ¬ģ© ė ź²½ģ° ģėķ ź²°ź³¼ź° ėģ¶ ėģ§ ģģ ģ ģģµėė¤.
ā¦
SUM(x+xx), AVG(x+xx)
ā¢
ė¹źµ ėģ RDBMS ėŖØė ėģ¼ ķ©ėė¤. ė¤ė§, ģģģ ģ²ė¦¬ģģ ģ°Øģ“ź° ģģµėė¤.
ā¦
ģģģ ģ리넼 ė²ė¦¬ė ź²½ģ°ź° ģģ.
āŖ
MS SQL, IBM Db2 : ģ ģ넼 ģ°ģ°ķģ ė ģģģ ģ“ ėģ¤ė©“ ė²ė¦¬ė ķ¹ģ±
주ģ ģ¬ķ
ā¢
ė°ģ“ķ°ė² ģ“ģ¤ģ ģ§ģķģ§ ģė ķØģź° ģė ź²½ģ° PROCEDURE넼 ģģ±ķģ¬ ģ¬ģ© ķ ė 주ģ
ģøė¶ ķØģ/ķė”ģģ ģģ± ģ 주ģ SQL
ģ§ź³ ķØģ NULLģ²ė¦¬ SQL
NULL ģ ė ¬
ģ«ģķ
x | xx |
1 | NULL |
2 | NULL |
3 | NULL |
4 | 40 |
5 | 50 |
6 | NULL |
문ģķ
x | xx |
1 | NULL |
2 | NULL |
3 | NULL |
4 | A |
5 | Z |
6 | NULL |
ė ģ§ķ
x | xx |
1 | NULL |
2 | NULL |
3 | NULL |
4 | 2022-01-01 00:00:00.000 |
5 | 2022-12-31 00:00:00.000 |
6 | NULL |
RDBMS | ORACLE | TIBERO | MySQL | MariaDB | MS SQL Server | PostgreSQL | IBM Db2 | SQLite | CUBRID |
NUMBER ORDER BY xx ASC; | ź°ģ„ ķ° ź° | ź°ģ„ ķ° ź° | ź°ģ„ ģģ ź° | ź°ģ„ ģģ ź° | ź°ģ„ ģģ ź° | ź°ģ„ ķ° ź° | ź°ģ„ ķ° ź° | ź°ģ„ ģģ ź° | ź°ģ„ ģģ ź° |
STRING ORDER BY xx ASC; | ź°ģ„ ķ° ź° | ź°ģ„ ķ° ź° | ź°ģ„ ģģ ź° | ź°ģ„ ģģ ź° | ź°ģ„ ģģ ź° | ź°ģ„ ķ° ź° | ź°ģ„ ķ° ź° | ź°ģ„ ģģ ź° | ź°ģ„ ģģ ź° |
DATETIME ORDER BY xx ASC; | ź°ģ„ ķ° ź° | ź°ģ„ ķ° ź° | ź°ģ„ ģģ ź° | ź°ģ„ ģģ ź° | ź°ģ„ ģģ ź° | ź°ģ„ ķ° ź° | ź°ģ„ ķ° ź° | ź°ģ„ ģģ ź° | ź°ģ„ ģģ ź° |
ź°ģ„ ģģ ź°
ź°ģ„ ķ° ź°
ā¢
ORDER BY 넼 ģķķģ¬ ģ ė ¬ģ ģķķė©“ ė¶ėŖ
NULLģ ķ¬ź³ ģģģ ķģø ķ ģ ģģµėė¤.
ā¢
MIN/MAX ģ§ź³ ķØģ ź²°ź³¼ģģė NULLģ ź°ģ¼ė” ģ²ė¦¬ķģ§ ģģ
RDBMS | ORACLE, TIBERO, MySQL, MariaDB, MS SQL Server, PostgreSQL, IBM Db2, SQLite, CUBRID |
NUMBER MIN(x),MIN(xx) | 1 40 |
NUMBER MAX(x),MAX(xx) | 6 50 |
STRING MIN(x),MIN(xx) | 1 A |
STRING MAX(x),MAX(xx) | 6 Z |
DATETIME MIN(x),MIN(xx) | 1 2022-01-01-00.00.00.000000 |
DATETIME MAX(x),MAX(xx) | 6 2022-12-31-00.00.00.000000 |
NULL SORT SQL
NULL INDEX
INDEXģ NULL
1ė² SQL : SELECT * FROM tbl WHERE xx IS NOT NULL;
2ė² SQL : SELECT * FROM tbl WHERE xx IS NULL;
CREATE INDEX idx_tbl_x ON tbl(xx);
SQL
ė³µģ¬
ā¢
INDEXģ NULL ķ¬ķØ
ā¦
1ė² SQL : NULLģ“ ģė ź²ė§ INDEX FFS SCAN ģķ
ā¦
2ė² SQL : NULLģø ź²ģ 찾기 ģķ“ INDEX RANGE SCAN ģķ
ā¢
INDEXģ NULL 미ķ¬ķØ
ā¦
1ė² SQL : NULLģ“ ģė ź²ė§ INDEX FFS SCAN ģķ
ā¦
2ė² SQL : NULLģø ź²ģ 찾기 ģķ“ TABLE ACCESS (FULL) ģķ
ė°ģ“ķ° ź±“ģ(NOT NULL: 60,000 / NULL: 4,000)
TOTAL_CNT | NOTNULL_CNT | NULL_CNT |
64,000 | 60,000 | 4,000 |
ė°ģ“ķ° ė¶ķ¬ė
X | XX | COUNT(*) |
1 | NULL | 1,000 |
2 | 20 | 10,000 |
3 | NULL | 1,000 |
4 | 40 | 10,000 |
5 | NULL | 1,000 |
6 | 60 | 10,000 |
7 | 70 | 10,000 |
8 | NULL | 1,000 |
9 | 90 | 10,000 |
10 | 100 | 10,000 |
TIBERO
ORACLE
MySQL / MariaDB
PostgreSQL
MS SQL Server
IBM Db2
CUBRID
RDBMSė³ INDEXģ NULL ķ¬ķØ ģ¬ė¶ ķģø
RDBMS | ORACLE | TIBERO | MySQL | MariaDB | MS SQL Server | PostgreSQL | IBM Db2 | CUBRID |
INDEX NULL ķ¬ķØ ģ¬ė¶ (ėØģ¼) | X (ėØģ¼) | X (ėØģ¼) | O (ėØģ¼,ė³µķ©) | O (ėØģ¼,ė³µķ©) | O (ėØģ¼,ė³µķ©) | O (ėØģ¼,ė³µķ©) | O (ėØģ¼,ė³µķ©) | X (ėØģ¼) |
RDBMS | ORACLE | TIBERO | CUBRID |
ėØģ¼ ģ»¬ė¼ | X | X | X |
ė³µķ© ģ»¬ė¼
ķ¹ģ 컬ė¼ģ NOT NULLģ¼ ź²½ģ° | O | O | X |
ė³µķ©ķ¤ NULL ģøė±ģ¤ źµ¬ģ± ź²ģ¦ SQL
ā¢
IS NULL
ā¦
INDEXģ NULL ķ¬ķØ RDBMS
āŖ
INDEX ģ¤ģŗģ ķµķ“ NULLģ ź²°ź³¼ ķģø
ā¦
INDEXģ NULL 미ķ¬ķØ RDBMS
āŖ
ķØģ źø°ė° ģøė±ģ¤ ķģ© : NVL(xx, āunkownā) ķķė” ė§ė¤ģ“ģ ķģ©
āŖ
ORACLE, TIBEROģ ź²½ģ° ė³µķ© ģøė±ģ¤ 컬ė¼ģ ķ¬ķØ ė 컬ė¼ģ“ 1ź° ģ“ģ NOT NULL ģ ģ½ ģ”°ź±“ģ ķ“ė¹ķė©“ ė¤ė„ø 컬ė¼ģ NULLģ ķ¬ķØķė¤.
ā¢
([notnull column], xx)
āŖ
ORACLE, TIBEROģ ź²½ģ° ė³µķ© ģøė±ģ¤ źµ¬ģ± ģ NOT NULL ģ ģ½ ģ”°ź±“ 컬ė¼ģ“ ģģ ź²½ģ° NULLģ ģøė±ģ¤ģ ķ¬ķØķź³ ģ¶ģ ź²½ģ°
ā¢
(xx,ā1ā)
ā¢
IS NOT NULL
ā¦
INDEXģ NULL ķ¬ķØ RDBMS
āŖ
INDEX ģ¤ģŗģ ķµķ“ NULLģ“ ģė ź²°ź³¼ ķģø
ā¦
INDEXģ NULL 미ķ¬ķØ RDBMS
āŖ
ķ“ė¹ ģ»¬ė¼ģ MIN ź°ģ 구ķ“ģ ķģ©
ā¢
공백ģ stringģ¼ė” ģ²ė¦¬ķė RDBMSģ ź²½ģ°
ā¦
ģ ģ ėė 문ģ: WHERE xx >=āā; ķģ©
ā¦
ģģ : WHERE xx > (select MIN(xx)-99 from tbl9_null limit1);
ā¢
ORACLE, TIBEROė INDEX FFS ģėģ¼ė” ėģ
āŖ
ORACLE, TIBEROģ ź²½ģ° ė³µķ© ģøė±ģ¤ 컬ė¼ģ ķ¬ķØ ė 컬ė¼ģ“ 1ź° ģ“ģ NOT NULL ģ ģ½ ģ”°ź±“ģ ķ“ė¹ķė©“ ė¤ė„ø 컬ė¼ģ NULLģ ķ¬ķØķė¤.
ā¢
([notnull column], xx)
āŖ
ORACLE, TIBEROģ ź²½ģ° ė³µķ© ģøė±ģ¤ źµ¬ģ± ģ NOT NULL ģ ģ½ ģ”°ź±“ 컬ė¼ģ“ ģģ ź²½ģ° NULLģ ģøė±ģ¤ģ ķ¬ķØķź³ ģ¶ģ ź²½ģ°
ā¢
(xx,ā1ā)
ģ 리
NULL ģ ģ„
ā¢
'' (empty) ź°ģ“ RDBMS(ģ“ķ: DB) ė§ė¤ NULL ėė 문ģģ“ ģ·Øźøģ“ ė¤ė„“ė¤.
ā¢
문ģģ“ ģ·Øźø DBģģ NULL ģ²ė¦¬ DBė” ģ“ź“ ģ 주ģ ķģ (ź²°ź³¼ ź°ģ“ ė¬ė¼ģ§ ģ ģģ¼ė©“ ģ ģ½ ģ”°ź±“ ģė°ģ“ ėģ“ ģ“ź“ ģ첓 걓ģģģ ė°°ģ ė ģ ģė¤.)
NULL ķ¬źø°
ā¢
DBė§ė¤ NULL ķ¬źø° 3ź° ķØķ“ģ“ ģė¤.
ā¦
NULL 묓씰걓 0 byte
ā¦
TIBEROģ ź²½ģ° ģ°ģ ė NuLLģ ėķ ķ¬źø° ė¶ģ¬
col1 | col2 | col3 | BYTE |
NULL | NULL | NULL | 1 + 0 + 0 |
col1 | col2 | col3 | BYTE |
NULL | NULL | 1 | 1 + 1 + type |
col1 | col2 | col3 | BYTE |
NULL | 1 | NULL | 1 + type + |
TIBEROģ ź²½ģ° NULL ķģ© ģ»¬ė¼ģ ģµėķ ė¤ė” ė¹¼ėź² TABLE ķ¬źø°ģģ ķØģØģ ģ“ė¤.
ā¦
CUBRIDģ ź²½ģ° ė°ģ“ķ° ķģ
ģ ķ¬źø°ė„¼ 미리 ķ ė¹
INT ā 4 byte / datetime ā 8 byte / VARCHAR, CLOB ā 0 byte
NULL ģ°ģ°/ė“ė¶ ķØģ/ģøė¶ ķØģ,ķė”ģģ
ā¢
NULL ģ°ģ°
ā¦
NULL ź³¼ ģ°ģ°ėė ėŖØė ź°ģ NULLė” ģ²ė¦¬ ėė¤.
ā¢
ė“ė¶ ķØģ
ā¦
ė³ķ/ģ§ź³ ķØģ ģķģ ģ°ģ°ģ“ ė¤ģ“ź°ė ķØģė NULLģ ė°°ģ ķź³ ģ°ģ°ķė¤.
ā¦
문ģģ“ ģ ķ© ķØģģ ź²½ģ° NULLģ“ ė¤ģ“ź° ź²½ģ° NULLģ²ė¦¬ ķź±°ė NULLģ ģ ź±°ķź³ ģ ķ© ķė¤.
ā¢
ģøė¶ ķØģ, ķė”ģģ
ā¦
ķØģ,ķė”ģģ ģģ± ģ NULLģ ź³ ė ¤ķģ§ ģģ¼ė©“ ģėģ¹ ģź² ź²°ź³¼ź° NULLė” ģ¶ė „ ė ģ ģė¤.
NULL ģ ė ¬
ā¢
DB ė§ė¤ NULLģ ģ ė ¬ ķė ź°ģ ź°ģ„ ķ° ź°ģ¼ė” ģ¬źø°ź±°ė ź°ģ„ ģģ ź°ģ¼ė” ģ¬ź²Øģ ģ ė ¬ķė¤.
ā¦
ģ¤ź° ź°ģ ģė¤
ā¦
NULLģ ģ ź±°ķģ§ ģź³ ģ ė ¬ķģ¬ ź°ģ ģ»ģ¼ė ¤ź³ ķ ź²½ģ° ģėģ¹ ģģ NULLģ“ ģ¶ė „ ė ģ ģė¤.
ā¦
ėģ ė° MIN/MAX ķØģģģė NULLģ ė°°ģ ķź³ ģ²ė¦¬ķė¤.
NULL ģøė±ģ¤
ā¢
DBė§ė¤ INDEXģ NULLģ ķ¬ķØķė ź²½ģ°ź° ģź³ ķģ§ ģė ź²½ģ°ź° ģė¤.
ā¦
ģ±źø/ė³µķ© ģøė±ģ¤ źµ¬ģ± ģ NULLģ ėŖØė ķ¬ķØź±°ė ź²½ģ°ģ ė°ė¼ ķ¬ķØķė¤.
āŖ
ė³µķ© ģøė±ģ¤ źµ¬ģ± ģ ķ¹ģ 컬ė¼ģ“ NOT NULLģø ź²½ģ° ė¤ė„ø 컬ė¼ģ NULLģ ķ¬ķØķė¤.
ā¦
ģ±źø/ė³µķ© ģøė±ģ¤ ėŖØė NULLģ ķ¬ķØ ķģ§ ģėė¤.
āŖ
ķØģ ģøė±ģ¤ė„¼ ķģ©ķģ¬, ģøė±ģ± ģ²ė¦¬ė„¼ ķ ģ ģė¤.








