# WeeklyPaper 04

์ œ๋กœยท2026๋…„ 3์›” 21์ผ

๐Ÿ“š SQL ์‹คํ–‰ ์ˆœ์„œ

GROUP BY์™€ HAVING์˜ ์ฐจ์ด

SQL ์ฟผ๋ฆฌ๋ฅผ ์ž‘์„ฑํ•  ๋•Œ, ์ž‘์„ฑ๋˜๋Š” ๊ตฌ๋ฌธ ์ˆœ์„œ์™€ ๋‹ฌ๋ฆฌ DB ์—”์ง„์ด ํ•ด๋‹น ๊ตฌ๋ฌธ์„ ์ฒ˜๋ฆฌํ•˜๋Š” ์ˆœ์„œ์—๋Š” ์ฐจ์ด๊ฐ€ ์žˆ๋‹ค.


๐Ÿ“ ๊ตฌ๋ฌธ

์ข…๋ฅ˜ (์ž‘์„ฑ ์ˆœ์„œ์— ๋”ฐ๋ผ)

SELECT

DB์— ์ €์žฅ๋œ ๋ฐ์ดํ„ฐ๋“ค์„ ์กฐํšŒํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋œ๋‹ค.

FROM

์–ด๋–ค ํ…Œ์ด๋ธ”์—์„œ ์–ด๋–ค ํ…Œ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜ฌ์ง€ ์ง€์ •ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋œ๋‹ค.

WHERE

๋ถˆ๋Ÿฌ์˜ฌ ๋ฐ์ดํ„ฐ์— ์กฐ๊ฑด์„ ์ถ”๊ฐ€ํ•ด ํ•„ํ„ฐ๋งํ•œ๋‹ค.

GROUP BY

ํŠน์ • ๊ธฐ์ค€์ด ๋˜๋Š” ์นผ๋Ÿผ์„ ๊ธฐ์ค€์œผ๋กœ ๊ทธ๋ฃนํ™”ํ•˜๋Š” ์—ญํ• ์ด๋‹ค.

HAVING

๊ทธ๋ฃนํ™”๋œ ๊ฒฐ๊ณผ๋“ค ์ค‘
HAVING์— ์ž‘์„ฑ๋œ ์กฐ๊ฑด์— ๋งž๋Š” ๋ฐ์ดํ„ฐ๋งŒ ์ถœ๋ ฅํ•œ๋‹ค.

ORDER BY

์ž‘์„ฑ๋˜๋Š” ์นผ๋Ÿผ๋ช…์„ ๊ธฐ์ค€์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ •๋ ฌํ•œ๋‹ค.
ASC๋Š” ์˜ค๋ฆ„์ฐจ์ˆœ, DESC๋Š” ๋‚ด๋ฆผ์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌ๋œ๋‹ค.


