MapleStory Finger Point Cute Line Smiley Blinking Hello Kitty Angel MapleStory Finger Point

๐Ÿ’Ž DataBase/๐Ÿ’Ž SQL-PL,SQL

หšโ‚Šโœฉโ€งโ‚Š [SQL] SUBQUERY ์„œ๋ธŒ์ฟผ๋ฆฌ หšโ‚Šโœฉโ€งโ‚Š

HYEJU01 2024. 6. 20. 02:42

[์„œ๋ธŒ์ฟผ๋ฆฌ SubQuery ๊ฐœ๋…]
ํ•˜๋‚˜์˜ ์ฟผ๋ฆฌ ์•ˆ์— ๋˜ ๋‹ค๋ฅธ ํ•˜๋‚˜์˜ ์ฟผ๋ฆฌ๊ฐ€ ๋‹ด๊ฒจ ์žˆ๋Š” ๊ฒƒ

ex) ์—ฌ๋Ÿฌ๊ฐ€์ง€ ์กฐ๊ฑด์ด ํ•œ๋ฒˆ์— ๋‚˜์˜ฌ๋•Œ ๋น ๋ฅธ ์ฒ˜๋ฆฌ๊ฐ€ ๊ฐ€๋Šฅํ•จ

 

SELECT select_list
FROM ํ…Œ์ด๋ธ” or ๋ทฐ
WHERE ์กฐ๊ฑด์—ฐ์‚ฐ์ž (SELECT select_list
			FROM TABLE
			WHERE ์กฐ๊ฑด);

 

 

* ์„œ๋ธŒ์ฟผ๋ฆฌ๊ฐ€ ๋จผ์ € ์ˆ˜ํ–‰๋˜๊ณ  ๊ทธ ๊ฒฐ๊ณผ๊ฐ’์„ ๋ฉ”์ธ์ฟผ๋ฆฌ๋กœ ์ „ํ•ด์ค€๋‹ค. (๋ฉ”์ธ์ฟผ๋ฆฌ๊ฐ€ ๋จผ์ € ์‹คํ–‰๋  ๋•Œ๋„ ์žˆ๋‹ค)

 

* ์„œ๋ธŒ์ฟผ๋ฆฌ์˜ ์œ„์น˜์— ๋”ฐ๋ฅธ ์ด๋ฆ„

SELECT (์„œ๋ธŒ์ฟผ๋ฆฌ) <- 1ํ–‰๋งŒ ๋ฐ˜ํ™˜ ์‹œ ์Šค์นผ๋ผ ์„œ๋ธŒ์ฟผ๋ฆฌ

FROM (์„œ๋ธŒ์ฟผ๋ฆฌ) <- ์ธ๋ผ์ธ ๋ทฐ

WHERE (์„œ๋ธŒ์ฟผ๋ฆฌ) <- ์„œ๋ธŒ์ฟผ๋ฆฌ 

 

 

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

WHERE์ ˆ ์—ฐ์‚ฐ์ž ์˜ค๋ฅธ์ชฝ์— ์œ„์น˜ํ•˜๊ณ  ๋ฐ˜๋“œ์‹œ ๊ด„ํ˜ธ๋กœ ๋ฌถ๋Š”๋‹ค.

ํŠน๋ณ„ํ•œ ๊ฒฝ์šฐ ์ œ์™ธ, ORDER BY ์ ˆ์ด ์˜ฌ ์ˆ˜ ์—†๋‹ค.

๋‹จ์ผํ–‰ / ๋‹ค์ค‘ํ–‰์— ๋”ฐ๋ผ ์—ฐ์‚ฐ์ž ์„ ํƒ์ด ์ค‘์š”ํ•˜๋‹ค.

 

 

[๋‹จ์ผํ–‰ SubQuery]

๊ฒฐ๊ณผ๊ฐ’์ด 1ํ–‰๋งŒ ์ถœ๋ ฅ๋˜๋Š” ๊ฒƒ

 

  • = ๊ฐ™๋‹ค
  • <> ๊ฐ™์ง€์•Š๋‹ค
  • > ํฌ๋‹ค
  • >= ํฌ๊ฑฐ๋‹ค ๊ฐ™๋‹ค
  • < ์ž‘๋‹ค
  • <= ์ž‘๊ฑฐ๋‚˜ ๊ฐ™๋‹ค

 


[๋‹ค์ค‘ํ–‰ SubQuery]

๊ฒฐ๊ณผ๊ฐ’์ด 2๊ฑด ์ด์ƒ ์ถœ๋ ฅ๋˜๋Š” ๊ฒƒ

 

