๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
  • ์žฅ์›์ต ๊ธฐ์ˆ ๋ธ”๋กœ๊ทธ
๐Ÿ“š ์‹œ๋ฆฌ์ฆˆ/- ์ดˆ๋ณด์ž๋„ ์ค€๋น„ํ•˜๋Š” SQL ์ฝ”๋”ฉ ํ…Œ์ŠคํŠธ

[์ดˆ๋ณด์ž๋„ ์ค€๋น„ํ•˜๋Š” SQL ์ฝ”๋”ฉ ํ…Œ์ŠคํŠธ] ์ค‘๋ณต๊ณผ NULL ๋‹ค๋ฃจ๊ธฐ

by Wonit 2021. 2. 25.

์นดํ…Œ๊ณ ๋ฆฌ ์ดˆ๋ณด์ž๋„ ์ค€๋น„ํ•˜๋Š” SQL ์ฝ”๋”ฉ ํ…Œ์ŠคํŠธ์— ๊ฐ€์‹œ๋ฉด ํ•ด๋‹น ์‹œ๋ฆฌ์ฆˆ๋ฅผ ํ™•์ธํ•˜์‹ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ชฉ์ฐจ

  • ์ค‘๋ณต ์ฒ˜๋ฆฌ
    • DISTINCK์™€ GROUP BY
  • NULL ์ฒ˜๋ฆฌ
    • IS NULL
    • IS NOT NULL

์ค‘๋ณต ์ฒ˜๋ฆฌ

์ค‘๋ณต์„ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•œ ๋ฐฉ๋ฒ•์—๋Š” ํฌ๊ฒŒ 2๊ฐ€์ง€๊ฐ€ ์žˆ๋‹ค.

 

  1. DISTINCT
  2. GROUP BY

๋ง›๊ฐ„์„ ์ด์šฉํ•œ TMI

์ค‘๋ณต์„ ์ฒ˜๋ฆฌํ•  ๋•Œ๋Š” ๊ต์žฌ์—์„œ ๋ณดํ†ต DISTINCT๋ฅผ ์‚ฌ์šฉํ•˜๋ผ๊ณ  ํ•œ๋‹ค.


DISTINCT ์ž์ฒด๊ฐ€ ์›๋ž˜ ์ค‘๋ณต์„ ์ œ๊ฑฐํ•˜๊ธฐ ์œ„ํ•ด์„œ ๋‚˜์˜จ ๊ฒƒ์ด๊ธฐ๋„ ํ•˜๊ณ  ๊ตฌํ˜„ํ•˜๊ธฐ ๊ฐ„๋‹จํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋งŽ์ด ์‚ฌ์šฉ๋œ๋‹ค.

 

ํ•˜์ง€๋งŒ DISTINCT๋Š” Temp Tablespace์— ์ž„์‹œ๋กœ ์ €์ •ํ•˜๋Š” ๋ฐฉ์‹์ด๋ผ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ๋ถ€ํ•˜๋ฅผ ์ค„ ์ˆ˜ ์žˆ๋‹ค๊ณ  ํ•œ๋‹ค.

 

์šฐ๋ฆฌ๋Š” ์ง€๊ธˆ SQL์„ ์ฝ”๋”ฉํ…Œ์ŠคํŠธ๋ฅผ ์œ„ํ•ด ๋ฐฐ์šฐ๊ณ  ์žˆ๊ธด ํ•˜์ง€๋งŒ, ์†Œํ”„ํŠธ์›จ์–ด ์—”์ง€๋‹ˆ์–ด๊ฐ€ ๋˜๊ธฐ ์œ„ํ•ด SQL ์ฝ”๋”ฉ ํ…Œ์ŠคํŠธ๋ฅผ ๋ณด๋Š” ๊ณผ์ •์ด๋‹ˆ ์œ„์˜ ๊ฐ„๋‹จํ•œ ์ง€์‹ ์ •๋„๋Š” ๊ธฐ์–ตํ•ด๋„ ์ข‹์„ ๊ฒƒ ๊ฐ™๋‹ค.

