SELECT
์ผ๋ฐ์ ์ผ๋ก INSERT / UPDATE / DELETE ๋ ๊ฑฐ์ ๋ ์ฝ๋ ๋จ์๋ก ๋ฐ์ํ๊ธฐ ๋๋ฌธ์ ์ฑ๋ฅ์ ๋ฌธ์ ๊ฐ ์๋ค. ํ์ง๋ง SELECT๋ ์ฌ๋ฌ ๊ฐ์ ํ ์ด๋ธ๋ก๋ถํฐ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ค๊ธฐ ๋๋ฌธ์ ์ด๋ค ๋ฐฉ์์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ฌ์ง์ ๋ฐ๋ผ ์ฑ๋ฅ์ด ํฌ๊ฒ ๋ฌ๋ผ์ง๋ค.
SELECT ์ ์ ์ธ๋ฑ์ค ์ฌ์ฉ
์ธ๋ฑ์ค ์ฌ์ฉ์ ์ํ ๊ธฐ๋ณธ ๊ท์น
๊ธฐ๋ณธ์ ์ผ๋ก ์ปฌ๋ผ์ ๊ฐ ์์ฒด๋ฅผ ๋ณํํ์ง ์๊ณ ๊ทธ๋๋ก ์ฌ์ฉํ๋ ์กฐ๊ฑด์ ๋ง์กฑํด์ผ ์ธ๋ฑ์ค๋ฅผ ์ ์์ ์ผ๋ก ์ฌ์ฉํ ์ ์๋ค.
๋ํ ๋น๊ต ๋์์ด ๋ค๋ฅธ ํ์ ์ ๊ฐ์ง๊ฒ ๋๋ฉด ๋ด๋ถ์ ์ผ๋ก ํ ๋ณํ์ด ๋ฐ์ํ๊ฒ ๋๋๋ฐ ์ด ๊ฒฝ์ฐ์๋ ์ธ๋ฑ์ค๋ฅผ ์ฌ์ฉํ ์ ์๋ค.
WHERE ์ ์ ์ธ๋ฑ์ค
WHERE ์กฐ๊ฑด์์ ์ฌ๋ฌ ๊ฐ์ ์ปฌ๋ผ์ ์กฐํฉํ์ฌ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ์๋ ์ธ๋ฑ์ค๋ฅผ ์ด๋ป๊ฒ ๊ตฌ์ฑํ๋๋์ ๋ฐ๋ผ ์ฑ๋ฅ์ด ํฌ๊ฒ ๋ฌ๋ผ์ง๋ค. ์ฌ๊ธฐ์ ์ค์ ๋ก ์์ฑ ๋ ์์๋ก ์ธ๋ฑ์ค๊ฐ ๊ตฌ์ฑ๋๋ ๊ฒ์ด ์๋๋ผ ์ธ๋ฑ์ค์ ์ปฌ๋ผ ์์์ ๋ฐ๋ผ ์ต์ ํ ์ํ์ ํ๊ฒ ๋๊ธฐ ๋๋ฌธ์ ์ธ๋ฑ์ค์ ์ปฌ๋ผ ์์๋ฅผ ์ ๊ณ ๋ คํด์ผ ํ๋ค. ์ฌ๊ธฐ์ ์์ ์ค๋ช ์ ๋ชจ๋ AND ์กฐ๊ฑด์ ํด๋นํ๋ ๊ฒฝ์ฐ์ด๋ฉฐ, OR ์กฐ๊ฑด์ ๊ฒฝ์ฐ์๋ ์ฒ๋ฆฌ ๋ฐฉ์์ด ๋ฐ๋๊ฒ ๋๋ค.
๋ง์ฝ WHERE ์กฐ๊ฑด์ OR ์กฐ๊ฑด์ด ๊ฑธ๋ ค์๊ณ , ์์ ๊ฐ์ด ์ธ๋ฑ์ค๊ฐ ์ค์ ๋์ด์๋ ๊ฒฝ์ฐ AND์ ๊ฒฝ์ฐ first_name
์ธ๋ฑ์ค๋ฅผ ์ฌ์ฉํ ์ ์์ง๋ง,
OR ์ฐ์ฐ์๊ฐ ์ ์ฉ๋์ด ๊ฐ ์กฐ๊ฑด์ด ๋ณ๊ฐ๋ก ์ฒ๋ฆฌ๋๊ธฐ ๋๋ฌธ์ ํ ํ
์ด๋ธ ์ค์บ์ด ๋ฐ์ํ๊ฒ ๋๋ค.
GROUP BY ์ ์ ์ธ๋ฑ์ค
GROUP BY ์ ์์๋ ์ธ๋ฑ์ค๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํด์ ์๋์ ์กฐ๊ฑด์ ๋ง์กฑํด์ผ ํ๋ค.
GROUP BY ์ ์ ๋ช ์๋ ์ปฌ๋ผ์ด ์ธ๋ฑ์ค ์ปฌ๋ผ ์์์ ์์น๊ฐ ๋์ผํด์ผ ํ๋ค.
์ธ๋ฑ์ค ๊ตฌ์ฑ ์ปฌ๋ผ ์ค ๋ค์ชฝ ์ปฌ๋ผ์ GROUP BY ์ ์ ๋ช ์๋์ง ์์๋ ์ธ๋ฑ์ค๋ฅผ ์ฌ์ฉํ ์ ์์ง๋ง, ์์ชฝ ์ปฌ๋ผ์ด GROUP BY ์ ์ ๋ช ์๋์ง ์์ผ๋ฉด ์ธ๋ฑ์ค ์ฌ์ฉ์ด ๋ถ๊ฐ๋ฅํ๋ค.
ORDER BY ์ ์ ์ธ๋ฑ์ค
GROUP BY ์ฒ๋ฆฌ ๋ฐฉ๋ฒ๊ณผ ๋น์ทํ๋ฉฐ ๊ธฐ๋ณธ์ ์ผ๋ก ์์ GROUP BY ์ ์ ์ธ๋ฑ์ค๋ฅผ ์ฌ์ฉํ ์ ์๋ ์กฐ๊ฑด์ ๋ฐ๋ฅด๊ฒ ๋๋ฉฐ ์ถ๊ฐ์ ์ผ๋ก ์๋์ ์กฐ๊ฑด์ ๋ง์กฑํด์ผ ํ๋ค.
ORDER BY ์ ์ ๋ช ์๋ ๋ชจ๋ ์ปฌ๋ผ์ด ์ค๋ฆ์ฐจ์์ด๊ฑฐ๋ ๋ด๋ฆผ์ฐจ์์ผ๋ก ์ ๋ ฌ๋์ด์ผ ํ๋ค.
WHERE + ORDER BY(or GROUP BY) ์ ์ ์ธ๋ฑ์ค
WHERE ์ ๊ณผ ORDER BY ์ ์ ๋์์ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ์๋ ์๋์ ๋ฐฉ๋ฒ์ผ๋ก ์ธ๋ฑ์ค๋ฅผ ์ด์ฉํ๊ฒ ๋๋ค.
WHERE ์ ๋ง ์ธ๋ฑ์ค ์ด์ฉ
ORDER BY ์ ์ ์ธ๋ฑ์ค๋ฅผ ์ด์ฉํ ์ ๋ ฌ์ด ๋ถ๊ฐ๋ฅํ๋ฉฐ, WHERE ์ ์ ๋์ ์ปฌ๋ผ์ด ์ธ๋ฑ์ค์ ํฌํจ๋ผ ์์ ๋ ์ฌ์ฉ ๊ฐ๋ฅ
WHERE ์ธ๋ฑ์ค๋ฅผ ํตํด ์กฐํ๋ ๊ฒฐ๊ณผ๋ฅผ ๋ณ๋๋ก ์ ๋ ฌํ๋ ๋ฐฉ์์ผ๋ก ์ฒ๋ฆฌ๋๋ค.
WHERE ์ ์กฐ๊ฑด์ ์ผ์นํ๋ ๋ ์ฝ๋ ๊ฑด์๊ฐ ์ ์ ์๋ก ์ฑ๋ฅ์ด ์ข๋ค.
ORDER BY ์ ๋ง ์ธ๋ฑ์ค ์ด์ฉ
WHERE ์ ์ ์ธ๋ฑ์ค๋ฅผ ์ด์ฉํ ์กฐํ๊ฐ ๋ถ๊ฐ๋ฅํ๋ฉฐ, ORDER BY ์ ์ ์ ๋ ฌ ๋์ ์ปฌ๋ผ์ด ์ธ๋ฑ์ค์ ํฌํจ๋ผ ์์ ๋ ์ฌ์ฉ ๊ฐ๋ฅ
ORDER BY ์ ์ ์์๋๋ก ์ธ๋ฑ์ค๋ฅผ ์ฝ์ผ๋ฉด์ ๋ ์ฝ๋ ํ ๊ฑด์ฉ WHERE ์กฐ๊ฑด์ ์ผ์นํ๋์ง ํ์ธํ๋ ๋ฐฉ์์ผ๋ก ์ฒ๋ฆฌ๋๋ค.
WHERE ์ + ORDER BY ์ ๋์์ ๊ฐ์ ์ธ๋ฑ์ค ์ด์ฉ
WHERE ์ ์
๋ฒ์
๋น๊ต ์กฐ๊ฑด์์ ์ฌ์ฉํ๋ ์ปฌ๋ผ๊ณผ ORDER BY ์ ์ ์ ๋ ฌ ๋์ ์ปฌ๋ผ์ด ๋ชจ๋ ํ๋์ ์ธ๋ฑ์ค์ ์ฐ์ํด์ ํฌํจ๋ผ ์์ ๋ ์ฌ์ฉ ๊ฐ๋ฅWHERE ์ ์
๋๋ฑ
๋น๊ต ์กฐ๊ฑด์ผ๋ก ์ฌ์ฉํ๋ ์ปฌ๋ผ๊ณผ ORDER BY ์ ์ ์ ๋ ฌ ๋์ ์ปฌ๋ผ์ด ์ค์ฒฉ ์๊ด ์์ด ์ธ๋ฑ์ค ์์๋๋ก ํฌํจ๋ผ ์์ ๋ ์ฌ์ฉ ๊ฐ๋ฅ์ ์ผ ๋น ๋ฅธ ์ฑ๋ฅ์ ๋ณด์ด๊ธฐ ๋๋ฌธ์ ๊ฐ๋ฅํ๋ค๋ฉด ์ด ๋ฐฉ๋ฒ์ ์ฌ์ฉํ๋ ๊ฒ์ด ์ข๋ค.
์ ์ฟผ๋ฆฌ๋ ๋๋ฑ ๋น๊ต์ด๊ธฐ ๋๋ฌธ์ 1๋ฒ์์ COL_1 GROUP BY ์ ์ ์ถ๊ฐํ๋๋ผ๋ ์ ๋ ฌ ์์์ ๋ณํ๊ฐ ์์ด(COL_1์ ๋ํ ๋ฐ์ดํฐ๊ฐ ํ ๊ฑด์ด๊ธฐ ๋๋ฌธ) ์คํ ๊ฒฐ๊ณผ๊ฐ ๊ฐ๋ค. ๋๋ฌธ์ ์ตํฐ๋ง์ด์ ์์ ์คํ ๊ณํ์ ์ต์ ํํ์ฌ WHERE + GROUP BY ์ ์ธ๋ฑ์ค ์ฌ์ฉ ๋ฐฉ์์ผ๋ก ์ฒ๋ฆฌํ ์ ์๊ฒ ๋๋ค.
ํ์ง๋ง ์ ์ฟผ๋ฆฌ๋ ๋ฒ์ ๋น๊ต์ด๊ธฐ ๋๋ฌธ์ COL_1 > 10 ์ ๋ง์กฑํ๋ ๋ ์ฝ๋๊ฐ ์ฌ๋ฌ ๊ฐ ์ผ ์ ์๊ธฐ ๋๋ฌธ์, 1๋ฒ์ ์ ๋ ฌ์ ํ ๋ ์ธ๋ฑ์ค๋ฅผ ์ฌ์ฉํ ์ ์๊ฒ ๋๊ณ , 2๋ฒ์ ๊ทธ๋๋ก ๋ชจ๋ ์ธ๋ฑ์ค๋ฅผ ์ฌ์ฉํ ์ ์๊ฒ ๋๋ค.
GROUP BY + ORDER BY ์ ์ ์ธ๋ฑ์ค
GROUP BY ์ ๊ณผ ORDER BY ์ ์ ๋ช ์๋ ์ปฌ๋ผ์ ์์์ ๋ด์ฉ์ด ๋ชจ๋ ๊ฐ์์ผ ์ธ๋ฑ์ค๋ฅผ ์ฌ์ฉํ ์ ์๋ค. ๋ง์ฝ ๋ ์ค ํ๋๋ผ๋ ์ธ๋ฑ์ค๋ฅผ ์ด์ฉํ ์ ์์ ๊ฒฝ์ฐ ๋ชจ๋ ์ธ๋ฑ์ค๋ฅผ ์ฌ์ฉํ ์ ์๋ค.
WHERE + GROUP BY + ORDER BY ์ ์ ์ธ๋ฑ์ค
์์ ๊ท์น์ด ๋ชจ๋ ์ ์ฉ๋๋ฉฐ, ๊ทธ ํ๋ฆ์ ์๋์ ๊ฐ๋ค.
WHERE ์ ๋น๊ต ์กฐ๊ฑด ์ฌ์ฉ ์ ์ฃผ์์ฌํญ
NULL ๋น๊ต
MySQL์์๋ NULL ๊ฐ๋ ํ๋์ ๊ฐ์ผ๋ก ์ธ์ ํ์ฌ ํฌํจ๋ ๋ ์ฝ๋๋ ์ธ๋ฑ์ค๋ก ๊ด๋ฆฌํ๋ค.(SQL ํ์ค์์๋ NULL ๊ฐ์ ๋น๊ตํ ์ ์๋ ๊ฐ์ผ๋ก ์ ์๋์ด ์์) ํ์ง๋ง ๋ชจ๋ ์ฟผ๋ฆฌ ์คํ ๊ณํ์์ NULL ๊ฐ์ ๋ ์ธ์ง ์ค์บ์ผ๋ก ์ฒ๋ฆฌํ์ง๋ ์๋๋ค.
1 / 2 ์ฟผ๋ฆฌ๋ ์ ์์ ์ผ๋ก ๋ ์ธ์ง ์ค์บ์ ์ฌ์ฉํ์ง๋ง, 3 / 4 ์ฟผ๋ฆฌ๋ ๋ ์ธ์ง ์ค์บ์ ์ฌ์ฉํ์ง ๋ชปํ๊ณ ํ ์ค์บ์ ์ฌ์ฉํ๊ฒ ๋๋ค.
๋ฌธ์์ด / ์ซ์ ๋น๊ต
๋ฌธ์์ด / ์ซ์ ์ปฌ๋ผ ๋น๊ต ์ ๋ฐ๋์ ๊ทธ ํ์ ์ ๋ง๋ ์์๊ฐ ์ฌ์ฉํด์ผ ์ธ๋ฑ์ค๋ฅผ ์ ์์ ์ผ๋ก ์ฌ์ฉํ ์ ์๋ค.
๋ ์ง ๋น๊ต
๋ ์ง๋ฅผ ์ ์ฅํ๋ ํ์ ์๋ DATETIME, DATE, TIMESTAMP, TIME ์ด ์กด์ฌํ๊ธฐ ๋๋ฌธ์ ๊ฐ๊ฐ ํ์ ์ ๋น๊ตํ ๋ ์ฃผ์ํด์ผ ํ๋ค.
DATE(DATETIME) - ๋ฌธ์์ด ๋น๊ต
๊ธฐ๋ณธ์ ์ผ๋ฌ ๋ฌธ์์ด ๊ฐ์ STR_TO_DATE
๋ฅผ ๋ช
์ํ์ง ์์๋ ์๋์ผ๋ก DATETIME ํ์
์ผ๋ก ๋ณํํ์ฌ ๋น๊ต๋ฅผ ์ํํ๊ฒ ๋๋ค.(์ธ๋ฑ์ค ๋ํ ์ ์ ์ ์ฉ)
์ด๋ ๊ฒ ์์๋ฅผ ๋ณํํ๋ ๊ฒ์ ์ธ๋ฑ์ค๋ฅผ ์ฌ์ฉํ๋๋ฐ์ ์ํฅ์ด ์์ง๋ง, ๋ ์ง ์ปฌ๋ผ์ DATE_FORMAT
, DATE_ADD
๋ฑ์ ํจ์๋ฅผ ์ฌ์ฉํ์ฌ ๋ณํํ๋ ๊ฒฝ์ฐ์๋ ์ธ๋ฑ์ค๋ฅผ ์ฌ์ฉํ ์ ์๋ค.
DATE - DATETIME ๋น๊ต
๋ณํ์ ๋ฐ๋ก ๋ช
์ํ์ง ์๋ ๊ฒฝ์ฐ์ DATE ์ปฌ๋ผ์ DATETIME ํ์
์ผ๋ก ๋ณํํ์ฌ ๋น๊ต๋ฅผ ์ํํ๊ฒ ๋๋ค.
2023-05-09
-> 2023-05-09 00:00:00
์ผ๋ก ๋ณํ๋๋๋ฐ, ํด๋น ํ์
๋ณํ์ ์ธ๋ฑ์ค ์ฌ์ฉ ์ฌ๋ถ์ ์ํฅ์ ์ฃผ์ง ์์ ์ฟผ๋ฆฌ ๊ฒฐ๊ณผ์๋ง ์ฃผ์๋ฅผ ํ๋ฉด ๋๋ค.
TIMESTAMP - DATETIME ๋น๊ต
DATETIME - TIMESTAMP ๋ณ๋ ํ์ ๋ณํ ์์ด ๋น๊ต ์ ๋ฌธ์ ์์ด ์๋ํ๋ ๊ฒ์ฒ๋ผ ๋ณด์ผ ์ ์์ง๋ง ์ค์ ๋ก๋ ๊ทธ๋ ์ง ์์ ์ ์๊ธฐ ๋๋ฌธ์ ์ฃผ์ํด์ผ ํ๋ค.
UNIX_TIMESTAMP ํจ์๋ ๋ด๋ถ์ ์ผ๋ก ๋จ์ ์ซ์ ๊ฐ์ ๋ถ๊ณผํ๊ธฐ ๋๋ฌธ์ ์ ์์ ์ผ๋ก DATETIME ํ์
์ผ๋ก ๋ณํ๋์ง ์์ ์ฌ๋ฐ๋ฅด์ง ์์ ๊ฒฐ๊ณผ๋ฅผ ๋ฐํํ๊ฒ ๋๋ค.
์ด๋ฐ ๊ฒฝ์ฐ์๋ FROM_UNIXTIME
ํจ์๋ฅผ ์ฌ์ฉํ์ฌ ํ์
๋ณํ์ ๋ช
์ํด์ผ ํ๋ค.
Short Circuit Evaluation
๊ธฐ๋ณธ์ ์ผ๋ก WHERE ์กฐ๊ฑด ์ค ์ธ๋ฑ์ค๊ฐ ์๋ ๊ฒฝ์ฐ์ ํด๋น ์ปฌ๋ผ์ ๋จผ์ ์กฐ๊ฑด ๊ฒ์ฌํ์ง๋ง, ์๋ ๊ฒฝ์ฐ์ WHERE์ ๋ช ์๋ ์์๋๋ก ์กฐ๊ฑด ๊ฒ์ฌ๋ฅผ ์ํํ๋ค. ๋๋ฌธ์ ๋ง์ ๋ฆฌ์์ค๊ฐ ์๋ชจํ๋ ์กฐ๊ฑด์ ๋์ค์ ๋ช ์ํ๋ฉด ๋ ๋น ๋ฅด๊ฒ ์ฟผ๋ฆฌ๋ฅผ ์ํํ ์ ์๋ค.
LIMIT n
์ฟผ๋ฆฌ ๊ฒฐ๊ณผ์์ ์ง์ ๋ ์์์ ์์นํ ๋ ์ฝ๋๋ง ๊ฐ์ ธ์ฌ ๋ ์ฌ์ฉํ๋ ๋ฌธ๋ฒ์ด๋ค. MySQL์ LIMIT์ WHERE ์กฐ๊ฑด์ด ์๋๊ธฐ ๋๋ฌธ์ ํญ์ ์ฟผ๋ฆฌ์ ๋ง์ง๋ง์ ์คํ๋๋ค.
LIMIT์ ํ์ํ ๋ ์ฝ๋ ๊ฑด์๊ฐ ์กฐํ๋๋ฉด ์ฆ์ ์ฟผ๋ฆฌ๋ฅผ ์ข ๋ฃํ๊ฒ ๋๋๋ฐ, ์ฟผ๋ฆฌ์ ๋ฐ๋ผ ์ฑ๋ฅ ํฅ์์ ๊ธฐ๋ํ ์ ์๋ค.
์ธ๋ฑ์ค ์ฒ๋ฆฌ ๋์ง ์์ GROUP BY / ORDER BY: ๋ชจ๋ ๋ ์ฝ๋๋ฅผ ์ฝ์ด์ผ ํ๋ฏ๋ก ์ฑ๋ฅ ํฅ์ ๋ฏธ๋ฏธ
DISTINCT: ์ ๋ํฌํ ๋ ์ฝ๋ ๊ฑด์๊ฐ LIMIT์ ๋ช ์๋ ๊ฐ๋ณด๋ค ํฐ ๊ฒฝ์ฐ ์ฑ๋ฅ ํฅ์ ๊ธฐ๋(ํ ์ด๋ธ์ ์ฝ๋ ๋์ค ์ค๋จ)
์์ ํด๋นํ์ง ์์: ํฐ ์ฑ๋ฅ ํฅ์ ๊ธฐ๋ ๊ฐ๋ฅ
ํ์ด์ง
์ง๊ด์ ์ผ๋ก ํ์ด์งํ๋ ๋ฐฉ๋ฒ์ LIMIT์ ํตํด ํ์ด์ง ๋ฒํธ์ ํ์ด์ง ๋น ๋ ์ฝ๋ ์๋ฅผ ๊ณฑํ ๊ฐ์ LIMIT์ ๋ช ์ํ๋ ๊ฒ์ด๋ค.
์ผ๋ฐ์ ์ธ LIMIT ์ฌ์ฉ
์ ์ ์์ ๋ฐ์ดํฐ์์๋ ๋ฌธ์ ๊ฐ ๋์ง ์์ง๋ง ์ฑ๋ฅ์ ์ํฅ์ ์ค ์ ๋์ ์์ ๋ฐ์ดํฐ๋ฅผ ์กฐํํ๋ ๊ฒฝ์ฐ ํด๋น ํ์ด์ง๊น์ง์ ๋ชจ๋ ๋ ์ฝ๋๋ฅผ ์ฝ์ด์ผ ํ๊ธฐ ๋๋ฌธ์ ์ฑ๋ฅ์ ์ํฅ์ ์ค ์ ์๋ค.
ํฌ์ธํฐ(์ปค์) ๊ฐ๋ ์ ์ฌ์ฉํ ํ์ด์ง
์์ ๊ฐ์ด ํฌ์ธํฐ(์ปค์) ๊ฐ๋ ์ ์ฌ์ฉํ๋ฉด ๋ฐ์ดํฐ ๊ฑด์์ ๋ฐ๋ผ ๋น์ฝ์ ์ธ ์ฑ๋ฅ ํฅ์์ ๊ธฐ๋ํ ์ ์๋ค.
COUNT()
๊ฒฐ๊ณผ ๋ ์ฝ๋์ ๊ฑด์๋ฅผ ๋ฐํํ๋ ํจ์
๋ด๋ถ ์ธ์
์ปฌ๋ผ๋ช /
*
/1
์ฌ์ฉ ๊ฐ๋ฅ*
๋ SELECT ์ ์์ ์ฌ์ฉ๋๋ ๊ฒ์ฒ๋ผ ๋ชจ๋ ์ปฌ๋ผ์ ๊ฐ์ ธ์ค๋ ๊ฒ์ ์๋ฏธํ๋ ๊ฒ์ด ์๋, ์ตํฐ๋ง์ด์ ๊ฐ ์ต์ ํํ์ฌ ๊ฐ์ฅ ๋น ๋ฅด๊ฒ ์ฒ๋ฆฌํ ์ ์๋ ์ปฌ๋ผ ์ฌ์ฉ์ฌ์ฉ ๊ฐ๋ฅํ ๊ฐ์ฅ ์์ ์ธ์ปจ๋๋ฆฌ ์ธ๋ฑ์ค๋ฅผ ํ์ํ์ฌ ์ฒ๋ฆฌ(์๋ ๊ฒฝ์ฐ, ํด๋ฌ์คํฐ๋ PK ์ธ๋ฑ์ค ์ฌ์ฉ)
๋ง์ฝ ์ธ์๋ก ์ปฌ๋ผ์ ๋ฃ์ ๊ฒฝ์ฐ ํด๋น ์ปฌ๋ผ์ด NULL์ด ์๋ ๋ ์ฝ๋๋ง ์นด์ดํธ
WHERE ์กฐ๊ฑด
WHERE ์กฐ๊ฑด์ด ์๋ ๊ฒฝ์ฐ ํด๋ฌ์คํฐ ์ธ๋ฑ์ค๋ฅผ ์์ฐจ์ ์ผ๋ก ์ค์บํ์ฌ ๋ ์ฝ๋ ๊ฑด์๋ฅผ ์นด์ดํธ(MyISAM ์์ง: ๋ฉํ ๋ฐ์ดํฐ๋ฅผ ์ฌ์ฉ)
์กฐ๊ฑด์ / GROUP BY ๋ ๋ค ์๋ ๊ฒฝ์ฐ ์ฟผ๋ฆฌ ์ต์ ํ๋ฅผ ํตํด ๋ ์ฝ๋ ๊ฑด์๋ฅผ ์ต์ ํํ์ฌ ๋น ๋ฅด๊ฒ ๊ฐ์ ธ์ฌ ์ ์์
**InnoDB์์ ๋ฉํ ๋ฐ์ดํฐ๋ฅผ ์ฌ์ฉํ์ง ์๋ ์ด์ : MVCC ์ง์๊ณผ ๋ฐ์ดํฐ ๋ฌด๊ฒฐ์ฑ์ ์ํด ํธ๋์ญ์ ๋จ์๋ก ๋ฐ์ดํฐ๋ฅผ ๊ด๋ฆฌํ๊ธฐ ๋๋ฌธ
์กฐ๊ฑด์ด ์๋ ๊ฒฝ์ฐ์ WHERE ์กฐ๊ฑด์ ์ผ์นํ๋ ๋ ์ฝ๋ ์กฐํํ๊ธฐ ๋๋ฌธ์ ์ผ๋ฐ์ ์ธ DBMS์ ๋์ผํ๊ฒ ์ฒ๋ฆฌ
ORDER BY
๊ฐ์ ์กฐํ๋ฅผ ํ๋ ๋ฐ์ ์ ๋ ฌ์ด ํ์ํ์ง ์๊ธฐ ๋๋ฌธ์ ๋ถํ์ํ ์ฑ๋ฅ ์ ํ๋ฅผ ์ ๋ฐํ ์ ์์(MySQL 8.0 ๋ฏธ๋ง)
MySQL 8.0 ์ด์๋ถํฐ๋ ORDER BY๋ฅผ ์ฌ์ฉํ๋๋ผ๋ ์ตํฐ๋ง์ด์ ์์ ์ต์ ํ(๋ฌด์)ํ์ฌ ์ฑ๋ฅ ์ ํ๋ฅผ ๋ฐฉ์ง
JOIN()
์กฐ์ธ ์์ ์์ ๋๋ผ์ด๋น ํ ์ด๋ธ์ ์ฝ์ ๋๋ ์ธ๋ฑ์ค ํ์ ์์ ์ ํ ๋ฒ๋ง ์ํํ๊ณ , ๋๋ฆฌ๋ธ ํ ์ด๋ธ์ ์ฝ์ ๋๋ ์ธ๋ฑ์ค ํ์ ์์ ์ ๋ ์ฝ๋ ๊ฑด์๋งํผ ์ํํ๊ฒ ๋๋ค. ๋๋ฌธ์ JOIN ์์์ ์ธ๋ฑ์ค ์ ๋ฌด์ ๋ฐ๋ผ ์ฑ๋ฅ์ ํฌ๊ฒ ์ํฅ์ ์ฃผ๊ฒ ๋๋๋ฐ, ์ด๋ฅผ ์ตํฐ๋ง์ด์ ๊ฐ ์ต์ ํํ์ฌ ์ฑ๋ฅ ์ ํ๋ฅผ ๋ฐฉ์งํ๋ ์ชฝ์ผ๋ก ๋์ํ๋ค.
์์ ์ฟผ๋ฆฌ๊ฐ ์กด์ฌํ ๋ ์ตํฐ๋ง์ด์ ๋ ์๋์ ๊ฐ์ด ๋์ํ๋ค.(๋ฌด์กฐ๊ฑด ์๋์ ๊ฐ์ด ๋์ํ๋ ๊ฒ์ ์๋์ง๋ง ๋๋ถ๋ถ์ ๊ฒฝ์ฐ ์๋์ ๊ฐ์ด ๋์ํ๋ค.)
emp_no ์ธ๋ฑ์ค | dept_no ์ธ๋ฑ์ค | ์กฐ์ธ ์์์ ์ตํฐ๋ง์ด์ ๋์ |
---|---|---|
O | O | ์ด๋ ํ ์ด๋ธ์ ๋๋ผ์ด๋น์ผ๋ก ์ ํํ๋ ์ธ๋ฑ์ค๋ฅผ ์ด์ฉํด ๋๋ฆฌ๋ธ ํ ์ด๋ธ ์กฐํ๋ฅผ ๋น ๋ฅด๊ฒ ์ฒ๋ฆฌํ๊ธฐ ๋๋ฌธ์ ํต๊ณ ์ ๋ณด๋ฅผ ์ด์ฉํด ์ ์ ํ ์ ํ |
O | X | dept_emp ํ ์ด๋ธ์ ๋๋ผ์ด๋น ํ ์ด๋ธ๋ก ์ ํํ์ฌ ํ ์ด๋ธ ํ ์ค์บ์ ํ ๋ฒ๋ง ์ํํ ์ ์๋๋ก ํ๊ณ , employees ํ ์ด๋ธ์ ๋๋ฆฌ๋ธ ํ ์ด๋ธ๋ก ์ ํํ์ฌ ์ธ๋ฑ์ค๋ฅผ ์ด์ฉํด ์กฐํํ ์ ์๋๋ก ํจ |
X | O | ์์ ๋ฐ๋๋ก ๋์ |
X | X | ์ด๋ค ๊ฒฝ์ฐ์์๋ ๋๋ฆฌ๋ธ ํ ์ด๋ธ์ ํ ์ค์บ์ด ๋ฐ์ํ๊ธฐ ๋๋ฌธ์ ๋ ์ฝ๋ ๊ฑด์๊ฐ ์ ์ ํ ์ด๋ธ์ ๋๋ผ์ด๋น ํ ์ด๋ธ๋ก ์ ํํ๊ฒ ๋๋ค. |
๋ํ WHERE ์กฐ๊ฑด๊ณผ ๋ง์ฐฌ๊ฐ์ง๋ก JOIN ์กฐ๊ฑด์์์ ๋น๊ต ๋์ ์ปฌ๋ผ์ด ์๋ก ๋์ผํด์ผ ์ธ๋ฑ์ค๋ฅผ ํจ์จ์ ์ผ๋ก ์ฌ์ฉํ ์ ์๋ค.(์๋ ๊ฒฝ์ฐ ํ ์ด๋ธ ํ ์ค์บ์ด ๋ฐ์ํ ์ ์๋ค.)
์ง์ฐ ์กฐ์ธ(Delayed Join)
์กฐ์ธ์ ์ฌ์ฉํ์ฌ GROUP BY, ORDER BY ๋ฑ์ ์์ ์ ์ํํ ๋, ์ธ๋ฑ์ค๋ฅผ ์ฌ์ฉํ๊ณ ์๋ค๋ฉด ์ตํฐ๋ง์ด์ ๊ฐ ์ต์ ์ผ๋ก ์ฒ๋ฆฌํ๊ณ ์์ ํ๋ฅ ์ด ๋๋ค. ํ์ง๋ง ๊ทธ๋ ์ง ์์ ๊ฒฝ์ฐ์ ๋จผ์ ์กฐ์ธ์ ์ํํ๊ณ GROUP BY, ORDER BY ๋ฑ์ ์์ ์ ์ํํ๊ฒ ๋์ด ์๋์ ๋ฌธ์ ๊ฐ ๋ฐ์ํ ์ ์๋ค.
์กฐ์ธ์ ํ ์๋ก ๋ ์ฝ๋ ๊ฑด์์ ๋ ์ฝ๋ ์์ฒด์ ํฌ๊ธฐ๊ฐ ๋์ด๋จ
GROUP BY, ORDER BY ๋ฑ์ ์์ ์ ์ํํ ๋ ๋ ์ฝ๋ ๊ฑด์๊ฐ ๋ง๊ฑฐ๋ ๋ ์ฝ๋ ์์ฒด์ ํฌ๊ธฐ๊ฐ ํฌ๋ค๋ฉด ์ฑ๋ฅ ์ ํ ๋ฐ์
๋๋ฌธ์, ๋จผ์ GROUP BY, ORDER BY ๋ฑ์ ์์ ์ ์ํํ๊ณ ์กฐ์ธ์ ์ํํ๋ ๊ฒ์ด ์ข๋ค.
์ง์ฐ ์กฐ์ธ ์ ์ฉ ์
employees ํ ์ด๋ธ์ ๋๋ผ์ด๋น ํ ์ด๋ธ๋ก ์ ํ
10001 ~ 13000 ์ฌ์ด์ ๋ ์ฝ๋๋ฅผ ์กฐํ
salaries ํ ์ด๋ธ๊ณผ ์กฐ์ธ(์กฐ์ธ ํ ๋ ์ฝ๋ ๊ฑด์๊ฐ ์ฆ๊ฐ)
์ ๊ฒฐ๊ณผ๋ฅผ ์์ํ ์ด๋ธ์ ์ ์ฅ
GROUP BY ์์ ์ํํ์ฌ ์ต๋ 3000๊ฐ์ ๋ ์ฝ๋๋ก ์ค์ด๋ฆ
ORDER BY ์์ ์ํ
LIMIT 10์ผ๋ก ์ต์ข ๊ฒฐ๊ณผ ๋ฐํ
์ง์ฐ ์กฐ์ธ ์ ์ฉ ํ
salaries ํ ์ด๋ธ์์ 10001 ~ 13000 ์ฌ์ด์ ๋ ์ฝ๋๋ฅผ ์กฐํ
GROUP BY / ORDER BY / LIMIT ์์ ์ ์ํํ์ฌ ์ต๋ 10๊ฐ์ ๋ ์ฝ๋๋ก ์ค์ด๋ฆ
employees ํ ์ด๋ธ๊ณผ ์กฐ์ธ
์์ ์์๋ ์ง์ฐ ์กฐ์ธ์ ์ ์ฉํ์ ๋ ์ฑ๋ฅ์ด ํฅ์๋๋ ์์์ด์ง๋ง, ์ง์ฐ ์กฐ์ธ์ ์ ์ฉํ์ ๋ ์ฑ๋ฅ์ด ์ ํ๋๋ ๊ฒฝ์ฐ๋ ์กด์ฌํ๋ค. ์ง์ฐ ์กฐ์ธ์ ์ ์ฉํ์ฌ ์ฑ๋ฅ ํฅ์์ ๊ธฐ๋ํ๋ ค๋ฉด ์๋์ ์กฐ๊ฑด์ ๋ง์กฑํด์ผ ํ๋ค.
LEFT(OUTER) JOIN์ธ ๊ฒฝ์ฐ
๋๋ผ์ด๋น ํ ์ด๋ธ๊ณผ ๋๋ฆฌ๋ธ ํ ์ด๋ธ์ 1:1 ๋๋ M:1 ๊ด๊ณ์ฌ์ผ ํ๋ค.
INNER JOIN์ธ ๊ฒฝ์ฐ
๋๋ผ์ด๋น ํ ์ด๋ธ๊ณผ ๋๋ฆฌ๋ธ ํ ์ด๋ธ์ด 1:1 ๋๋ M:1 ๊ด๊ณ์ฌ์ผ ํ๋ค.
๋๋ผ์ด๋น ํ ์ด๋ธ์ ์๋ ๋ ์ฝ๋๋ ๋๋ฆฌ๋ธ ํ ์ด๋ธ์ ๋ชจ๋ ์กด์ฌํด์ผ ํ๋ค.
๋ํฐ๋ด ์กฐ์ธ(Lateral Join)
MySQL 8.0๋ถํฐ ์ง์ํ๋ ๊ธฐ๋ฅ์ผ๋ก ํน์ ๊ทธ๋ฃน๋ณ๋ก ์๋ธ์ฟผ๋ฆฌ๋ฅผ ์คํํด์ ๊ฒฐ๊ณผ๋ฅผ ๋ฐํํ๋ ๊ธฐ๋ฅ์ด๋ค.
์ฌ๊ธฐ์ ํน์ง์ LATERAL ํค์๋๋ฅผ ์ฌ์ฉํ์ฌ ์๋ธ์ฟผ๋ฆฌ๋ฅผ ์ฌ์ฉํ๊ณ ์๋๋ฐ, ๊ทธ ๋ด๋ถ์์ ์ธ๋ถ ์ฟผ๋ฆฌ์ FROM ์ ์ ์ ์๋ ํ ์ด๋ธ์ ์ปฌ๋ผ์ ์ฐธ์กฐํ ์ ์๋ค๋ ๊ฒ์ด๋ค. LATERAL ํค์๋๋ฅผ ๊ฐ์ง ์๋ธ์ฟผ๋ฆฌ๋ ์กฐ์ธ ์์์ ํ์์๋ก ๋ฐ๋ฆฌ๊ณ , ์ธ๋ถ ์ฟผ๋ฆฌ์ ๊ฒฐ๊ณผ ๋ ์ฝ๋ ๋จ์๋ก ์์ ํ ์ด๋ธ์ด ์์ฑ๋์ด ์ฒ๋ฆฌ๋๋ค.
ORDER BY
ORDER BY๋ ๋ ์ฝ๋๋ฅผ ์ด๋ค ์์๋ก ์ ๋ ฌํ์ง ๊ฒฐ์ ํ๋ ์ ์ธ๋ฐ, ๋ช ์ํ์ง ์์ผ๋ฉด ์๋์ ๊ฐ์ด ์ ๋ ฌ๋์ด ๋ฐํ๋๋ค.
์ธ๋ฑ์ค๋ฅผ ์ฌ์ฉํ์ฌ ์กฐํ ๋ ๊ฒฝ์ฐ์ ์ธ๋ฑ์ค์ ์ ๋ ฌ ์์๋๋ก ๋ฐํ
InnoDB์์ ํ ํ ์ด๋ธ ์ค์บ์ ํ ๊ฒฝ์ฐ ๊ธฐ๋ณธ์ ์ผ๋ก ํ๋ผ์ด๋จธ๋ฆฌ ํค ์์๋๋ก ๋ฐํ
SELECT ์ฟผ๋ฆฌ๊ฐ ์์ ํ ์ด๋ธ์ ์ฌ์ฉํ์ฌ ์กฐํ๋์ ๊ฒฝ์ฐ์ ๋ ์ฝ๋ ์์๋ฅผ ์์ธกํ๊ธฐ ์ด๋ ค์
ORDER BY 2
์ ๊ฐ์ด ์ปฌ๋ผ์ ์๋ฒ์ ์ง์ ํ์ฌ ์ ๋ ฌํ ์๋ ์์ง๋ง, ์ด๋ ๊ฐ๋
์ฑ์ด ๋จ์ด์ง๊ณ ์ ์ง๋ณด์๊ฐ ์ด๋ ค์์ง๊ธฐ ๋๋ฌธ์ ์ฌ์ฉํ์ง ์๋ ๊ฒ์ด ์ข๋ค.
์ฐธ๊ณ ์๋ฃ
Last updated