๐Ÿ’ป ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค MySQL ๋ฌธ์ œํ’€๊ธฐ(LEVEL 1,2)

BLOยท2022๋…„ 8์›” 24์ผ
1
post-thumbnail

๐ŸŽ‰VELOG๋ฅผ ์‹œ์ž‘ํ•˜๋ฉฐ

๋ฏธ๋ฃจ๋˜ ํ•™์Šต๊ธฐ๋ก์šฉ ๋ธ”๋กœ๊ทธ๋ฅผ ๋งŒ๋“ค์—ˆ๋‹ค.


์›๋ž˜ ์ผ์ƒ๊ณผ ๋ฆฌ๋ทฐ ๋“ฑ์„ ์—…๋กœ๋“œํ•˜๊ธฐ ์œ„ํ•ด ๋„ค์ด๋ฒ„ ๋ธ”๋กœ๊ทธ๋ฅผ ์šด์˜ํ–ˆ์—ˆ๋Š”๋ฐ, ์ƒˆ๋กœ์šด ํ”Œ๋žซํผ์„ ๊ฒฝํ—˜ํ•ด๋ณด๊ณ  ์‹ถ๊ธฐ๋„ ํ–ˆ๊ณ  ์ตœ๊ทผ๋“ค์–ด ์˜ฌ๋ฆฌ๊ณ ์žํ•˜๋Š” ํฌ์ŠคํŠธ์˜ ์„ฑ๊ฒฉ๊ณผ ๋”ฑํžˆ ๋งž๋Š” ๊ฒƒ ๊ฐ™์ง€ ์•Š์•˜๋‹ค.

๋งˆ์นจ ํ”„๋กœ์ ํŠธ๋ฅผ ํ•จ๊ป˜ ํ•˜๋Š” ํŒ€์›๋ถ„์˜ ์ถ”์ฒœ ๋•์— VELOG๋กœ ๋„˜์–ด์™”๋‹ค.
์–ผ๋งˆ๋‚˜ ๊พธ์ค€ํžˆ ์“ธ์ง€๋Š” ๋ชจ๋ฅด๊ฒ ์ง€๋งŒ ์ผ๋‹จ ์จ๋ณด๋Š” ์ค‘์ด๋‹ค.

  • ์ œ๋ฐœ ์˜ค๋ž˜ ์จ๋ณด์ž...
  • ๋‚ด ๋‹จ๊ธฐ๊ธฐ์–ต์„ ๋ฏฟ์ง€ ๋ง์ž...

๋งจ ์ฒ˜์Œ ํฌ์ŠคํŒ…์—์„œ๋Š” "ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค" ์‚ฌ์ดํŠธ์—์„œ MySQL ๋ฌธ์ œ๋ฅผ ํ’€์–ด๋ณด๊ณ  ํ—ท๊ฐˆ๋ฆฌ๋Š” ๋ถ€๋ถ„์€ ๊ฐœ์ธ์ ์ธ ํ•ด์„ค์„ ๋ถ™์—ฌ๋ณผ ๊ฒƒ์ด๋‹ค.

๋‚ด๊ฐ€ ํ—ท๊ฐˆ๋ฆฌ๋Š” ๋ถ€๋ถ„์€ (๋Œ€๋ถ€๋ถ„) ๋‹ค๋ฅธ ์‚ฌ๋žŒ๋“ค๋„ ํ—ท๊ฐˆ๋ คํ•˜๋‹ˆ
๋‚˜ ๋ฟ๋งŒ์•„๋‹ˆ๋ผ ๋‹ค๋ฅธ ์‚ฌ๋žŒ๋„ ๋„์›€์„ ๋ฐ›์œผ๋ฉด ์ข‹๊ฒ ๋‹ค.

MySQL ๊ธฐ์ดˆ ์Œ“๊ธฐ

ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค ์ฝ”๋”ฉํ…Œ์ŠคํŠธ ๋งํฌ๐Ÿ‘€ ๋งํฌํ…์ŠคํŠธ

์•„์ง ์ƒ๋‹นํžˆ ์ชผ๋ ™์ด๋‹ค.๐Ÿ˜

ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค LV1 ๋ฌธ์ œ ไธญ

