์ ๋ฌด์ ๋ฐ๋ก ์ฐ๋ SQL ํ๋ 2 - SQL ํ๋ ์ค์ต (1)
์ง๋ ํฌ์คํ ์์ SQL ํ๋ ์ด๋ก ์ ๋ํด ์ดํด๋ณด์๋๋ฐ์, ์ด๋ฒ ํฌ์คํ ์์๋ ์ค์ ์ฌ๋ฌ ํ ์ด๋ธ์ ๋ฐ์ดํฐ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์ฟผ๋ฆฌ์ ๋ฌธ์ ์ ์ ํ์ ํ๊ณ , ํ๋ํ์ฌ ๊ฐ์ ํด ๋ณด๊ฒ ์ต๋๋ค.
(์ค์ ํ๋ ์ SQL ๋ฌธ์ ํ์ธํ์ฌ ๋ฌด์์ด ๋ฌธ์ ์ธ์ง ํ์ ํด๋ณด๊ณ , ์ง์ ๊ฐ์ ํด๋ณด๊ณ ํ๋ ํ SQL ๋ฌธ์ ํ์ธํ๋ ๋ฐฉ์๋ ์ข์ ๊ฒ ๊ฐ์ต๋๋ค.)
์ ์ฑ SQL ํ๋์ผ๋ก ์ด๋ณด์ ํ์ถํ๊ธฐ
์ค๋ฌด์ ์ธ SQL ํ๋ ์ ์ฐจ ์ดํดํ๊ธฐ
1. SQL ๋ฌธ ์คํ ๊ฒฐ๊ณผ & ํํฉ ํ์
- ๊ฒฐ๊ณผ ๋ฐ ์์์๊ฐ ํ์ธ
- ์กฐ์ธ / ์๋ธ์ฟผ๋ฆฌ ๊ตฌ์กฐ
- ๋๋ฑ / ๋ฒ์ ์กฐ๊ฑด
2. ๊ฐ์์
- ํ ์ด๋ธ์ ๋ฐ์ดํฐ ๊ฑด์
- SELECT ์ ์ปฌ๋ผ ๋ถ์
- ์กฐ๊ฑด์ ์ปฌ๋ผ ๋ถ์
- ๊ทธ๋ฃจํ / ์ ๋ ฌ ์ปฌ๋ผ
3. ๋น๊ฐ์์
- ์คํ๊ณํ
- ์ธ๋ฑ์ค ํํฉ
- ๋ฐ์ดํฐ ๋ณ๊ฒฝ ์ถ์ด
- ์ ๋ฌด์ ํน์ง
4. ํ๋ ๋ฐฉํฅ ํ๋จ & ๊ฐ์ / ์ ์ฉ (ํ ์คํธ)
SQL ๋ฌธ ๋จ์ ์์ ์ผ๋ก ์ฐฉํ ์ฟผ๋ฆฌ ๋ง๋ค๊ธฐ

