๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

๐Ÿ“ฆ ๋ฐ์ดํ„ฐ ๋ฒ ์ด์Šค (DB) ๐Ÿ“ฆ/๐Ÿ…พ ์˜ค๋ผํด DB & SQL

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

by Meteora_ 2021. 2. 15.
728x90

์„œ๋ธŒ ์ฟผ๋ฆฌ(Sub Query)

์ถ”๊ฐ€์ •๋ณด๋ฅผ ์ œ๊ณตํ•  ๋ชฉ์ ์œผ๋กœ ํ•˜๋‚˜์˜ SQL ๋ฌธ์žฅ ๋‚ด๋ถ€์— ์กด์žฌํ•˜๋Š” SELECT ๋ฌธ์žฅ์„ ๋งํ•œ๋‹ค.

DML์— ์†ํ•˜๋Š” ๋ชจ๋“  ๋ฌธ์žฅ์— ์„œ๋ธŒ์ฟผ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

์„œ๋ธŒ์ฟผ๋ฆฌ๋Š” SELECT ๋ฌธ์žฅ์—์„œ ๋ฆฌ์ŠคํŠธ๋กœ ์˜ฌ ์ˆ˜ ์žˆ๋‹ค.

์—ฐ์‚ฐ์ž์˜ ์˜ค๋ฅธ์ชฝ์— ์™€์•ผํ•œ๋‹ค.

Order by๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋‹ค.


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

FROM ์ธ๋ผ์ธ ๋ทฐ

WHERE ์ค‘์ฒฉ ์„œ๋ธŒ์ฟผ๋ฆฌ

 

 

์ค‘์ฒฉ ์„œ๋ธŒ์ฟผ๋ฆฌ( Nested Subquery ) - WHERE ๋ฌธ์— ๋‚˜ํƒ€๋‚˜๋Š” ์„œ๋ธŒ์ฟผ๋ฆฌ

1.๋‹จ์ผ ํ–‰

2.๋ณต์ˆ˜(๋‹ค์ค‘) ํ–‰

3.๋‹ค์ค‘ ์ปฌ๋Ÿผ

 

์ธ๋ผ์ธ ๋ทฐ(Inline View) - FROM ๋ฌธ์— ๋‚˜ํƒ€๋‚˜๋Š” ์„œ๋ธŒ์ฟผ๋ฆฌ

 

์Šค์นผ๋ผ ์„œ๋ธŒ์ฟผ๋ฆฌ( Scalar Subquery ) - SELECT ๋ฌธ์— ๋‚˜ํƒ€๋‚˜๋Š” ์„œ๋ธŒ์ฟผ๋ฆฌ

 

 


์‹คํ–‰ ์ˆœ์„œ

 

์„œ๋ธŒ์ฟผ๋ฆฌ ์‹คํ–‰ -> ๋ฉ”์ธ(๋ถ€๋ชจ) ์ฟผ๋ฆฌ ์‹คํ–‰


 

์—ฐ์‚ฐ์ž

1) ๋‹จ์ผํ–‰ ์—ฐ์‚ฐ์ž

โ–ถ  =, >, <, >=, <=, <>

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

โ–ถ  in, any, all, exists, not 

ex) ๊ธฐ๋ณธ๋ฌธ๋ฒ•… < any(10 or 40 or 20 or 30 or 90) 



 

์ฐธ๊ณ  : [SQL] ์„œ๋ธŒ์ฟผ๋ฆฌ(Sub-Query) (tistory.com)

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
/*
SELECT 
FROM
WHERE
*/
 
SELECT e.employee_id, e.first_name
FROM employees e, departments d
WHERE e.department_id = d.department_id
    AND e.employee_id = 103;
 
SELECT a.first_name, a.employee_id,
    a.manager_id ,b.employee_id,
    b.first_name
 
FROM employees a, employees b  -- a๋Š” ์‚ฌ์›  b๋Š” ์ƒ์‚ฌ
WHERE a.manager_id = b.manager_id;
 
--SUB QUERY
--QUERY์•ˆ์˜   QUERY
--ํ•œ๊ฐœ์˜ ํ–‰( ROW) ์—์„œ ๊ฒฐ๊ณผ ๊ฐ’์ด ๋ฐ˜ํ™˜๋˜๋Š” QUERY
--RECORD -> ํ•œ๋ช…์˜ ๋ฐ์ดํ„ฐ
/*
 
SELECT ๋‹จ์ผ row ๋‹จ์ผ column(์‚ฐ์ถœ๋˜๋Š” ๋ฐ์ดํ„ฐ๋Š” ํ•œ๊ฐœ ์นผ๋Ÿผ๋„ ํ•œ๊ฐœ)  -- ๋ฌด์กฐ๊ฑด ํ•œ๊ฐœ๋กœ ๋‚˜์™€์•ผํ•จ.
FROM        ๋‹ค์ค‘ROW๋‹ค์ค‘ COLUMN์ด ๊ฐ€๋Šฅ
WHERE       ๋‹ค์ค‘ROW๋‹ค์ค‘ COLUMN์ด ๊ฐ€๋Šฅ
 
*/
SELECT first_name 
FROM employees;
 
