30_Oct_2021 ๐Ÿฐ ์—˜๋ฆฌ์Šค AI ํŠธ๋ž™ TIL: ์„œ๋ธŒ์ฟผ๋ฆฌ

์œ ํ™˜์ตยท2021๋…„ 10์›” 31์ผ
0

Alexander Yoo์˜ Back-end Engineering

๋ชฉ๋ก ๋ณด๊ธฐ
4/6

์„œ๋ธŒ์ฟผ๋ฆฌ

ํ•˜๋‚˜์˜ ์ฟผ๋ฆฌ ์•ˆ์— ํฌํ•จ๋œ ๋˜ ํ•˜๋‚˜์˜ ์ฟผ๋ฆฌ
๋ฉ”์ธ ์ฟผ๋ฆฌ๊ฐ€ ์„œ๋ธŒ์ฟผ๋ฆฌ๋ฅผ ํฌํ•จํ•˜๋Š” ์ข…์†์ ์ธ ๊ด€๊ณ„์ด๋‹ค.

  • ๋ณต์žกํ•œ ๋…ผ๋ฆฌ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ถ”์ถœํ•ด์•ผ ํ•  ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค.
    e.g.) ์—ฐ๋ด‰์ด X์›์ธ ๋‚จ์ž๊ฐ€ ์ฝ๋Š” ์ฑ…์€ ๋ฌด์—‡์ธ์ง€ ์ฐพ๊ณ  ์‹ถ์€๋ฐ, ๋งค๋…„ ์ฑ…์„ ์ฝ๋Š” ์ง€ ํ˜น์€ ์˜ฌํ•ด๋งŒ ์ฝ๋Š”์ง€ ํ™•์ธ.

์„œ๋ธŒ์ฟผ๋ฆฌ์˜ ํŠน์ง•

  • ์•Œ๋ ค์ง€์ง€ ์•Š์€ ๊ธฐ์ค€์„ ์ด์šฉํ•œ ๊ฒ€์ƒ‰์— ์œ ์šฉํ•˜๋‹ค (์—ฐ๋ด‰์ด ์ƒ์œ„ 1%์ธ ์‚ฌ๋žŒ)
  • ๋ฉ”์ธ ์ฟผ๋ฆฌ๊ฐ€ ์‹คํ–‰๋˜๊ธฐ ์ด์ „์— ํ•œ ๋ฒˆ๋งŒ ์‹คํ–‰ (์„œ๋ธŒ์ฟผ๋ฆฌ -> ๋ฉ”์ธ์ฟผ๋ฆฌ ์ˆœ์œผ๋กœ ์‹คํ–‰)
  • ํ•œ ๋ฌธ์žฅ์—์„œ ์—ฌ๋Ÿฌ ๋ฒˆ ์‚ฌ์šฉ ๊ฐ€๋Šฅ
SELECT *
FROM employee
WHERE salary >
(SELECT salary FROM employee WHERE name = 'elice');

์‚ฌ์› elice์˜ salary๋ฅผ ์•Œ์ง€ ๋ชปํ•ด๋„ ๊ฒ€์ƒ‰์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

์„œ๋ธŒ์ฟผ๋ฆฌ ์ฃผ์˜์‚ฌํ•ญ

  1. ์„œ๋ธŒ์ฟผ๋ฆฌ๋Š” ๊ด„ํ˜ธ์™€ ํ•จ๊ป˜ ์‚ฌ์šฉํ•œ๋‹ค.
  2. ์„œ๋ธŒ์ฟผ๋ฆฌ ์•ˆ์—์„œ ORDER BY ์ ˆ์€ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋‹ค.
  3. ์„œ๋ธŒ์ฟผ๋ฆฌ๋Š” ์—ฐ์‚ฐ์ž์˜ ์˜ค๋ฅธ์ชฝ์— ์‚ฌ์šฉ๋˜์–ด์•ผ ํ•œ๋‹ค.
  4. ์„œ๋ธŒ์ฟผ๋ฆฌ๋Š” ์˜ค๋กœ์ง€ SELECT๋ฌธ์œผ๋กœ๋งŒ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค.

๋ฐ˜ํ™˜์— ๋”ฐ๋ฅธ ๋ถ„๋ฅ˜

๋‹จ์ผ ํ–‰ ์„œ๋ธŒ์ฟผ๋ฆฌ

๊ฒฐ๊ณผ๊ฐ€ ํ•œ ํ–‰๋งŒ ๋‚˜์˜ค๋Š” ์„œ๋ธŒ์ฟผ๋ฆฌ๋กœ, ์„œ๋ธŒ์ฟผ๋ฆฌ ๊ฒฐ๊ณผ๋ฅผ 1๊ฐœ์˜ ๊ฐ’๋งŒ ๋ฐ˜ํ™˜ํ•˜๊ณ  ๊ฒฐ๊ณผ๋ฅผ ๋ฉ”์ธ์ฟผ๋ฆฌ๋กœ ์ „๋‹ฌํ•˜๋Š” ์ฟผ๋ฆฌ

