1. ๊ฐ๋ ๐ฐ
์๋ธ์ฟผ๋ฆฌ(Subquery)๋ ๋ค๋ฅธ ์ฟผ๋ฆฌ ๋ด๋ถ์ ํฌํจ๋์ด ์๋ SELECT ๋ฌธ์ ์๋ฏธํ๋ค.
์๋ธ์ฟผ๋ฆฌ๋ฅผ ํฌํจํ๊ณ ์๋ ์ฟผ๋ฆฌ๋ฅผ ์ธ๋ถ ์ฟผ๋ฆฌ(Outer Query) ๋๋ ๋ฉ์ธ ์ฟผ๋ฆฌ(Main Query)๋ผ๊ณ ๋ถ๋ฅด๋ฉฐ, ์๋ธ ์ฟผ๋ฆฌ๋ ๋ด๋ถ ์ฟผ๋ฆฌ(Inner Query)๋ผ๊ณ ๋ถ๋ฅธ๋ค.
์๋ธ ์ฟผ๋ฆฌ๋ ๋ฐ๋์ ๊ดํธ๋ก ๊ฐ์ธ์ ธ์ ํํ๋์ด์ผ ํ๋ค.
2. ์ข ๋ฅ ๐ช
์๋ธ ์ฟผ๋ฆฌ์ ์์น์ ๋ฐ๋ผ์ 3๊ฐ์ง ์ข ๋ฅ๋ก ๋๋ ์ ์๋ค.
SELECT ์ปฌ๋ผ1, ์ปฌ๋ผ2, (SELECT ...) -- ์ค์นผ๋ผ ์๋ธ ์ฟผ๋ฆฌ(Scalar Subquery)
FROM (SELECT ...) -- ์ธ๋ผ์ธ ๋ทฐ(Inline View)
WHERE col = (SELECT ...) -- ์ค์ฒฉ ์๋ธ ์ฟผ๋ฆฌ(Nested Subquery)
- ์ค์นผ๋ผ ์๋ธ ์ฟผ๋ฆฌ(Scalar Subquery)
SELECT ๋ฌธ์ ์์ฑํ๋ ์๋ธ ์ฟผ๋ฆฌ
ํ๋์ ํ๋ง ๋ฐํํ๊ธฐ ๋๋ฌธ์ ํ๋์ ์ปฌ๋ผ์ฒ๋ผ ์ฌ์ฉ - ์ธ๋ผ์ธ ๋ทฐ(Inline View)
FROM ๋ฌธ์ ์์ฑํ๋ ์๋ธ ์ฟผ๋ฆฌ
๋ทฐ(View)์ฒ๋ผ ๊ฒฐ๊ณผ๊ฐ ๋์ ์ผ๋ก ์์ฑ๋ ํ ์ด๋ธ๋ก ์ฌ์ฉ ๊ฐ๋ฅ - ์ค์ฒฉ ์๋ธ ์ฟผ๋ฆฌ(Nested Subquery)
WHERE ๋ฌธ์ ์์ฑํ๋ ์๋ธ ์ฟผ๋ฆฌ
๋จ์ผํ, ๋ค์คํ, ๋ค์ค์ด์ ๋ฐํํ ์ ์์
๊ณ์ํด์ ๊ฐ๊ฐ์ ์ฌ์ฉ๋ฒ์ ๋ํ์ฌ ์์๋ณด์.
3. ์ค์นผ๋ผ ์๋ธ ์ฟผ๋ฆฌ(Scalar Subquery) ๐ฆ
- SELECT ๋ฌธ์ ์์ฑํ๋ ์๋ธ ์ฟผ๋ฆฌ
- ํ๋์ ํ๋ง ๋ฐํํ๊ธฐ ๋๋ฌธ์ ํ๋์ ์ปฌ๋ผ์ฒ๋ผ ์ฌ์ฉ
SELECT a.a1, (SELECT b.b1
FROM b_table b
WHERE a.a2 = b.b2) AS b_no
FROM a_table a;
4. ์ธ๋ผ์ธ ๋ทฐ(Inline View) ๐ญ
- FROM ๋ฌธ์ ์์ฑํ๋ ์๋ธ ์ฟผ๋ฆฌ
- ๋ทฐ(View)์ฒ๋ผ ๊ฒฐ๊ณผ๊ฐ ๋์ ์ผ๋ก ์์ฑ๋ ํ ์ด๋ธ๋ก ์ฌ์ฉ ๊ฐ๋ฅ
SELECT a.a1, a.a2
FROM (
SELECT *
FROM b_table b
WHERE b.employee_rank = '์ฌ์'
) a;
5. ์ค์ฒฉ ์๋ธ ์ฟผ๋ฆฌ(Nested Subquery) ๐ง
- WHERE ๋ฌธ์ ์์ฑํ๋ ์๋ธ ์ฟผ๋ฆฌ
- ๋จ์ผํ, ๋ค์คํ, ๋ค์ค์ด์ ๋ฐํํ ์ ์์
1. ๋จ์ผํ
SELECT a.a1, a.a2
FROM a_table a
WEHRE a.name = (SELECT b.b1
FROM b_table b
WHERE b.name = 'amenable'
);
2. ๋ค์คํ
๋ค์คํ์ ๋ฆฌํด ๋ฐ์ ๋์๋ IN, ANY, ALL์ ์ฌ์ฉํ ์ ์๋ค.
- IN
๋ค์์ ๋น๊ต๊ฐ๊ณผ ๋น๊ตํ์ฌ ๋น๊ต๊ฐ ์ค ํ๋๋ผ๋ ๊ฐ์ ๊ฐ์ด ์๋ค๋ฉด TRUE
SELECT a.a1
FROME a_table a
WEHRE a.age IN (SELECT b.age
FROM b_table b
WHERE b.height = '180');
- ANY
๋ค์์ ๋น๊ต๊ฐ ์ค ํ ๊ฐ๋ผ๋ ๋ง์กฑํ๋ฉด TRUE
IN๊ณผ ๋ค๋ฅธ ์ ์ ๋น๊ต ์ฐ์ฐ์๋ฅผ ์ฌ์ฉํ๋ค๋ ๊ฒ
SELECT a.a1
FROME a_table a
WEHRE a.age > ANY (SELECT b.age
FROM b_table b
WHERE b.height = '180');
- ALL
์ ์ฒด ๊ฐ์ ๋น๊ตํ์ฌ ๋ชจ๋ ๋ง์กฑํด์ผ๋ง TRUE
SELECT a.a1
FROME a_table a
WEHRE a.age > ALL (SELECT b.age
FROM b_table b
WHERE b.height = '180');
3. ๋ค์ค์ด
SELECT a.a1, a.a2
FROM a_table a
WEHRE (a.age, a.height) in (SELECT b.age, b.height
FROM b_table b
WHERE b.name = 'amenable'
);
ํด๋น ๊ธ์
Inpa ๋์ '[MYSQL] ์๋ธ์ฟผ๋ฆฌ ๊ฐ๋ & ๋ฌธ๋ฒ ์ ๋ฆฌ',
Carami ๋์ 'IN, ANY, ALL ์ค๋ช '
์ ์ฐธ๊ณ ํ์์ต๋๋ค.
'๐ ๋ฐ์ดํฐ๋ฒ ์ด์ค > ๊ฐ๋ ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
ํธ๋์ญ์ ์ ๊ฒฉ๋ฆฌ ์์ค (Transaction Isolation Level) (1) | 2023.06.18 |
---|---|
ํธ๋์ญ์ (Transaction) (0) | 2023.06.17 |
[DB] ๋ฐ์ดํฐ๋ฒ ์ด์ค ํค(Key) ๊ฐ๋ & ํค(Key) ์ข ๋ฅ (0) | 2023.06.13 |
์กฐ์ธ(JOIN) (0) | 2023.04.18 |
๋ทฐ(VIEW) (0) | 2023.04.17 |