๐Ÿ“Œ์ง‘๊ณ„ํ•จ์ˆ˜ ์„œ๋ธŒ์ฟผ๋ฆฌ๋กœ ๋„ฃ๊ธฐ

SELECT A1.NAME
FROM ANIMAL_INS A1
WHERE A1.DATETIME=(SELECT MIN(A2.DATETIME)
                    FROM ANIMAL_INS A2);

๋ณดํ˜ธ์†Œ์— ๋“ค์–ด์˜จ์ง€ ๊ฐ€์žฅ ์˜ค๋ž˜๋œ ๋™๋ฌผ์˜ ์ด๋ฆ„์„ ์กฐํšŒํ•˜๋Š” ์ฟผ๋ฆฌ๋ฅผ ์งœ์•ผํ–ˆ๋˜ ๊ฒƒ ๊ฐ™๋‹ค.

๋‚ ์งœ๊ฐ€ ๊ฐ€์žฅ ์˜ค๋ž˜๋˜์—ˆ๋‹ค๋Š” ๊ฑด
๋ณดํ˜ธ์†Œ์— ๋“ค์–ด์˜จ ๋‚ ์„ ํ‘œ์‹œํ•˜๋Š” ์ปฌ๋Ÿผ์ธ
DATETIME ์ด ๊ฐ€์žฅ ์ž‘์€ ๊ฒฝ์šฐ๋ฅผ ๋งํ•œ๋‹ค.

์ง‘๊ณ„ํ•จ์ˆ˜๋Š” SELECT ๋‚˜ HAVING ๋’ค์—๋งŒ ๊ฐ€๋Šฅํ•˜๋‹ค๊ณ  ์•Œ๊ณ  ์žˆ๋Š”๋ฐ,
์ด ์ฟผ๋ฆฌ์—์„œ ์กฐํšŒํ•ด์•ผ ํ•˜๋Š” ๊ฒƒ(SELECT ๋’ค์— ์˜ค๋Š” ๊ฒƒ)์€
NAME ์ปฌ๋Ÿผ์ด๊ธฐ ๋•Œ๋ฌธ์— WHERE ์ ˆ์— ์กฐ๊ฑด์„ ๊ฑธ์–ด์ค€๋‹ค

  • ์กฐ๊ฑด : DATETIME์ด ์„œ๋ธŒ์ฟผ๋ฆฌ SELECT ์ ˆ์˜ ์ง‘๊ณ„ํ•จ์ˆ˜ MIN์„ ํ†ตํ•ด ๊ตฌํ•ด์ง€๋Š” ๋‚ ์งœ ์ตœ์†Ÿ๊ฐ’๊ณผ ์ผ์น˜ํ•˜๋Š” ๋ฐ์ดํ„ฐ

์ด ๋•Œ ์กฐํšŒํ•ด์•ผ ํ•˜๋Š” ์ปฌ๋Ÿผ๊ณผ ๊ณ„์‚ฐํ•˜๋Š” ์ปฌ๋Ÿผ์€
๊ฐ™์€ ํ…Œ์ด๋ธ”์— ์žˆ๋Š” ์ปฌ๋Ÿผ์ด์ง€๋งŒ ์ด๋ฆ„์„ ๋ถ€์—ฌํ•ด a1, a2๋กœ ๋ถ„๋ฆฌํ•˜๊ณ ,
์ปฌ๋Ÿผ ์•ž์— a1.(์ปฌ๋Ÿผ๋ช…) a2.(์ปฌ๋Ÿผ๋ช…) ์ด๋Ÿฐ์‹์œผ๋กœ ๊ตฌ๋ถ„ํ•ด์ค€๋‹ค.

ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค LV2 ๋ฌธ์ œ ไธญ

๐Ÿ“๊ฐœ๋ณ„๋ฌธ์ œ ํ’€์ด 1

SELECT NAME, COUNT(*) AS COUNT
FROM ANIMAL_INS
WHERE NAME IS NOT NULL -- ์ด๋ฆ„ ์—†๋Š” ๋™๋ฌผ ์ œ์™ธ
GROUP BY NAME -- ์ด๋ฆ„๋ณ„๋กœ ์นด์šดํŠธํ•˜๋Š”๋ฐ,
HAVING COUNT(*) >= 2 -- ๋‘๋ฒˆ์ด์ƒ ์“ฐ์—ฌ์•ผ ํ•œ๋‹ค
ORDER BY NAME; -- ๊ฒฐ๊ณผ ์ •๋ ฌ