์ ๋ฐ์ดํฐ ์ธํ ์ ์๋ ๋ ํฌ์งํ ๋ฆฌ์ sql ํ์ผ์ ํตํด ์ค์ ํ ์ ์์ต๋๋ค.
https://github.com/7ieon/SQLtune
GitHub - 7ieon/SQLtune
Contribute to 7ieon/SQLtune development by creating an account on GitHub.
github.com
ํ ์ด๋ธ ๋ฐ์ดํฐ ๊ฑด์
No | ํ ์ด๋ธ ๋ช | ๋ฐ์ดํฐ ๊ฑด์ |
1 | ๊ธ์ฌ | 2,844,047 |
2 | ๋ถ์ | 9 |
3 | ๋ถ์๊ด๋ฆฌ์ | 24 |
4 | ๋ถ์์ฌ์_๋งคํ | 331,603 |
5 | ์ฌ์ | 300,024 |
6 | ์ฌ์์ถ์ ๊ธฐ๋ก | 660,000 |
7 | ์ง๊ธ | 443,308 |
ํ ์ด๋ธ ์ธ๋ฑ์ค ๋ชฉ๋ก
ํ ์ด๋ธ๋ช | ํค ์ ํ | ํค๋ช | ํค_๊ตฌ์ฑ์ด |
๊ธ์ฌ | PK | PRIMARY KEY | ์ฌ์๋ฒํธ + ์์์ผ์ |
INDEX | I_์ฌ์ฉ์ฌ๋ถ | ์ฌ์ฉ์ฌ๋ถ | |
๋ถ์ | PK | PRIMARY KEY | ๋ถ์๋ฒํธ |
UNIQUE INDEX | UI_๋ถ์๋ช | ๋ถ์๋ช | |
๋ถ์๊ด๋ฆฌ์ | PK | PRIMARY KEY | ์ฌ์๋ฒํธ + ๋ถ์๋ฒํธ |
INDEX | I_๋ถ์๋ฒํธ | ๋ถ์๋ฒํธ | |
๋ถ์์ฌ์_๋งคํ | PK | PRIMARY KEY | ์ฌ์๋ฒํธ + ๋ถ์๋ฒํธ |
INDEX | I_๋ถ์๋ฒํธ | ๋ถ์๋ฒํธ | |
์ฌ์ | PK | PRIMARY KEY | ์ฌ์๋ฒํธ |
INDEX | I_์ ์ฌ์ผ์ | ์ ์ฌ์ผ์ | |
INDEX | I_์ฑ๋ณ_์ฑ | ์ฑ๋ณ + ์ฑ | |
์ฌ์์ถ์ ๊ธฐ๋ก | PK | PRIMARY KEY | ์๋ฒ + ์ฌ์๋ฒํธ |
INDEX | I_์ถ์ ๋ฌธ | ์ถ์ ๋ฌธ | |
INDEX | I_์ง์ญ | ์ง์ญ | |
INDEX | I_์๊ฐ | ์ ์ถ์ ์๊ฐ | |
์ง๊ธ | PK | PRIMARY KEY | ์ฌ์๋ฒํธ + ์ง๊ธ๋ช + ์์์ผ์ |
1. ๊ธฐ๋ณธ ํค๋ฅผ ๋ณํํ๋ ๋์ SQL ๋ฌธ
ํ๋ ์ SQL, ์คํ ๊ณํ
SELECT *
FROM ์ฌ์
WHERE SUBSTRING(์ฌ์๋ฒํธ, 1, 4) = 1100
AND LENGTH(์ฌ์๋ฒํธ) = 5;

- type = ALL ์ด๋ฏ๋ก ํ ์ค์บ ๋ฐฉ์์ผ๋ก ์ธ๋ฑ์ค๋ฅผ ์ฌ์ฉํ์ง ์๊ณ ํ ์ด๋ธ์ ๋ฐ๋ก ์ ๊ทผ ํฉ๋๋ค.
- ์ฌ์ ํ ์ด๋ธ์ ์ ์ฒด ๋ฐ์ดํฐ๊ฐ ์ฝ 30๋ง๊ฑด ์ด๋ฏ๋ก, ๊ฑฐ์ ๋ชจ๋ ๋ฐ์ดํฐ์ ์ ๊ทผํฉ๋๋ค.
ํ๋ ํ SQL, ์คํ ๊ณํ
SELECT *
FROM ์ฌ์
WHERE ์ฌ์๋ฒํธ BETWEEN 11000 AND 11009

