Amenable 2023. 4. 18. 23:56

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)
  1. ์Šค์นผ๋ผ ์„œ๋ธŒ ์ฟผ๋ฆฌ(Scalar Subquery)
    SELECT ๋ฌธ์— ์ž‘์„ฑํ•˜๋Š” ์„œ๋ธŒ ์ฟผ๋ฆฌ
    ํ•˜๋‚˜์˜ ํ–‰๋งŒ ๋ฐ˜ํ™˜ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ํ•˜๋‚˜์˜ ์ปฌ๋Ÿผ์ฒ˜๋Ÿผ ์‚ฌ์šฉ
  2. ์ธ๋ผ์ธ ๋ทฐ(Inline View)
    FROM ๋ฌธ์— ์ž‘์„ฑํ•˜๋Š” ์„œ๋ธŒ ์ฟผ๋ฆฌ
    ๋ทฐ(View)์ฒ˜๋Ÿผ ๊ฒฐ๊ณผ๊ฐ€ ๋™์ ์œผ๋กœ ์ƒ์„ฑ๋œ ํ…Œ์ด๋ธ”๋กœ ์‚ฌ์šฉ ๊ฐ€๋Šฅ
  3. ์ค‘์ฒฉ ์„œ๋ธŒ ์ฟผ๋ฆฌ(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 ์„ค๋ช…'
์„ ์ฐธ๊ณ ํ•˜์˜€์Šต๋‹ˆ๋‹ค.