์ฟผ๋ฆฌ ์กฐ๊ฑด์œผ๋กœ ์ œ์‹œ๋˜๋Š” ๋ฌธํ•ญ๋“ค๊ณผ ์ฝ”๋“œ๋ฅผ ๋งค์นญ์‹œ์ผœ๋ณด์•˜๋‹ค.

์ด ๋ฌธ์ œ๋Š” ์ด๋ฆ„์—†๋Š” ๋™๋ฌผ์„ ์ œ์™ธํ•˜๊ณ ,
๋™์ผํ•œ ์ด๋ฆ„์ด ๋‘ ๋งˆ๋ฆฌ ์ด์ƒ์˜ ๋™๋ฌผ์—๊ฒŒ ์‚ฌ์šฉ๋œ ๊ฒฝ์šฐ
๊ทธ ์ด๋ฆ„๊ณผ ์‚ฌ์šฉ๋œ ํšŸ์ˆ˜๋ฅผ ์นด์šดํŠธํ•˜๋Š” ์ฟผ๋ฆฌ๋ฅผ ์ž‘์„ฑํ•ด์•ผํ–ˆ๋‹ค.

  • ์ด๋ฆ„๋ณ„๋กœ ์นด์šดํŠธํ•ด์•ผํ•˜๊ธฐ ๋•Œ๋ฌธ์—
    GROUP BY ๋ฅผ ์‚ฌ์šฉํ•ด์„œ ์ด๋ฆ„์„ ๊ธฐ์ค€์œผ๋กœ ๊ทธ๋ฃนํ•‘์„ ํ•ด์ค€๋‹ค.

  • ๊ทผ๋ฐ ์ด๋ฆ„๋ณ„๋กœ ๊ทธ๋ฃน์„ ๋‚˜๋ˆˆ ํ›„์— ํ–‰์˜ ๊ฐœ์ˆ˜๋ฅผ ์นด์šดํŠธ ํ–ˆ์„ ๋•Œ
    2 ์ด์ƒ์ธ ์ด๋ฆ„๋งŒ ๊ฐ€์ ธ์™€์•ผ ํ•˜๊ธฐ์—,
    HAVING ์ ˆ์— ์กฐ๊ฑด์„ ์ž…๋ ฅํ•ด์ค€๋‹ค.


๐Ÿ“๊ฐœ๋ณ„๋ฌธ์ œ ํ’€์ด 2

SELECT HOUR(DATETIME) AS HOUR, COUNT(*) AS COUNT
FROM ANIMAL_OUTS
WHERE HOUR(DATETIME) BETWEEN 9 AND 19 -- ์‹œ๊ฐ„๋Œ€ ์„ค์ •
GROUP BY 1
ORDER BY 1; -- ์‹œ๊ฐ„๋Œ€ ์˜ค๋ฆ„์ฐจ์ˆœ

์ด ์ฟผ๋ฆฌ๋Š” ์ž…์–‘๊ฐ„ ๋™๋ฌผ๋“ค์ด ์ฃผ๋กœ ์–ด๋А ์‹œ๊ฐ„๋Œ€์— ์ž…์–‘๊ฐ€๋Š”์ง€ ์•Œ์•„๋ณด๊ธฐ ์œ„ํ•ด
๊ทธ ์‹œ๊ฐ„๋Œ€์™€ ์ž…์–‘๊ฐ„ ๋™๋ฌผ ์ˆ˜๋ฅผ ์กฐํšŒํ•˜๊ธฐ ์œ„ํ•œ ์ฟผ๋ฆฌ์ด๋‹ค.