- ๊ธฐ๋ณธ ํค (์ฌ์๋ฒํธ)๋ฅผ ๊ฐ๊ณต ์์ด ๋ฒ์ ๊ฒ์์ ํ์ฉํ์ฌ ๊ธฐ๋ณธ ํค, ์ธ๋ฑ์ค๋ฅผ ํ์ฉํฉ๋๋ค.
2. ์ฌ์ฉํ์ง ์๋ ํจ์๋ฅผ ํฌํจํ๋ ๋์ SQL ๋ฌธ
ํ๋ ์ SQL, ์คํ ๊ณํ
SELECT IFNULL(์ฑ๋ณ, 'NO DATA') AS ์ฑ๋ณ, COUNT(1) ๊ฑด์
FROM ์ฌ์
GROUP BY IFNULL(์ฑ๋ณ, 'NO DATA');

- Extra ํญ๋ชฉ์ด Using temporary ์ด๋ฏ๋ก ์์ ํ ์ด๋ธ์ ์์ฑํฉ๋๋ค.
ํ๋ ํ SQL, ์คํ ๊ณํ
SELECT ์ฑ๋ณ, COUNT(1) ๊ฑด์
FROM ์ฌ์
GROUP BY ์ฑ๋ณ;

- Extra ํญ๋ชฉ์ ์์ ํ ์ด๋ธ(Using temporary) ์์ด ์ธ๋ฑ์ค๋ง ์ฌ์ฉํ์ฌ ๋ฐ์ดํฐ๋ฅผ ์ถ์ถํฉ๋๋ค.
- ๋จ, ์ฑ๋ณ ์ปฌ๋ผ์๋ NOT NULL์ด๊ณ , NULL ๋ฐ์ดํฐ๊ฐ ์๋ค๋ ๊ฐ์ ํ์ ํ๋ํ ์ฟผ๋ฆฌ์ ๋๋ค.
3. ํ๋ณํ์ผ๋ก ์ธ๋ฑ์ค๋ฅผ ํ์ฉํ์ง ๋ชปํ๋ ๋์ SQL ๋ฌธ
ํ๋ ์ SQL, ์คํ ๊ณํ
SELECT COUNT(1) FROM ๊ธ์ฌ WHERE ์ฌ์ฉ์ฌ๋ถ = 1;

- filtered ํญ๋ชฉ์ด 10์ด๋ฏ๋ก, MySQL ์์ง์ผ๋ก ๊ฐ์ ธ์จ ๋ฐ์ดํฐ ์ค 10%๋ฅผ ์ถ์ถํด์ ์ต์ข ๋ฐ์ดํฐ๋ฅผ ์ถ๋ ฅํจ์ ์ ์ ์์ต๋๋ค.
- rows์ ํด๋นํ๋ 2,838,398๊ฑด์ ๋ฐ์ดํฐ ์ค 10%์ ํด๋นํ๋ ์ฝ 3๋ง ๊ฑด์ ๋ฐ์ดํฐ๊ฐ ์ต์ข ์ถ๋ ฅ๋๋ฆฌ๋ผ๊ณ ์์ธกํ ์ ์์ต๋๋ค.
- ๋๋ต 0.3์ด
ํ๋ ํ SQL, ์คํ ๊ณํ
SELECT COUNT(1) FROM ๊ธ์ฌ WHERE ์ฌ์ฉ์ฌ๋ถ = '1';