DISTINCT๋กœ ๋Œ์•„๊ฐ€์„œ

์šฐ๋ฆฌ์˜ usertb1์„ ๋ชจ๋‘ ์ถœ๋ ฅํ•ด๋ณด์ž.

 

SELECT *
FROM usertb1;

๊ทธ๋Ÿผ ์œ„์™€ ๊ฐ™์ด ์‚ฌ๋žŒ๋“ค์˜ ํ‚ค๊ฐ€ ์ค‘๋ณต๋œ๋‹ค.

 

์ด ํ‚ค๋ฅผ ์ค‘๋ณต ์—†์ด ์ถœ๋ ฅํ•˜๊ณ  ์‹ถ์„ ๋•Œ ๋ฐ”๋กœ distinct๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.

SELECT DISTINCT height
FROM usertb1;

์œ„์™€ ๊ฐ™์ด ์ฒ˜๋ฆฌํ•œ๋‹ค๋ฉด ์ค‘๋ณต์ด ์ œ๊ฑฐ๋œ ๊ฐ’๋“ค์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

 

๋งŒ์•ฝ ์‚ฌ์šฉ์ž์˜ ํ‚ค๊ฐ€ ๋ช‡์ด ์žˆ๋Š”์ง€ ์ˆ˜๋ฅผ ํ™•์ธํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด ์–ด๋–กํ• ๊นŒ?


์˜ˆ๋ฅผ ๋“ค์–ด ํ‚ค๊ฐ€


170, 180, 190 ์ด ์žˆ๋‹ค๋ฉด ํ‚ค๋Š” ์ด 3๊ฐ€์ง€๊ฐ€ ์กด์žฌํ•œ๋‹ค.


์ด๋ฅผ ํ™•์ธํ•˜๋ ค๋ฉด ์–ด๋–ค ์ฟผ๋ฆฌ๋ฅผ ์งœ์•ผํ• ๊นŒ?

์‚ฌ์šฉ์ž ํ‚ค๋Š” ๋ช‡๊ฐ€์ง€๊ฐ€ ์žˆ๋Š”์ง€ ์ถœ๋ ฅํ•˜๋ผ.
SELECT count(height)
FROM usertb1;

์ด๋ ‡๊ฒŒ ์ง ๋‹ค๋ฉด ์ค‘๋ณต๋˜๋Š” ํ‚ค ๋ชจ๋‘๊ฐ€ ๋‚˜์˜ค๊ธฐ ๋•Œ๋ฌธ์— ์ •๋‹ต์ด ๋  ์ˆ˜ ์—†๋‹ค.

 

๋Œ€์‹  ์ด๋ ‡๊ฒŒ ์ง ๋‹ค๋ฉด ์–ด๋–จ๊นŒ?

SELECT count(DISTINCT height)
FROM usertb1;

์ด๋ ‡๊ฒŒ ์ฟผ๋ฆฌ๋ฌธ์„ ๊ตฌ์„ฑํ•œ๋‹ค๋ฉด ์ค‘๋ณต๋œ ํ‚ค๋ฅผ ์ œ๊ฑฐํ•˜๊ณ  count ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์šฐ๋ฆฌ๊ฐ€ ์›ํ•˜๋Š” ๋‹ต์ด ๋‚˜์˜ฌ ์ˆ˜ ์žˆ๊ฒŒ ๋œ๋‹ค.

 

NULL ์ฒ˜๋ฆฌ

๋‹ค์‹œ ํ•œ ๋ฒˆ ์šฐ๋ฆฌ์˜ buytb1์„ ๋ชจ๋‘ ์ถœ๋ ฅํ•ด๋ณด์ž.

SELECT *
FROM buytb1;

๋ณด์ด๋‹ค ์‹ถ์ด groupname์— ํŠน์ • ์นผ๋Ÿผ๋“ค์— NULL์ด ๋“ค์–ด๊ฐ€ ์žˆ๋‹ค.