์ฒ˜์Œ์—๋Š” SUBSTR ํ•จ์ˆ˜๋ฅผ ์ด์šฉํ•ด์„œ ์‹œ๊ฐ„๋Œ€๋ฅผ ์ถ”์ถœํ•ด์•ผํ•˜๋‚˜ ์•ฝ๊ฐ„ ๊ณ ๋ฏผํ–ˆ์œผ๋‚˜,
HOUR ํ•จ์ˆ˜๋ผ๋Š” ํŽธํ•œ ๊ธฐ๋Šฅ์„ ์žŠ๊ณ  ์žˆ์—ˆ๋‹ค๋Š” ๊ฑธ ๊นจ๋‹ฌ์•˜๋‹ค.

  • DATETIME ์ปฌ๋Ÿผ์— HOUR ํ•จ์ˆ˜๋ฅผ ์ ์šฉํ•ด ์‹œ๊ฐ„๋Œ€๋ฅผ ์ถ”์ถœํ•˜๊ณ 

  • ์‹œ๊ฐ„๋Œ€๋ฅผ ๊ธฐ์ค€์œผ๋กœ GROUP BY ํ•˜์—ฌ ๊ทธ๋ฃนํ•‘ ํ•ด์ค€๋‹ค.
    (์ด ๋•Œ 1์€ SELECT ์ ˆ์˜ ์ฒซ๋ฒˆ์งธ ์ปฌ๋Ÿผ์ธ HOUR(DATETIME)์„ ๊ฐ€๋ฆฌํ‚จ๋‹ค.)

  • ์ •๋ ฌ์ˆœ์„œ ์—ญ์‹œ ์‹œ๊ฐ„๋Œ€๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์˜ค๋ฆ„์ฐจ์ˆœ ์ •๋ ฌํ•œ๋‹ค.

์ด์ƒํ•˜๊ฒŒ ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค ๋ฌธ์ œ๋งŒ ํ’€๋ฉด
์ž๊พธ ์„ฑ๊ธ‰ํ•˜๊ฒŒ ๋‹ต์•ˆ์„ ์ œ์ถœํ•˜๊ฒŒ ๋˜๋Š”๋ฐ...๐Ÿ˜ฅ
๊ทธ๋Ÿฌ๋ฉด์„œ 9์‹œ๋ถ€ํ„ฐ 19์‹œ ์‹œ๊ฐ„๋Œ€๋งŒ ์ถ”์ถœํ•˜๋ผ๋Š” ์กฐ๊ฑด์„ ์žŠ์—ˆ๋‹ค.

๋ฐ˜๋“œ์‹œ ์กฐ๊ฑด ๋นผ๋จน์ง€ ๋ง๊ณ  ์ž‘์„ฑํ•˜์ž.


๐Ÿ“๊ฐœ๋ณ„๋ฌธ์ œ ํ’€์ด 3

SELECT ANIMAL_TYPE,
    (CASE WHEN NAME IS NULL THEN 'No name' ELSE NAME END) 
    , SEX_UPON_INTAKE
FROM ANIMAL_INS
ORDER BY ANIMAL_ID;

์ด ์ฟผ๋ฆฌ๋Š” ๋™๋ฌผ์ด๋ฆ„ ๋„๊ฐ’์ฒ˜๋ฆฌ๊ฐ€ ์ค‘์š”ํ•˜๋‹ค.
CASE๋ฌธ์„ ํ™œ์šฉํ•ด์„œ NAME ์ด NULL๊ฐ’์ด๋ฉด 'No name'์„ ์ถœ๋ ฅํ•˜๋„๋ก ํ–ˆ๋‹ค.

CASE๋ฌธ์˜ ํ˜•ํƒœ๋Š” ์•„๋ž˜์™€ ๊ฐ™๋‹ค.

CASE WHEN (์กฐ๊ฑด) THEN (๊ฒฐ๊ณผ1) ELSE (๊ฒฐ๊ณผ2) END;

๋ญ”๊ฐ€ ๋‹จ์ˆœํžˆ ์ƒ๊ฐํ•˜๋ฉด,

  • NAME์ด ๋„๊ฐ’์ด๋ฉด No name์„ ์ถœ๋ ฅํ•˜๊ณ  ์•„๋‹ˆ๋ฉด ๊ทธ๋ƒฅ ์›๋ž˜ ์ปฌ๋Ÿผ์„ ์ถœ๋ ฅํ•œ๋‹ค!
  • ๊ทธ๋Ÿฌ๋ฉด ELSE ๋’ค์— ๋ญ ์•ˆ๋„ฃ์–ด๋„ ์•Œ์•„์„œ ํ•ด์•ผํ•˜๋Š” ๊ฑฐ ์•„๋‹Œ๊ฐ€?