- ์ฌ์ฉ์ฌ๋ถ ์ด์ ๋ฌธ์ํ char(1) ๋ฐ์ดํฐ ์ ํ์ผ๋ก ๊ตฌ์ฑ๋์ด์, ์ด์ ์ฟผ๋ฆฌ์์๋ ์ซ์ ์ ํ์ผ๋ก ์จ์ ๋ฐ์ดํฐ์ ์ ๊ทผํ์ผ๋ฏ๋ก DBMS ๋ด๋ถ์ ๋ฌต์์ ํ๋ณํ์ด ๋ฐ์ํ๊ณ , ๊ทธ ๊ฒฐ๊ณผ ์ธ๋ฑ์ค๋ฅผ ์ ๋๋ก ํ์ฉํ์ง ๋ชปํ๊ณ ์ ์ฒด ๋ฐ์ดํฐ๋ฅผ ์ค์บํ์์ต๋๋ค.
- ๋๋ต 0.02์ด
์ค๋ผํด์ ๊ฒฝ์ฐ, ํน์ ๋ฒ์ ์ด์(?) ์์๋ ์์ ๊ฐ์ ๋ฌธ์ ๊ฐ ๋ฐ์ํ์ง ์๊ฒ ์๋์ผ๋ก ํ๋ณํ์ ์ฒ๋ฆฌํด์ฃผ๋ ๊ธฐ๋ฅ์ด ์์ด์ ์์ ๊ฐ์ ๋ฌธ์ ๊ฐ ๋ฐ์ํ์ง ์์๋ ๊ฒ์ผ๋ก ๊ธฐ์ต์ ํ๋๋ฐ, ํ์คํ์ง๋ ์์ต๋๋ค.
4. ๋ค์ ์ฟผ๋ฆฌ๋ฅผ UNION ์ฐ์ฐ์๋ก๋ง ํฉ์น๋ ๋์ SQL ๋ฌธ
ํ๋ ์ SQL, ์คํ ๊ณํ
SELECT 'M' AS ์ฑ๋ณ, ์ฌ์๋ฒํธ
FROM ์ฌ์
WHERE ์ฑ๋ณ = 'M'
AND ์ฑ = 'Baba'
UNION
SELECT 'F' AS ์ฑ๋ณ, ์ฌ์๋ฒํธ
FROM ์ฌ์
WHERE ์ฑ๋ณ = 'F'
AND ์ฑ = 'Baba';

- id๊ฐ 1, 2์ธ ํ์ ์ฌ์ ํ ์ด๋ธ์ ๋ํด I_์ฑ๋ณ_์ฑ ์ธ๋ฑ์ค๋ฅผ ํ์ฉํฉ๋๋ค.
- id๊ฐ 3์ธ ํ์ id๊ฐ 1, 2์ธ ํ์ ๊ฒฐ๊ณผ๋ฅผ ํตํฉํ์ฌ ์ค๋ณต์ ์ ๊ฑฐํ๋ ์์ ์ ํฉ๋๋ค. ์ฌ๊ธฐ์ ์์ ํ ์ด๋ธ(Using temporary)์ ์์ฑํ๊ณ ๊ทธ ๋ด๋ถ์์ ๊ฐ ๊ฒฐ๊ณผ์ UNION ์ฐ์ฐ ์์ ์ ์ํํ๋ฆฌ๋ผ ์์ธกํ ์ ์์ต๋๋ค.
ํ๋ ํ SQL, ์คํ ๊ณํ
SELECT 'M' AS ์ฑ๋ณ, ์ฌ์๋ฒํธ
FROM ์ฌ์
WHERE ์ฑ๋ณ = 'M'
AND ์ฑ = 'Baba'
UNION ALL
SELECT 'F' AS ์ฑ๋ณ, ์ฌ์๋ฒํธ
FROM ์ฌ์
WHERE ์ฑ๋ณ = 'F'
AND ์ฑ = 'Baba';

- ๋จ์ํ UNION -> UNION ALL ์ผ๋ก ๋ณ๊ฒฝํฉ๋๋ค.
- ์ฒซ ๋ฒ์งธ SELECT์ ๋ ๋ฒ์งธ SELECT์ ๊ฒฐ๊ณผ ๋ฐ์ดํฐ๊ฐ ์ค๋ณต๋์ง ์์ผ๋ฏ๋ก, ์ค๋ณต ์ ๊ฑฐํ๋ ์์ ์ด ํ์ํ์ง ์์ต๋๋ค.
- ํ๋ ์ ์คํ ๊ณํ๊ณผ๋ ๋ฌ๋ฆฌ ์ธ ๋ฒ์งธ ์ถ๊ฐ ํ(Using temporary)์ ํ์ํ์ง ์์ต๋๋ค.
5. ์ธ๋ฑ์ค ๊ณ ๋ ค ์์ด ์ด์ ์ฌ์ฉํ๋ ๋์ SQL ๋ฌธ
ํ๋ ์ SQL, ์คํ ๊ณํ
SELECT ์ฑ, ์ฑ๋ณ, COUNT(*) AS ์นด์ดํธ
FROM ์ฌ์
GROUP BY ์ฑ, ์ฑ๋ณ;