SELECT * FROM employee
WHERE salary
(SELECT salary FROM employee WHERE ์‚ฌ์›๋ฒˆํ˜ธ = 1);

๋‹ค์ค‘ ํ–‰ ์„œ๋ธŒ์ฟผ๋ฆฌ

์„œ๋ธŒ์ฟผ๋ฆฌ์˜ ๊ฒฐ๊ณผ๋ฅผ 2๊ฐœ ์ด์ƒ ๋ฐ˜ํ™˜ํ•˜๊ณ , ๊ฒฐ๊ณผ๋ฅผ ๋ฉ”์ธ์ฟผ๋ฆฌ๋กœ ์ „๋‹ฌํ•˜๋Š” ์ฟผ๋ฆฌ

SELECT * 
FROM employee
WHERE salary IN 
(SELECT MAX(salary) FROM employee GROUP BY deptno);

IN ๋‹ค์ค‘ ํ–‰ ์—ฐ์‚ฐ์ž๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.

๋‹ค์ค‘ ํ–‰ ์—ฐ์‚ฐ์ž

๊ธฐํ˜ธ๋œป
INํ•˜๋‚˜๋ผ๋„ ๋งŒ์กฑํ•˜๋ฉด ๋ฐ˜ํ™˜
ANYํ•˜๋‚˜๋ผ๋„ ๋งŒ์กฑํ•˜๋ฉด ๋ฐ˜ํ™˜, ๋น„๊ต ์—ฐ์‚ฐ ๊ฐ€๋Šฅ
ALL๋ชจ๋‘ ๋งŒ์กฑํ•˜๋ฉด ๋ฐ˜ํ™˜, ๋น„๊ต ์—ฐ์‚ฐ ๊ฐ€๋Šฅ
1 in (1,2,3,4) = ์ฐธ
10 < any (1,2,3,4) = ์ตœ๋Œ€๊ฐ’ ์ฐพ๊ธฐ : 4 => ๊ฑฐ์ง“
99 >= all (99,100,101) ์ตœ๋Œ€๊ฐ’ ์ฐพ๊ธฐ : 101 => ๊ฑฐ์ง“

์œ„์น˜์— ๋”ฐ๋ฅธ ๋ถ„๋ฅ˜

์Šค์นผ๋ผ ์„œ๋ธŒ์ฟผ๋ฆฌ

SELECT(์ฟผ๋ฆฌ์˜ ๋จธ๋ฆฌ๋ถ€๋ถ„)์ ˆ์—์„œ ์‚ฌ์šฉํ•˜๋Š” ์„œ๋ธŒ์ฟผ๋ฆฌ, ์Šค์นผ๋ผ ์„œ๋ธŒ์ฟผ๋ฆฌ๋Š” ์˜ค๋กœ์ง€ ํ•œ ํ–‰๋งŒ ๋ฐ˜ํ™˜ํ•˜๋ฉฐ ๋งˆ์น˜ JOIN์„ ์‚ฌ์šฉํ•œ ๊ฒƒ๊ณผ ๊ฐ™์€ ๊ฒฐ๊ณผ๋ฅผ ๋‚˜ํƒ€๋‚ธ๋‹ค.

์Šค์นผ๋ผ ์„œ๋ธŒ์ฟผ๋ฆฌ๋ฅผ ์“ฐ๋Š” ์ด์œ : ์ ์€ ๋ฐ์ดํ„ฐ๋ผ๋ฉด JOIN ์—ฐ์‚ฐ๊ณผ ํฐ ์ฐจ์ด๊ฐ€ ์—†์„ ์ˆ˜ ์žˆ์ง€๋งŒ, ๋ฐ์ดํ„ฐ์˜ ๊ทœ๋ชจ๊ฐ€ ํด ๊ฒฝ์šฐ, ๊ณ„์‚ฐ ์†๋„๊ฐ€ ๋น ๋ฅด๊ฒŒ ๋ฐ์ดํ„ฐ๊ฐ€ ์ถ”์ถœ๋œ๋‹ค.

SELELCT student.name, (
	SELECT  math
    FROM middle_test as m
    WHERE m.student_id = student.student_id
) AS middle_avg
FROM students;
profile
์‚ฌ์šฉ์ž์˜ ํŽธ์˜๋ฅผ ๋” ์ƒ๊ฐํ•˜๊ณ  ํŽธ์•ˆํ•œ UI/UX ๊ฐœ๋ฐœ์„ ๊ฟˆ๊พธ๋Š” ํ”„๋ก ํŠธ์—”๋“œ ๊ฐœ๋ฐœ์ž ์ง€๋ง์ƒ์ž…๋‹ˆ๋‹ค.

0๊ฐœ์˜ ๋Œ“๊ธ€