์ด๋Ÿฐ ์‹์˜ ์ปดํ“จํ„ฐ ์ž…์žฅ์„ ๊ณ ๋ คํ•˜์ง€ ์•Š๋Š” ์ƒ๊ฐ์„ ์ž ๊น ํ–ˆ์œผ๋‚˜...
ELSE ๋’ค์—๋„ ์ถœ๋ ฅํ•ด์ค„ ์ปฌ๋Ÿผ์„ ์ž…๋ ฅํ•ด์ค˜์•ผ ํ•œ๋‹ค.

์ปดํ“จํ„ฐ์˜ ์‚ฌ๊ณ ๋ฐฉ์‹์„ ๋ฐฐ๋ คํ•ด์ฃผ๋ฉฐ ๋ฌธ์ œ๋ฅผ ํ’€์ž.๐Ÿ˜Ž


๐Ÿ“๊ฐœ๋ณ„๋ฌธ์ œ ํ’€์ด 4

SELECT ANIMAL_ID, NAME,
    (CASE WHEN SEX_UPON_INTAKE LIKE '%Neutered%' THEN 'O'
    WHEN SEX_UPON_INTAKE LIKE '%Spayed%' THEN 'O'
    ELSE 'X' END) AS ์ค‘์„ฑํ™”
FROM ANIMAL_INS
ORDER BY ANIMAL_ID;

์ด ์ฟผ๋ฆฌ๋Š” ์ค‘์„ฑํ™” ์—ฌ๋ถ€๋ฅผ O, X๋กœ ๊ตฌ๋ถ„ํ•˜๋Š” '์ค‘์„ฑํ™”'๋ผ๋Š” ์ปฌ๋Ÿผ์„ ๋งŒ๋“ค์–ด์ค€๋‹ค.

์ฒ˜์Œ์— ๋‚ด๊ฐ€ ์งฐ๋˜ ์ฟผ๋ฆฌ๋Š”

CASE WHEN SEX_UPON_INTAKE LIKE IN('%Neutered%','%Spayed%') THEN 'O'

์ด๋Ÿฐ ๋ชจ์–‘์ƒˆ ์˜€์—ˆ๋‹ค.

ํ•˜์ง€๋งŒ ์ œ์ถœํ•˜๋‹ˆ Operand should contain 1 column(s) ์˜ค๋ฅ˜๊ฐ€ ๋œจ๋”๋ผ.

๊ทธ๋ž˜์„œ ๊ตฌ๊ธ€๋งํ•ด๋ณด์•˜๋Š”๋ฐ,
๋ฌด์Šจ ๋œป์ธ์ง€ ์ •ํ™•ํžˆ๋Š” ์ดํ•ดํ•˜์ง€ ๋ชปํ–ˆ์œผ๋‚˜...

  • ๋น„๊ต๋Œ€์ƒ์ด 1๋Œ€1 ์ด์–ด์•ผ ํ•˜๋Š”๋ฐ?
  • IN ๊ด„ํ˜ธ ์•ˆ์— ๋‘ ๊ฐœ๋ฅผ ์ค˜์„œ ์˜ค๋ฅ˜๊ฐ€ ๋‚ฌ๋‹ค๊ณ  ํ•œ๋‹ค.

๋ญ”์ง„ ๋ชจ๋ฅด๊ฒ ์ง€๋งŒ ์ผ๋‹จ ์˜ค๋ฅ˜๊ฐ€ ๋‚˜๋‹ˆ๊นŒ
ํ•˜๋ผ๋Š” ๋Œ€๋กœ WHEN ์ ˆ ๋‘ ๊ฐœ๋กœ ๋‚˜๋ˆ ์ฃผ์—ˆ๋‹ค.

๊ฒฐ๋ก  : ์ฟผ๋ฆฌ ์งœ๋Š” ๊ฑด ๋ฐ•์ง„์˜ st. ๋กœ ์ƒ๊ฐํ•ด์•ผ ๋ง˜์ด ํŽธํ•˜๋‹ค.

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