- I_์ฑ๋ณ_์ฑ ์ธ๋ฑ์ค๋ฅผ ํ์ฉํ๊ณ , ์์ ํ ์ด๋ธ (Using temporary)์ ์์ฑํ์ฌ ์ฑ๊ณผ ์ฑ๋ณ์ ๊ทธ๋ฃจํํด ์นด์ดํธ ์ฐ์ฐ์ ์ํํฉ๋๋ค.

I_์ฑ๋ณ_์ฑ ์ธ๋ฑ์ค๋ ์ฑ๋ณ๊ณผ ์ฑ ์์ผ๋ก ์์ฑ๋ ์ธ๋ฑ์ค๋ก, ์ฑ๋ณ ๊ธฐ์ค์ผ๋ก ์ ๋ ฌ๋ ๋ค ์ฑ ๊ธฐ์ค์ผ๋ก ์ ๋ ฌ๋์์ต๋๋ค.
ํ๋ ํ SQL, ์คํ ๊ณํ
SELECT ์ฑ, ์ฑ๋ณ, COUNT(*) AS ์นด์ดํธ
FROM ์ฌ์
GROUP BY ์ฑ๋ณ, ์ฑ;

- ํ๋ ํ ์คํ ๊ณํ์์๋ ๋ณ๋๋ก ์์ ํ ์ด๋ธ์ ์์ฑํ์ง ์๊ณ ๋ ์์ ์ ์ํํฉ๋๋ค. (์ธ๋ฑ์ค ํ์ฉ, ์ฑ๋ณ -> ์ฑ)
- ํ๋ ์ ์์ ์๊ฐ(0.3์ด) -> ํ๋ ํ ์์ ์๊ฐ(0.03์ด)
6. ๋๋ฑ ์กฐ๊ฑด์ผ๋ก ์ธ๋ฑ์ค๋ฅผ ์ฌ์ฉํ๋ ๋์ SQL ๋ฌธ
ํ๋ ์ SQL, ์คํ ๊ณํ
SELECT * FROM ์ฌ์์ถ์
๊ธฐ๋ก WHERE ์ถ์
๋ฌธ = 'B';

- ์ถ์ ๋ฌธ B์ ๋ํ ๋ช ํํ ์์ ์กฐ๊ฑด์ผ๋ก ref ํญ๋ชฉ์ด const๋ก ์ถ๋ ฅ๋ฉ๋๋ค.
- ํ์ง๋ง ์ฌ์์ถ์ ๊ธฐ๋ก ํ ์ด๋ธ์ ์ ์ฒด ๋ฐ์ดํฐ(660,000) ์ค ์ถ์ ๋ฌธ์ด B์ ํด๋นํ๋ ๋ฐ์ดํฐ๋ ์ฝ 50% (300,000)์ ํด๋นํ๋ฏ๋ก, ์ด๋ฅผ ์ํด ์ธ๋ฑ์ค๋ฅผ ํ์ฉํ๋ ๊ฒ ๊ณผ์ฐ ํจ์จ์ ์ผ์ง ๊ณ ๋ฏผํด๋ด์ผ ํฉ๋๋ค. (์ธ๋ฑ์ค ์์ต๋ถ๊ธฐ์ )

ํ๋ ํ SQL, ์คํ ๊ณํ
SELECT * FROM ์ฌ์์ถ์
๊ธฐ๋ก IGNORE INDEX(I_์ถ์
๋ฌธ) WHERE ์ถ์
๋ฌธ = 'B';