* ๋‹จ์ผํ–‰ ์—ฐ์‚ฐ์ž ์‚ฌ์šฉ ๋ถˆ๊ฐ€ !!

  • IN  ์„œ๋ธŒ์ฟผ๋ฆฌ ๊ฒฐ๊ณผ์™€ ๊ฐ™์€ ๊ฐ’ ์ฐพ๊ธฐ
  • EXISTS ์„œ๋ธŒ์ฟผ๋ฆฌ ๊ฐ’์ด ์žˆ์„ ๊ฒฝ์šฐ ๋ฉ”์ธ์ฟผ๋ฆฌ ์‹คํ–‰
  • >ANY ์„œ๋ธŒ์ฟผ๋ฆฌ ๊ฒฐ๊ณผ ๊ฐ’ ์ค‘ ์ตœ์†Ÿ๊ฐ’ ๋ฐ˜ํ™˜
  • <ANY ์„œ๋ธŒ์ฟผ๋ฆฌ ๊ฒฐ๊ณผ ๊ฐ’ ์ค‘ ์ตœ๋Œ“๊ฐ’ ๋ฐ˜ํ™˜
  • <ALL ์„œ๋ธŒ์ฟผ๋ฆฌ ๊ฒฐ๊ณผ ๊ฐ’ ์ค‘ ์ตœ์†Ÿ๊ฐ’ ๋ฐ˜ํ™˜
  • >ALL ์„œ๋ธŒ์ฟผ๋ฆฌ ๊ฒฐ๊ณผ ๊ฐ’ ์ค‘ ์ตœ๋Œ“๊ฐ’ ๋ฐ˜ํ™˜

 


[๋‹ค์ค‘์ปฌ๋Ÿผ SubQuery]

์„œ๋ธŒ์ฟผ๋ฆฌ ๊ฒฐ๊ณผ๊ฐ€ ์—ฌ๋Ÿฌ ์ปฌ๋Ÿผ์ธ ๊ฒฝ์šฐ

ex) ๊ธฐ๋ณธํ‚ค๋ฅผ ์—ฌ๋Ÿฌ์ปฌ๋Ÿผ ํ•ฉ์ณ์„œ ๋งŒ๋“ค์—ˆ์„ ๊ฒฝ์šฐ ํ•œ๋ฒˆ์— ๋น„๊ต

 

 


[์ƒํ˜ธ์—ฐ๊ด€ SubQuery]

๋ฉ”์ธ์ฟผ๋ฆฌ ๊ฐ’์„ ์„œ๋ธŒ์ฟผ๋ฆฌ์— ์ฃผ๊ณ , ์„œ๋ธŒ์ฟผ๋ฆฌ๋ฅผ ์‹คํ–‰ํ•œ ํ›„ ๋ฉ”์ธ์ฟผ๋ฆฌ๋กœ ๋ฐ˜ํ™˜ํ•ด์„œ ์ˆ˜ํ–‰ํ•˜๋Š” ์„œ๋ธŒ์ฟผ๋ฆฌ

์„œ๋กœ ์ฃผ๊ณ ๋ฐ›๋Š” ํ˜•ํƒœ ! (์„ฑ๋Šฅ์ด ๋งค์šฐ ๋‚˜์จ)

 

ex) emp2 ํ…Œ์ด๋ธ” ์ง์› ์ค‘ ์ž์‹ ์˜ ์ง๊ธ‰์˜ ํ‰๊ท  ์—ฐ๋ด‰๊ณผ ๊ฐ™๊ฑฐ๋‚˜ ๋งŽ์ด ๋ฐ›๋Š” ์‚ฌ๋žŒ๋“ค์˜ ์ •๋ณด ์ถœ๋ ฅ

 

 


[์Šค์นผ๋ผ ์„œ๋ธŒ์ฟผ๋ฆฌ Scalar Sub Query]

SELECT ์ ˆ์— ์˜ค๋Š” ์„œ๋ธŒ์ฟผ๋ฆฌ, ํ•œ๋ฒˆ์— ๊ฒฐ๊ณผ๋ฅผ 1ํ–‰์”ฉ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

 

* Outer Join ๊ณผ ๋™์ผํ•˜๋‹ค. ์กฐ์ธ ์ปฌ๋Ÿผ ๊ธฐ์ค€, ์ค‘๋ณต๋œ ๊ฐ’์ด ์—†๋Š” ๊ฒฝ์šฐ๋งŒ ( FROM ์ ˆ๋กœ ๋‚ด๋ฆฌ๋ฉด ๊ฐ™์€ ๊ฒฐ๊ณผ ๋™์ผ)

* ๋ฐ์ดํ„ฐ ์–‘์ด ์ ์€ ๊ฒฝ์šฐ JOIN ๋ณด๋‹ค , ์Šค์นผ๋ผ ์„œ๋ธŒ์ฟผ๋ฆฌ๊ฐ€ ์†๋„๊ฐ€ ๋น ๋ฅด๋‹ค.