๐Ÿ“ ๊ตฌ๋ฌธ ์‹คํ–‰ ์ˆœ์„œ

  1. FROM์œผ๋กœ
    ์–ด๋–ค ํ…Œ์ด๋ธ”์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜ค๋ฉด ์ข‹์„์ง€ ์ง€์ •ํ•œ๋‹ค.
  2. WHERE๋กœ
    ์ „์ฒด ๋ฐ์ดํ„ฐ ์ค‘ ๊ฐœ๋ณ„ ํ–‰์„ ์กฐ๊ฑด์— ๋งž์ถฐ ํ•„ํ„ฐ๋งํ•œ๋‹ค.
    ์–ด๋–ค ํ…Œ์ด๋ธ”์ธ์ง€ ์ง€์ •ํ•ด์•ผ๋งŒ(FROM) ํ•„ํ„ฐ๋ง์ด ๊ฐ€๋Šฅํ•˜๋‹ค.
  3. GROUP BY๋กœ
    ํ•„ํ„ฐ๋ง๋œ ๋ฐ์ดํ„ฐ๋ฅผ ํŠน์ • ์—ด์„ ๊ธฐ์ค€์œผ๋กœ ๋ฌถ์–ด ์ค€๋‹ค.
    ํ•œ ๋ฒˆ ๊ฑธ๋Ÿฌ๋‚ธ ์ดํ›„ ๊ทธ๋ฃนํ™”๋ฅผ ํ•˜๋Š” ๊ฒƒ์ด ๋ณต์žกํ•œ ๊ณ„์‚ฐ์„ ํ•œ ๋ฒˆ ์ค„์—ฌ ์ฃผ๋Š” ์ค‘์š”ํ•œ ์—ญํ• ์„ ํ•œ๋‹ค.
  4. HAVING์œผ๋กœ
    ๊ทธ๋ฃนํ™”๋œ ๋ฐ์ดํ„ฐ ์ค‘
    ์กฐ๊ฑด์— ๋งž๋Š” ๋ฐ์ดํ„ฐ๋งŒ ๋‚จ๊ธฐ๋„๋ก ํ•œ ๋ฒˆ ๋” ํ•„ํ„ฐ๋งํ•œ๋‹ค.
  5. SELECT๋กœ
    ์ตœ์ข…์ ์œผ๋กœ ๋ณด์—ฌ ์ค„ ์นผ๋Ÿผ์„ ๊ผฝ๋Š”๋‹ค.
    ๋ชจ๋“  ํ•„ํ„ฐ๋ง์ด ๋๋‚œ ์ดํ›„ ์‚ฌ์šฉ์ž์—๊ฒŒ ํ…Œ์ด๋ธ”์— ์–น์–ด ๋ณด์—ฌ ์ค„ ์นผ๋Ÿผ์„ ๊ผฝ์•„ ์ค€๋‹ค.
  6. ORDER BY๋ฅผ
    ์ด์šฉํ•ด ๋งˆ์ง€๋ง‰์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ •๋ ฌํ•œ๋‹ค.
    ๋ชจ๋“  ๋ฐ์ดํ„ฐ๋ฅผ ์ถœ๋ ฅํ•  ์ค€๋น„๊ฐ€ ๋๋‚œ ํ›„ ์ •๋ ฌํ•ด์•ผ ์ •ํ™•ํ•œ ์ •๋ ฌ ๊ฒฐ๊ณผ๊ฐ€ ๋‚˜์˜จ๋‹ค.

์—ฌ๊ธฐ์—์„œ, WHERE๊ณผ HAVING์€ ๋ชจ๋‘ ์กฐ๊ฑด์„ ์ง€์ •ํ•˜๋Š” ์—ด์ด๋‚˜,
GROUP BY ์—ฌ๋ถ€์— ๋”ฐ๋ผ ์‚ฌ์šฉ๋  ์ˆ˜ ์žˆ๋Š” ์ฟผ๋ฆฌ๊ฐ€ ๋‹ฌ๋ผ์ง„๋‹ค.
WHERE์€ GROUP BY๊ฐ€ ์—†์–ด๋„ ์‚ฌ์šฉ๋  ์ˆ˜ ์žˆ์ง€๋งŒ HAVING์€ GROUP BY๊ฐ€ ์—†๋‹ค๋ฉด ์‚ฌ์šฉ๋  ์ˆ˜ ์—†๋‹ค.


โœ”๏ธ GROUP BY, HAVING, WHERE

๐Ÿ’ก GROUP BY

๋ฐ์ดํ„ฐ๋ฅผ ๊ทธ๋ฃน์œผ๋กœ ๋ฌถ๋Š”๋‹ค.
ํ–‰์˜ ๊ฐœ์ˆ˜๊ฐ€ ๊ทธ๋ฃน์— ํฌํ•จ๋œ ๋งŒํผ ์ค„์–ด๋“ค๋ฉฐ, ์ง‘๊ณ„ ํ•จ์ˆ˜ ์‚ฌ์šฉ์„ ์œ„ํ•œ ๊ธฐ์ค€์„ ์ œ๊ณตํ•˜๋Š” ์—ญํ• ์„ ํ•œ๋‹ค.

๐Ÿ’ก HAVING

๊ทธ๋ฃนํ™” ์ดํ›„ ์‹คํ–‰๋œ๋‹ค.
์กฐ๊ฑด์— ๋ถ€ํ•ฉ๋˜์ง€ ์•Š๋Š” ๊ทธ๋ฃน ์ž์ฒด๊ฐ€ ์‚ฌ๋ผ์ง„๋‹ค.
๊ทธ๋ฃนํ™” ์ดํ›„ ์‹คํ–‰๋˜๋ฏ€๋กœ ์ง‘๊ณ„ ํ•จ์ˆ˜๋ฅผ ์ž์œ ๋กœ์ด ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ๊ทธ๋ฅผ ์กฐ๊ฑด์œผ๋กœ ์‚ฌ์šฉํ•œ๋‹ค.