SELECT SUM(SALARY), AVG(salary)  --๋‘๊ฐœ์ด์ƒ์˜ ์นผ๋Ÿผ์„ ๋ฝ‘๋Š”๊ฒŒ ๋‹ค์ค‘ ์ปฌ๋Ÿผ
FROM employees;
 
SELECT SUM(SALARY)
FROM employees;
 
 
--select์ ˆ
SELECT employee_id, first_name,
    (SELECT first_name
    FROM employees
    WHERE employee_id = 100)
 
FROM employees;
 
--SELECT first_name,
--(SELECT SUM(SALARY) FROM employees)
---FROM employees;
 
--FROM์ ˆ  
SELECT employee_id, first_name, salary
FROM (SELECT employee_id, first_name, salary
        FROM employees
        WHERE department_id = 100)
WHERE salary > 8000;
 
--๋ถ€์„œ๋ฒˆํ˜ธ๊ฐ€ 50๋ฒˆ ๊ธ‰์—ฌ๊ฐ€ 6000์ด์ƒ์ธ ์‚ฌ์›
SELECT
    *
FROM employees
WHERE department_id = 50
    and salary >= 6000;
 
-- FROM ์ ˆ์„ ์‚ฌ์šฉ    
SELECT employee_id, salary, department_id 
FROM ( SELECT employee_id, salary, department_id 
 
        FROM employees
        WHERE department_id = 50)
WHERE  salary >= 6000;
 
--๊ธ‰์—ฌ์˜ ํ•ฉ๊ณ„์™€ ,์ธ์›์ˆ˜ ,์‚ฌ์›๋ช…, ์›”๊ธ‰
SELECT job_id 
FROM employees
GROUP BY job_id;
 
--๊ธ‰์—ฌ์˜ ํ•ฉ๊ณ„์™€ ,์ธ์›์ˆ˜ ,์‚ฌ์›๋ช…, ์›”๊ธ‰ FROM์ ˆ ์‚ฌ์šฉํ•จ
SELECT e.employee_id, e.salary,
    e.job_id, j.job_id,
    j."๊ธ‰์—ฌ์˜ ํ•ฉ๊ณ„", j.์ธ์›์ˆ˜
FROM employees e, (SELECT job_id, SUM(salary) as  "๊ธ‰์—ฌ์˜ ํ•ฉ๊ณ„" ,count(*) as  ์ธ์›์ˆ˜
    FROM employees
    GROUP BY job_id) j 
 
    WHERE e.job_id = j.job_id;
 
--where
--ํ‰๊ท ๊ธ‰์—ฌ๋ณด๋‹ค ๋งŽ์ด ๋ฐ›๋Š” ์‚ฌ์›
--ํ‰๊ท ๊ธ‰์—ฌ๋ฅผ ์„ญ ์ฟผ๋ฆฌ๋กœ
SELECT first_name,  salary
FROM employees
WHERE salary > (SELECT AVG(salary) FROM employees);
 
 -- department_id = 90์˜ ์—…๋ฌด(job_id)๋ฅผ ์‚ฐ์ถœํ•˜๊ณ ์‹ถ๋‹ค
 SELECT job_id, first_name
 FROM employees
 WHERE department_id = 90;
 
 SELECT job_id, first_name, salary
 FROM employees
 WHERE job_id IN( SELECT job_id
 FROM employees
 WHERE department_id = 90);
 
 --๋ถ€์„œ๋ณ„๋กœ ๊ฐ€์žฅ ๊ธ‰์—ฌ๋ฅผ ์ ๊ฒŒ ๋ฐ›๋Š” ์‚ฌ์›๊ณผ ๊ฐ™์€ ๊ธ‰์—ฌ๋ฅผ ๋ฐ›๋Š” ์‚ฌ์›
 SELECT e.employee_id, e.first_name,e.last_name, e.salary, d.department_name
 FROM employees e, departments d
 WHERE salary = (SELECT MIN(salary)  FROM employees);
 
 
 SELECT employee_id, first_name, salary, department_id
 FROM employees 
 WHERE salary IN (SELECT MIN(salary)  
                    FROM employees
                    GROUP BY department_id);
 
 
--๋ถ€์„œ๋ณ„๋กœ ๊ฐ€์žฅ ๊ธ‰์—ฌ๋ฅผ ์ ๊ฒŒ ๋ฐ›๋Š” ์‚ฌ์›๊ณผ ๊ธ‰์—ฌ   
SELECT department_id, first_name, salary
FROM employees
WHERE (department_id,salary) IN(SELECT department_id, MIN(salary)
                        FROM employees
                        GROUP BY department_id)
                    ORDER BY department_id;
 
 
 
SELECT
    *
FROM departments;
 
SELECT
    *
FROM employees;
cs

๋Œ“๊ธ€