* ๋ฉ”๋ชจ๋ฆฌ์— ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•ด๋‘๊ณ  ๊ฐ€์ ธ์˜ค๋Š” ๋ฐฉ์‹์ด๋ผ ๋น ๋ฅด๋‹ค. (ํ•˜์ง€๋งŒ ๋ฐ์ดํ„ฐ๊ฐ€ ๋งŽ์•„์ง€๋ฉด ์˜คํžˆ๋ ค ์˜ค๋ž˜๊ฑธ๋ฆผ)

 

 

 

[ WITH ์ ˆ ์„œ๋ธŒ์ฟผ๋ฆฌ ]

ํ…Œ์ด๋ธ”์„ ๋ฉ”๋ชจ๋ฆฌ์— ๋ทฐ์ฒ˜๋Ÿผ ๊ฐ€์ƒ ํ…Œ์ด๋ธ”๋กœ ์ƒ์„ฑ์‹œํ‚จ ํ›„ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜ค๋Š” ๊ธฐ๋ฒ•

 

*๋ฐ˜๋ณต์ˆ˜ํ–‰์ฟผ๋ฆฌ๋ฅผ ํ•œ๋ฒˆ๋งŒ ์ˆ˜ํ–‰ํ•ด์„œ ๊ฒฐ๊ณผ๋ฅผ ๋ฉ”๋ชจ๋ฆฌ์— ์˜ฌ๋ฆฌ๊ณ  , ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ˜๋ณต ์‚ฌ์šฉํ•œ๋‹ค. ์ผ๋ฐ˜์ ์ธ ์„œ๋ธŒ์ฟผ๋ฆฌ๋ณด๋‹ค ํšจ์œจ์ด ์ข‹์Œ. 

 

 

 

[ Exists ์—ฐ์‚ฐ์ž, IN ์—ฐ์‚ฐ์ž ์„œ๋ธŒ์ฟผ๋ฆฌ]

IN : ๋‹ค์ค‘ํ–‰ ์—ฐ์‚ฐ์ž, ๋‚ด๋ถ€์ ์œผ๋กœ ์ค‘๋ณต ๊ฐ’์„ ์ œ๊ฑฐํ•˜๋Š” ๊ฒƒ DISTINCT ์—ฐ์‚ฐ ํ•œ๋‹ค.

EXISTS : ์กด์žฌ ์—ฌ๋ถ€ ํ™•์ธ, ํ•˜๋‚˜๋ผ๋„ ์กด์žฌํ•˜๋ฉด ๊ฒ€์ƒ‰ํ•˜์ง€ ์•Š๊ณ  ๋น ์ ธ๋‚˜์˜ด (์„ธ๋ฏธ ์กฐ์ธ)

 

SELECT * FROM tab1 WHERE c1 IN  (SELECT c1 FROM t2)

SELECT * FROM t1 WHERE EXISTS (SELECT 1 FROM t2 WHERE t2.c1 = t1.c1)

 

* ๋‘๊ฐœ๋Š” ๊ฒฐ๊ณผ๊ฐ’์€ ๊ฐ™์ง€๋งŒ ๋‹ค๋ฅธ ๋ฉ”์ปค๋‹ˆ์ฆ˜์ด๋‹ค.

 

 

 

[ ์Šค์นผ๋ผ ์„œ๋ธŒ์ฟผ๋ฆฌ NULL ์ฒ˜๋ฆฌ ์ฃผ์˜ ]

ํ•ด๋‹น ๊ฐ’์ด ์—†์„ ๋•Œ NULL ์ฒ˜๋ฆฌ์‹œ ์‚ฌ์†Œํ•œ ์‹ค์ˆ˜๋ฅผ ํ•˜๊ฒŒ ๋˜๋Š” ๊ฒฝ์šฐ

SELECT name,(SELECT NVL(dname,'## not belog to a Dept..')
        FROM dept2 d
        WEHRE e.deptno = d.dcode) "DNAME"
FROM em2 e;

 

 

[ ์Šค์นผ๋ผ ์„œ๋ธŒ์ฟผ๋ฆฌ ์„ฑ๋Šฅ ํ–ฅ์ƒ ]

์Šค์นผ๋ผ ์„œ๋ธŒ์ฟผ๋ฆฌ์— ์กฐ์ธ๋˜๋Š” ์ปฌ๋Ÿผ์— ์ธ๋ฑ์Šค๊ฐ€ ์—†์œผ๋ฉด ๋น„ํšจ์œจ์ ์ด๊ฒŒ ๋œ๋‹ค. (full table scan)

CREATE INDEX IX_ORDER_T_01 ON ORDER_T (CUST_NO);

 

* ์Šค์นผ๋ผ ์„œ๋ธŒ์ฟผ๋ฆฌ ์กฐ์ธ ์ปฌ๋Ÿผ์— ์ธ๋ฑ์Šค๋ฅผ ์ƒ์„ฑํ•œ๋‹ค. => ๋ฐฐ์šฐ ๋นจ๋ผ์ง„๋‹ค.