โžก๏ธ GROUP BY๋Š” ๋‹จ๋… ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅํ•˜๋‚˜ HAVING์€ GROUP BY๊ฐ€ ์žˆ์–ด์•ผ๋งŒ ์กด์žฌํ•  ์ˆ˜ ์žˆ๋‹ค.

๐Ÿ’ก WHERE

๊ทธ๋ฃนํ™” ์ด์ „์— ์‹คํ–‰๋œ๋‹ค.
GROUP BY๊ฐ€ ์—†์–ด๋„ ์‚ฌ์šฉ๋  ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋ณธ ์ฟผ๋ฆฌ๋‹ค.
์•„์ง ๊ทธ๋ฃนํ™”๋ฅผ ํ•˜๊ธฐ ์ด์ „์ด๋ฏ€๋กœ ์ง‘๊ณ„ ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋‹ค.


๐Ÿ“š SQL์˜ NULL

๐Ÿ“ NULL

๋ง ๊ทธ๋Œ€๋กœ ์กด์žฌํ•˜์ง€ ์•Š๋Š” ๊ฐ’์ด๋‹ค.
0, '' ์™€ ๊ฐ™์€ ๊ฒƒ์ด ์•„๋‹Œ, NULL ๊ฐ’ ๊ทธ ์ž์ฒด๋ฅผ ์ผ์ปซ๋Š”๋‹ค.
NULL์€ ๋ฌธ์ž์—ด๋„, ์ •์ˆ˜๋„ ์–ด๋–ค ๋ฐ์ดํ„ฐ ํƒ€์ž…์—๋„ ํฌํ•จ๋˜์ง€ ์•Š์œผ๋ฏ€๋กœ ์–ด๋– ํ•œ ์—ฐ์‚ฐ์„ ์‹คํ–‰ํ•˜๋”๋ผ๋„ NULL ๊ฐ’์„ ๋ฑ‰์–ด๋‚ธ๋‹ค.


๐Ÿ“ NULL ์ฒ˜๋ฆฌ ํ•จ์ˆ˜

โœ”๏ธ NULL ํ™•์ธ

IS NULL

ํ•ด๋‹น ์นผ๋Ÿผ์˜ ๊ฐ’์ด ๋น„์–ด ์žˆ๋Š”(NULL) ํ–‰๋งŒ ๊ณจ๋ผ๋ƒ„

IS NOT NULL

๊ฐ’์ด ์ฑ„์›Œ์ ธ ์žˆ๋Š” ํ–‰๋งŒ ๊ณจ๋ผ๋ƒ„

โœ”๏ธ NULL ๋Œ€์ฒด

IF NULL(์นผ๋Ÿผ ๋ช…, ๋Œ€์ฒด๊ฐ’)

ํ•ด๋‹นํ•˜๋Š” ์นผ๋Ÿผ ๊ฐ’์ด NULL์ผ ๋•Œ ๋‹ค๋ฅธ ๊ฐ’์œผ๋กœ ๋Œ€์ฒดํ•ด ์ถœ๋ ฅํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด ์ค€๋‹ค.

WHERE IFNULL(phone, '์—ฐ๋ฝ์ฒ˜ ์—†์Œ') 
-- ํ•ธ๋“œํฐ ๋ฒˆํ˜ธ๊ฐ€ ์—†์œผ๋ฉด '์—ฐ๋ฝ์ฒ˜ ์—†์Œ'์„ ์ถœ๋ ฅํ•œ๋‹ค.

COALESCE(๊ฐ’1, ๊ฐ’2, ...)

IF NULL์˜ ํ™•์žฅ.
์ธ์ž๋“ค์„ ์ˆœ์„œ๋Œ€๋กœ ํ›‘๋‹ค ์ฒ˜์Œ์œผ๋กœ NULL์ด ์•„๋‹Œ ๊ฐ’์„ ๋งŒ๋‚˜๋ฉด ํ•ด๋‹น ๊ฐ’์„ ๋ฐ˜ํ™˜

WHERE COALESCE(mobile, home, office, '์—ฐ๋ฝ์ฒ˜ ์—†์Œ')
-- mobile์ด ์—†์œผ๋ฉด home,
-- home์ด ์—†์œผ๋ฉด office,
-- office๊ฐ€ ์—†์œผ๋ฉด '์—ฐ๋ฝ์ฒ˜ ์—†์Œ'

0๊ฐœ์˜ ๋Œ“๊ธ€