- ํ๋ ํ ์คํ ๊ณํ์ ํ ์ด๋ธ ํ ์ค์บ(type: ALL)์ผ๋ก ์ํ๋จ์ ํ์ธํ ์ ์์ต๋๋ค.
- ์ฆ, ์ธ๋ฑ์ค๋ฅผ ์ฌ์ฉํ์ง ์์ ์ฑ ์ฝ 66๋ง๊ฑด์ ์ ์ฒด ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ ์กฐ๊ฑด์ ์ ํ์ํ ๋ฐ์ดํฐ๋ฅผ ์ถ์ถํ๋ ๋ฐฉ์์ผ๋ก, ๋๋ค ์ก์ธ์ค๊ฐ ๋ฐ์ํ์ง ์๊ณ ํ ๋ฒ์ ๋ค์์ ํ์ด์ง์ ์ ๊ทผํ๋ ํ ์ด๋ธ ํ ์ค์บ ๋ฐฉ์์ผ๋ก ์ํ๋ฉ๋๋ค.
- ์์ ์๊ฐ์ 3.5์ด -> 1.2์ด๋ก ๊ฐ์
7. ์์ ํ ์ด๋ธ์ด ๋จผ์ ์กฐ์ธ์ ์ฐธ์ฌํ๋(๋๋ผ์ด๋น ํ ์ด๋ธ) ๋์ SQL ๋ฌธ
๋ถ์ ํ ์ด๋ธ: 9๊ฑด, ๋ถ์์ฌ์_๋งคํ ํ ์ด๋ธ: 33๋ง๊ฑด
ํ๋ ์ SQL, ์คํ ๊ณํ
SELECT ๋งคํ.์ฌ์๋ฒํธ, ๋ถ์.๋ถ์๋ฒํธ
FROM ๋ถ์์ฌ์_๋งคํ ๋งคํ
JOIN ๋ถ์ ON ๋งคํ.๋ถ์๋ฒํธ = ๋ถ์.๋ถ์๋ฒํธ
WHERE ๋งคํ.์์์ผ์ >= '2002-03-01';

- ๋๋ผ์ด๋น ํ ์ด๋ธ(๋ถ์), ๋๋ฆฌ๋ธ ํ ์ด๋ธ(๋ถ์์ฌ์_๋งคํ) ์ค์ฒฉ ๋ฃจํ ์กฐ์ธ์ ์ํํฉ๋๋ค.
- ๋ถ์์ฌ์_๋งคํ ํ ์ด๋ธ์ rows ํญ๋ชฉ์ 40355 ์์น๋, SQL ๋ฌธ์ ์ํํ๊ณ ์ ์กฐ์ฌํ ํ์ ์์ธก ๊ฑด์๋ก, ์ธ๋ฑ์ค ์ค์บ์ ํ๊ณ ๋๋ค ์ก์ธ์ค๋ก ํ ์ด๋ธ์ ์ ๊ทผํ๊ฒ ๋ฉ๋๋ค. ๋ํ MySQL ์์ง์ผ๋ก ๊ฐ์ ธ์จ ๋ชจ๋ ๋ฐ์ดํฐ์ ๋ํด WHERE ์ ์ ํํฐ ์กฐ๊ฑด (์์์ผ์ >= ...) ์ ์ํํฉ๋๋ค.
ํ๋ ํ SQL, ์คํ ๊ณํ
SELECT STRAIGHT_JOIN ๋งคํ.์ฌ์๋ฒํธ, ๋ถ์.๋ถ์๋ฒํธ
FROM ๋ถ์์ฌ์_๋งคํ ๋งคํ
JOIN ๋ถ์ ON ๋งคํ.๋ถ์๋ฒํธ = ๋ถ์.๋ถ์๋ฒํธ
WHERE ๋งคํ.์์์ผ์ >= '2002-03-01';