์ด NULL ๊ฐ’๋“ค์ด ์žˆ๋Š” ์นผ๋Ÿผ๋งŒ ๋ณด๊ณ ์‹ถ์„ ๋•Œ ์–ด๋–ป๊ฒŒ ํ•ด์•ผํ• ๊นŒ?

 

๊ทธ๋ ‡๋‹ค WHERE ์ ˆ์„ ์‚ฌ์šฉํ•˜๋ฉด ๋œ๋‹ค.

SELECT *
FROM buytb1
WHERE groupname = NULL

์•— ๋ญ”๊ฐ€ ์ด์ƒํ•˜๋‹ค.

 

์ฟผ๋ฆฌ๋ฌธ์ด ์‹คํ–‰์ด ๋˜๊ธด ํ•˜์ง€๋งŒ ์•„๋ฌด๊ฒƒ๋„ ์ถœ๋ ฅ๋˜์ง€ ์•Š๋Š”๋‹ค.


์ด์œ ๋Š” NULL์€ ๋ญ˜๊นŒ๋ฅผ ์ƒ๊ฐํ•ด๋ณด๋ฉด ์•Œ ์ˆ˜ ์žˆ๋‹ค.


null์€ ์‚ฌ์‹ค 0์ด๋ผ๊ณ  ์ƒ๊ฐํ•  ์ˆ˜ ์žˆ๋Š”๋ฐ, 0์ด ์•„๋‹ˆ๋ผ ์—†์Œ์˜ ์˜๋ฏธ์— ๊ฐ€๊น๋‹ค.


๊ทผ๋ฐ ์šฐ๋ฆฌ๊ฐ€ ์œ„์—์„œ ํ•œ ๊ฒƒ์€ =์ด๋ผ๋Š” ์‚ฐ์ˆ  ์—ฐ์‚ฐ์„ ์ˆ˜ํ–‰ํ•˜๋ ค๊ณ  ํ–ˆ๋‹ค.


์•„๋ฌด ๊ฒƒ๋„ ์—†์Œ์— ์‚ฐ์ˆ  ์—ฐ์‚ฐ์„ ํ•  ์ˆ˜ ์žˆ์„๊นŒ?


๊ทธ๋ ‡๋‹ค. NULL์€ ๊ฐ’์ด๋ผ๊ณ  ๋ณด์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ์—ฐ์‚ฐ ์ž์ฒด๊ฐ€ ๋ถˆ๊ฐ€๋Šฅ ํ•œ ๊ฒƒ์ด๋‹ค.

 

๊ทธ๋Ÿผ ์šฐ๋ฆฌ๋Š” NULL ์ฒ˜๋ฆฌ๋ฅผ ํ•  ์ˆ˜ ์—†์„๊นŒ?

 

์ด ๋•Œ MySQL Null ์ฒ˜๋ฆฌ ๋‚ด์žฅ ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ NULL ์ฒ˜๋ฆฌ๋ฅผ ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

IS NULL

ํ•ด๋‹น ์นผ๋Ÿผ์ด NULL์ธ ๊ฒฝ์šฐ์˜ ์กฐ๊ฑด์„ IS NULL๋กœ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

SELECT *
FROM buytb1
WHERE groupname IS NULL

IS NOT NULL

ํ•ด๋‹น ์นผ๋Ÿผ์ด NULL์ด ์•„๋‹Œ ๊ฒฝ์šฐ์˜ ์กฐ๊ฑด์„ IS NOT NULL๋กœ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

SELECT *
FROM buytb1
WHERE groupname IS NOT NULL

์นดํ…Œ๊ณ ๋ฆฌ ์ดˆ๋ณด์ž๋„ ์ค€๋น„ํ•˜๋Š” SQL ์ฝ”๋”ฉ ํ…Œ์ŠคํŠธ์— ๊ฐ€์‹œ๋ฉด ํ•ด๋‹น ์‹œ๋ฆฌ์ฆˆ๋ฅผ ํ™•์ธํ•˜์‹ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋Œ“๊ธ€