SQL์ ์ค์ฒฉ ์ฟผ๋ฆฌ
SQL ์ธ์ด๋ฅผ ์ฌ์ฉํ๋ฉด ํ๋์ ์ฟผ๋ฆฌ๋ฅผ ๋ค๋ฅธ ์ฟผ๋ฆฌ ๋ด์ ์ค์ฒฉํ ์ ์์ต๋๋ค. ์ด๋ ๊ฒ ํ๋ฉด ์ฝ๋์ ๊ฐ๋ ์ฑ์ด ํฌ๊ฒ ๋จ์ด์ง๋๋ผ๋ ํฌ๊ณ ๋ณต์กํ ์์ ์ ์ํํ๋ ํ๋์ ๋งค์ฐ ํฐ ์ฟผ๋ฆฌ๋ฅผ ์์ฑํ ์ ์์ต๋๋ค.
์๋ธ์ฟผ๋ฆฌ๊ฐ ๋ฐํํ๋ ๊ฐ์ ๊ฐ์์ ๋ฐ๋ผ ์ ์ฉํ ์ ์๋ ์์ญ์ด ๋ฌ๋ผ์ง๋ค. ์ด ์ธ ๊ฐ์ง ์ต์ ์ด ์์ต๋๋ค.
- ํ์ ์ฟผ๋ฆฌ๋ ํ๋์ ๋จ์ผ ๊ฐ (ํ๋์ ์ด๊ณผ ํ๋์ ํ)์ ๋ฐํํฉ๋๋ค.
- ํ์ ์ฟผ๋ฆฌ๋ ๊ฐ ๋ชฉ๋ก (ํ๋์ ์ด์ด ์๋ ํ ์ด๋ธ)์ ๋ฐํํฉ๋๋ค.
- ํ์ ์ฟผ๋ฆฌ๋ ํ ์ด๋ธ (๋ง์ ์ด, ์ฌ๋ฌ ํ)์ ๋ฐํํฉ๋๋ค.
๊ฐ ๊ฒฝ์ฐ์ ๋ํด ํ๋์ ์๋ฅผ ์ดํด๋ณด๊ฒ ์ต๋๋ค.
์ค์นผ๋ผ ๊ฒฐ๊ณผ๊ฐ ํฌํจ๋ ํ์ ์ฟผ๋ฆฌ
๊ธ์ฌ๊ฐ ํ์ฌ ํ๊ท ๋ณด๋ค ๋์ ์ง์ ํ ์ด๋ธ์์ ๋ชจ๋ ์ง์ ๋ชฉ๋ก์ ์ฐพ์๋ด ์๋ค. ์ด๋ป๊ฒ ํ ์ ์์ต๋๊น?
๋ฏธ๋ฆฌ ์๋ฉด ์ง์์ ๊ธ์ฌ๋ฅผ ํ๊ท ๊ณผ ๋น๊ตํ์ฌ ์ง์์ ์ฝ๊ฒ ํํฐ๋งํ ์ ์์ต๋๋ค. ๋์์ ํ์ฌ ์ง์์ ํ๊ท ๊ธ์ฌ๋ฅผ ๊ณ์ฐํ ์ ์๋ ์ฟผ๋ฆฌ๋ฅผ ์ด๋ฏธ ์์ฑํ์ต๋๋ค. ๊ธฐ์ตํฉ์๋ค:
SELECT AVG(salary) FROM employee
๊ทธ๋ฐ ๋ค์ MySQL์ 76833.3333 ๊ฐ์ ๋ฐํํ์ต๋๋ค .
๊ธ์ฌ๊ฐ ํ๊ท ์ด์์ธ ๋ชจ๋ ์ง์์ ๋ชฉ๋ก์ ์ฐพ๋ ๋ฐฉ๋ฒ์ ๋ฌด์์ ๋๊น? ๋ํ ๋งค์ฐ ๊ฐ๋จํฉ๋๋ค.
SELECT * FROM employee
WHERE salary > 76833.3333
์ด ์ฟผ๋ฆฌ์ ๊ฒฐ๊ณผ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
ID | ์ด๋ฆ | ์ง์ | ์๋ฌ๋ฆฌ |
---|---|---|---|
1 | ์ด๋ฐ๋ ธํ ์ด๋ฐ | ํ๋ก๊ทธ๋จ ์ ์์ | 100000 |
2 | ํํธ๋กํ ํํธ๋ฅด | ํ๋ก๊ทธ๋จ ์ ์์ | 80000 |
4 | ๋ผ๋น๋ ธ๋น์น ๋ชจ์ด์ค | ๊ฐ๋ | 200000 |
์ด์ ๊ฐ 76833 ๋์ ์ฒซ ๋ฒ์งธ ์์ฒญ์ ๋์ฒดํ์ฌ ๋ ์์ฒญ์ ๊ฒฐํฉํฉ๋๋ค.
SELECT * FROM employee
WHERE salary > (SELECT AVG(salary) FROM employee)
์ด ์ฟผ๋ฆฌ์ ๊ฒฐ๊ณผ๋ ๋์ผํฉ๋๋ค.
ID | ์ด๋ฆ | ์ง์ | ์๋ฌ๋ฆฌ |
---|---|---|---|
1 | ์ด๋ฐ๋ ธํ ์ด๋ฐ | ํ๋ก๊ทธ๋จ ์ ์์ | 100000 |
2 | ํํธ๋กํ ํํธ๋ฅด | ํ๋ก๊ทธ๋จ ์ ์์ | 80000 |
4 | ๋ผ๋น๋ ธ๋น์น ๋ชจ์ด์ค | ๊ฐ๋ | 200000 |
๊ฐ ๋ชฉ๋ก์ด ํฌํจ๋ ํ์ ์ฟผ๋ฆฌ
ํ ํ ์ด๋ธ์์ ๋ค๋ฅธ ํ ์ด๋ธ์ ํด๋น ๋ ์ฝ๋๊ฐ ์๋ ๋ชจ๋ ๋ ์ฝ๋๋ฅผ ์ฐพ๋ ์์ ์ ํ ๋ฒ ๊ธฐ์ตํ์ญ๋๊น?
์ด๋ฐ ์ฌ์ง๋ ์์์ต๋๋ค.
๋ด๊ฐ ์ฐฉ๊ฐํ์ง ์์๋ค๋ฉด ์์ ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค. ์์ ํ ์ด๋ธ์ ์์ ์ด ์๋ ์ง์ ํ ์ด๋ธ์ ๋ชจ๋ ์ง์ ๋ชฉ๋ก ํ์ .
๋ ๋จ๊ณ๋ก ํด๊ฒฐ์ฑ ์ ์ฐพ์๋ด ์๋ค.
๋จผ์ ์์ ํ ์ด๋ธ์ ์์ ์ด ์๋ ๋ชจ๋ ์ง์์ ID๋ฅผ ๋ฐํํ๋ ์ฟผ๋ฆฌ๋ฅผ ์์ฑํด ๋ณด๊ฒ ์ต๋๋ค. ๋ ๊ฐ์ง๋ง ๊ธฐ์ตํ์ธ์.
- ์ค๋ณต ์ ๊ฑฐ - DISTINCT ํค์๋๋ฅผ ์ฌ์ฉํ์ญ์์ค.
- ๊ฒฐ๊ณผ์์ NULL ๊ฐ์ ์ ๊ฑฐํฉ๋๋ค.
SELECT DISTINCT employee_id FROM task
WHERE employee_id IS NOT NULL
๊ทธ๋ฆฌ๊ณ ์ฌ๊ธฐ ์ฐ๋ฆฌ๋ ๊ทธ๋ฌํ ์์ฒญ์ ๋ํ ์๋ฆ๋ค์ด ๊ฒฐ๊ณผ๋ฅผ ์ป์์ต๋๋ค.
employee_id |
---|
1 |
2 |
5 |
4 |
6 |
ํธ์๋ฅผ ์ํด ์ผ์์ ์ผ๋ก 1,2,5,4,6์ ์์๋ก ์ ์ด๋ก๋๋ค. ์ด์ ์ฒซ ๋ฒ์งธ ๋ชฉ๋ก์ ํฌํจ๋์ง ์์ ID๋ฅผ ๊ฐ์ง ์ง์ ๋ชฉ๋ก์ ๋ฐํํ๋ ์ง์ ํ ์ด๋ธ์ ๋ํ ๋ ๋ฒ์งธ ์ฟผ๋ฆฌ๋ฅผ ์์ฑํด ๋ณด๊ฒ ์ต๋๋ค.
SELECT * FROM employee
WHERE id NOT IN (1,2,5,4,6)
๊ทธ๋ฆฌ๊ณ ์ด ์ฟผ๋ฆฌ์ ๊ฒฐ๊ณผ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
ID | ์ด๋ฆ | ์ง์ | ์๋ฌ๋ฆฌ | ๋์ด | ๊ฐ์ ๋ ์ง |
---|---|---|---|---|---|
์ผ | ์ด๋ฐ๋ ธํ ์ธ๋ฅด๊ฒ์ด | ์ํ ์ฅ์น | 40000 | ์๋ฅธ | 2014-01-01 |
์ด์ ์์ ์์์์ ๊ฐ์ด id ๋ชฉ๋ก ๋์ ์ฒซ ๋ฒ์งธ ์์ฒญ์ ๋ณธ๋ฌธ์ ๊ฐ๋จํ ๋์ฒดํ์ฌ ๋ ์์ฒญ์ ๊ฒฐํฉํ ์ ์์ต๋๋ค.
SELECT * FROM employee
WHERE id NOT IN (
SELECT DISTINCT employee_id FROM task
WHERE employee_id IS NOT NULL
)