- ์๋์ ์ผ๋ก ๊ท๋ชจ๊ฐ ํฐ ๋ถ์์ฌ์_๋งคํ ํ ์ด๋ธ์ ๋งคํ.์์์ผ์ >= '2002-03-01' ์กฐ๊ฑด์ ์ ๋จผ์ ์ ์ฉํ๋ค๋ฉด, ์กฐ์ธํ ๋ ๋น๊ต ๋์์ด ์ค์ด๋ค ๊ฒ์ ๋๋ค. (ํด๋น ๋ฐ์ดํฐ๋ ์ฝ 1300๊ฑด)
- ๋ถ์์ฌ์_๋งคํ ํ ์ด๋ธ์ ๋จผ์ ์ ๊ทผ(๋๋ผ์ด๋น)ํ์ฌ ํ ์ด๋ธ ํ ์ค์บ์ผ๋ก ์ฒ๋ฆฌํ๊ณ , ๋ถ์ ํ ์ด๋ธ์๋ PK๋ก ์ ๊ทผํ์ฌ 1๊ฐ์ ๋ฐ์ดํฐ๋ง ์ ๊ทผํ๋ ์์ผ๋ก ์ํ๋ฉ๋๋ค.
- ๊ณ ๋ คํด์ผ ํ ์ ์, ์์์ผ์ ์ด์ด ๋ฒ์ ์กฐ๊ฑด์ผ๋ก ์์ฑ๋๋์ง, ๊ทธ ๋ฒ์์ ํด๋นํ๋ ๋ฐ์ดํฐ๊ฐ ์์์ ์ค๋ช ํ๋ ์ธ๋ฑ์ค ์์ต๋ถ๊ธฐ์ ์ ๋๊ธฐ์ง ์๋ ์ ๋์ ๋น์จ์ด๋ผ๋ฉด ์ธ๋ฑ์ค๋ฅผ ์์ฑํ๋ ๊ฒ์ด ๋ ํจ์จ์ ์ผ ์ ์์ต๋๋ค.
8. ๋ฉ์ธ ํ ์ด๋ธ์ ๊ณ์ ์์กดํ๋ ๋์ SQL ๋ฌธ
์ฌ์ ํ ์ด๋ธ: 30๋ง๊ฑด, ๊ธ์ฌ ํ ์ด๋ธ: 280๋ง๊ฑด
ํ๋ ์ SQL, ์คํ ๊ณํ
SELECT ์ฌ์.์ฌ์๋ฒํธ, ์ฌ์.์ด๋ฆ, ์ฌ์.์ฑ
FROM ์ฌ์
WHERE ์ฌ์๋ฒํธ > 450000
AND (
SELECT MAX(์ฐ๋ด)
FROM ๊ธ์ฌ
WHERE ์ฌ์๋ฒํธ = ์ฌ์.์ฌ์๋ฒํธ
) > 100000;

