ํด๋น ๋ด์ฉ์ ๊ณต๋ถ์ ๋ชฉ์ ์ผ๋ก ๊ธฐ๋ก๋์์ผ๋ฉฐ, ์๋ ๋ด์ฉ์ ๋ชจ๋ ๊ตฌ๊ธ ๊ฒ์์ผ๋ก ๊ณต๋ถ ๋ธ๋ก๊ทธ๋ฅผ ์ฐธ๊ณ ํ์ฌ ์์ฑํ์ต๋๋ค. ์ด์ฌํ ๋ฐฐ์ฐ๋ ์ค์
๋๋ค. ๊ฐ์ฌํฉ๋๋ค.
์ถ์ฒ | Everly
SQL ์๋ธ์ฟผ๋ฆฌ(Sub Query) ์์ - select์ , from์ , where์
์ด๋ฒ ํฌ์คํ
์ ์ค๋ฌด SQL์์ ์ ๋ง ๋ง์ด ์ฌ์ฉํ๋ ์๋ธ์ฟผ๋ฆฌ(Sub Query)์ ๋ํด ์๊ฐํ๋ค. โป ์๋ธ์ฟผ๋ฆฌ๋? ์์ ํฌ์คํ
์์ ๊ฐ์ฅ ๊ธฐ๋ณธ์ ์ธ SQL ๋ฌธ๋ฒ์ [SELECT, FROM, WHERE] ๋ผ๊ณ ํ์๋ค. ์๋ธ์ฟผ๋ฆฌ๋ ์์น์
suy379.tistory.com
๐ ์๋ธ์ฟผ๋ฆฌ๋?
SQL์ ๊ฐ์ฅ ๊ธฐ๋ณธ์ ์ธ ๊ตฌ์ฑ์ธ [SELECT, FROM, WHERE] ๊ตฌ๋ฌธ์ผ๋ก SELECT์ , FROM์ , WHERE์ ์ ๊ฐ๊ฐ ํ์ํ ์ ์ ๊ธฐ๋ณธ์ ์ธ ๊ตฌ๋ฌธ์ด ๋ค์ด๊ฐ๋ ๊ฒ์ ์๋ฏธํ๋ค. ์์๋ก ์๋์ ๊ฐ๋ค. - SELECT์ ( SELECT ... FROM ... WHERE ... ) - FROM ์ ( SELECT ... FROM ... WHERE ... ) - WHERE ์ ( SELECT ... FROM ... WHERE ... )
๐ SELECT์
SELECT์ ์ ์๋ธ์ฟผ๋ฆฌ๋ ํ๋์ ์ด ์ฒ๋ผ ์ฌ์ฉ๋๋ค.
์์ users table
์์ photos table
photos table ์์ users id ์ ํด๋นํ๋ ์ฌ์ง๋ง ์ถ๋ ฅํ๊ณ ์ ํ๋ค.
์๋์ ๊ฐ์ SELECT์ ์ฟผ๋ฆฌ๋ฌธ์ photos table์ 'filename' ์ปฌ๋ผ๋ง ๊ฐ์ ธ์์ ์ฌ์ฉํ๋ ๋ฐฉ์์ด๋ค.
SELECT
p.filename
, (SELECT nickname FROM users u WHERE u.id = p.user_id)
FROM photos p ;
์ง์
SELECT์ ์๋ธ์ฟผ๋ฆฌ๋ ๋ฐ์ดํฐ์ ์์ด ๋ง์ ์๋ก ์คํ์๋๊ฐ ๋๋ ค์ง๊ธฐ ๋๋ฌธ์ ๊ฑฐ์ ์ฌ์ฉ๋์ง ์๋ ๋ช
๋ น์ด์ด๋ค.
๐ FROM ์
FROM์ ์ ์๋ธ์ฟผ๋ฆฌ๋ ํ๋์ ํ
์ด๋ธ ์ฒ๋ผ ์ฌ์ฉ๋๋ค.
ํ
์ด๋ธ์ฒ๋ผ ์ฌ์ฉ๋๊ธฐ ๋๋ฌธ์ ์ด ์ด๋ฆ๊ณผ ํ
์ด๋ธ๋ช
์ ๊ผญ ๋ช
์ํด์ค์ผ ํ๋ค. (์ค์)
- ์ด๊ฑฐ ์์ง์ผฐ๋ค๊ฐ ์ SELECT ์ ์ฉ ์๋๋๊ฐ๋ฅผ ์๋ฑํ ๊ณณ์์ ์ ์ญ๋ฒ ํ์ธํด์ผ๋ง ํ๋ค.
SELECT
u.nickname AS ๋๋ค์
, count(*) AS ๋ ์ฝ๋๊ธฐ๋ก
FROM users u
, (SELECT * FROM photos (WHERE ๊ตฌ๋ฌธ์ผ๋ก ์ฌ๋ฌ ์กฐ๊ฑด์ ๋ฃ์ ์ ์๋ค.)) p
WHERE u.id = p.user_id
GROUP BY u.nickname ;
์ง์
FROM์ ์๋ธ์ฟผ๋ฆฌ๋ ์ค์ ์์ ์ฌ๋ฌ ๊ฐ์ง ํ
์ด๋ธ์ ์กฐ์ธ์์ผ ๊ฐ๊ณตํ๊ณ , 1์ฐจ ๊ฐ๊ณตํ ๊ฒฐ๊ณผ๋ฌผ์ ๋ ๋ค์ 2์ฐจ ๊ฐ๊ณต ๊ทธ ์ด์์ผ๋ก ์ฌ์ฉํ๋ ๊ฒฝ์ฐ๊ฐ ๋ง๋ค. 1์ฐจ ๊ฐ๊ณตํ ๊ฒฐ๊ณผ๋ฅผ ํ
์ด๋ธ ํํ๋ก ๋ค์ ์ ์ฅํ๋ค๋ฉด ํธํ๊ฒ ์ง๋ง, ๋ถ๊ฐ๋ฅํ ๊ฒฝ์ฐ 1์ฐจ ๊ฐ๊ณต๋ฌผ์ FROM์ ์๋ธ์ฟผ๋ฆฌ์ ๋ฃ์ด ํ๋์ ํ
์ด๋ธ๋ก ์ด์ฉํ๋ค.
์ง์ ๋ง๋ ์์ ์ค ๋น์ทํ๊ฒ ์์ด ํฌ์คํ
ํ ๋ธ๋ก๊ทธ์ ์ฌ์ฉ๋ ์์๋ฅผ ๊ฐ์ ธ์๋ค.
SELECT *
FROM (SELECT mem_no, SUM(sales_amt) AS tot_amt
FROM [ORDER]
GROUP BY mem_no) A
LEFT JOIN [MEMBER] B
ON A.mem_no = B.mem_no
์ ์ฟผ๋ฆฌ๋ฌธ์ฒ๋ผ ์ฌ์ฉ๋๋ ๊ฒฝ์ฐ๊ฐ ๋ง๋ค.
๐ WHERE ์
WHERE์ ์ ์๋ธ์ฟผ๋ฆฌ๋ ๊ฐ์ฅ ๋ํ์ ์ธ ํํ๋ฅผ ๊ฐ์ง ์ผ๋ฐ ์๋ธ์ฟผ๋ฆฌ์ด๋ค.
photos ์ user ๋ ์ฝ๋ ๊ธฐ๋ก์ด ์๋ ์ ์ ๋ง ๋ถ๋ฌ์ค๋๋ก ์กฐ๊ฑด๋ฌธ์ ์ฌ์ฉํ๋ค.
SELECT
*
FROM users u
WHERE
u.id IN (
SELECT p.user_id
FROM photos p
WHERE p.user_id = u.id
) ;
user_id๋ฅผ ์ฐธ์กฐํ๋ค.
์ง์