- 1: ์ฌ์ ํ ์ด๋ธ์ PK๋ฅผ ํ์ฉํ์ฌ ๋ฒ์ ์ค์บ์ ์ํํฉ๋๋ค.
- 2: ๊ธ์ฌ ํ ์ด๋ธ์ ์ ๊ทผํ๋๋ฐ, ์ธ๋ถ์ ์ฌ์ ํ ์ด๋ธ๋ก๋ถํฐ ์กฐ๊ฑด์ ์ ์ ๋ฌ๋ฐ์ ์ํํด์ผ ํ๋ ์์กด์ฑ์ ๊ฐ์ง ์๋ธ์ฟผ๋ฆฌ์ ๋๋ค. ๊ทธ๋ฆฌ๊ณ ๊ธ์ฌ ํ ์ด๋ธ์ PK๋ฅผ ํ์ฉํฉ๋๋ค.
๐ก ๋ณดํต ์คํ ๊ณํ์ select_type ํญ๋ชฉ์ DEPENDENT๋ผ๋ ํค์๋๊ฐ ์์ผ๋ฉด, ์ธ๋ถ ํ ์ด๋ธ์์ ์กฐ๊ฑด์ ์ ๋ฐ์ ๋ค ์ฒ๋ฆฌ๋์ด์ผ ํ๋ฏ๋ก ํ๋ ๋์์ผ๋ก ๊ณ ๋ คํ ์ ์์ต๋๋ค.
๐ก ์๋ธ์ฟผ๋ฆฌ vs ์กฐ์ธ
ํ์ ๊ฒฝํ์ ์๋ธ์ฟผ๋ฆฌ๋ณด๋ค๋ ์กฐ์ธ์ผ๋ก ์ํํ๋ ํธ์ด ์ฑ๋ฅ ์ธก๋ฉด์์ ์ ๋ฆฌํ ๊ฐ๋ฅ์ฑ์ด ๋์ต๋๋ค.
ํ๋ ํ SQL, ์คํ ๊ณํ
SELECT ์ฌ์.์ฌ์๋ฒํธ, ์ฌ์.์ด๋ฆ, ์ฌ์.์ฑ
FROM ์ฌ์ JOIN ๊ธ์ฌ ON ์ฌ์.์ฌ์๋ฒํธ = ๊ธ์ฌ.์ฌ์๋ฒํธ
WHERE ์ฌ์.์ฌ์๋ฒํธ > 450000
GROUP BY ์ฌ์.์ฌ์๋ฒํธ
HAVING MAX(๊ธ์ฌ.์ฐ๋ด) > 100000;

- WHERE ์ ์ ์๋ธ์ฟผ๋ฆฌ๋ฅผ ์กฐ์ธ์ผ๋ก ๋ณ๊ฒฝํ์ฌ GROUP BY, HAVING ์ ์ ํตํด ํ๋ ์ ๊ทธ๋ฃน๋ณ ์ต๋๊ฐ์ ๊ณ์ฐํ๋๋ก ๊ฐ์ ํฉ๋๋ค.
- ๊ธ์ฌ ํ ์ด๋ธ์ DEPENDENT SUBQUERY ๋ฐฉ์์ ์ ๊ฑฐ๋๊ณ , ๋จ์ ์กฐ์ธํ๋ ๋ฐฉ์์ผ๋ก ํจ์จ ํฅ์
- rows๋ ์์ธก๊ฐ์ด๋ฏ๋ก ๋จ์ํ rows ๋ฐ์ดํฐ๋ก ํ๋ ์ฑ๊ณต ์ฌ๋ถ๋ฅผ ํ๋จํ๊ธฐ๋ ์ด๋ ต์ต๋๋ค.
์ฌ๋ฌ ์ํฉ์ ๋ํด SQL ํ๋์ ์งํํด ๋ณด์๋๋ฐ์, ์ค์ ๋ก ์ผ์ ํ๋ฉด์ ๋น์ทํ ์ฌ๋ก๋ฅผ ๊ฒช์๋ ์ผ์ด์ค๋ ์์๊ณ , ์ด๋ก ์ ์ผ๋ก๋ง ์๊ณ ์์๋ ๋ด์ฉ์ด๋, ์ ํ ๋ชฐ๋๋ ๋ด์ฉ์ ๋ํด์๋ ํ์ตํ ์ ์์์ต๋๋ค.
๋ค์์ ์กฐ๊ธ ๋ ์ค๋ฌด์ ๊ฐ๊น์ด(?) ๋ณต์กํ ์ฟผ๋ฆฌ๋ฅผ ํ ๋๋ก ์ธ๋ฑ์ค ๋ณ๊ฒฝ, ํ ์ด๋ธ ๊ตฌ์กฐ ๋ณ๊ฒฝ ๋ฐ SQL ์ฌ์์ฑ ๋ฑ ์ฟผ๋ฆฌ ํ๋์ ์ํํ ์์ ์ ๋๋ค.