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

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

ORDER, GROUP BY๋ฌธ - ๋ฌธ์ œ 4 (Scott)

by Meteora_ 2021. 2. 10.
728x90
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
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
-- SCOTT
--19) emp ํ…Œ์ด๋ธ”์—์„œ ์‚ฌ์›๋ฒˆํ˜ธ, ์‚ฌ์›์ด๋ฆ„, ์ž…์‚ฌ์ผ์„ ์ถœ๋ ฅํ•˜๋Š”๋ฐ ์ž…์‚ฌ์ผ์ด ๋น ๋ฅธ ์‚ฌ๋žŒ์ˆœ์œผ๋กœ ์ •๋ ฌํ•˜์‹œ์˜ค.
SELECT empno, ename, hiredate
FROM emp
ORDER BY hiredate;
 
--20) emp ํ…Œ์ด๋ธ”์—์„œ ์‚ฌ์›์ด๋ฆ„, ๊ธ‰์—ฌ, ์—ฐ๋ด‰์„ ๊ตฌํ•˜๊ณ  ์—ฐ๋ด‰์ด ๋งŽ์€ ์ˆœ์œผ๋กœ ์ •๋ ฌํ•˜์‹œ์˜ค.
SELECT
    *
FROM emp;
 
SELECT ename, sal, sal*12 as ์—ฐ๋ด‰
FROM emp
ORDER BY ์—ฐ๋ด‰ DESC;
--21)10๋ฒˆ ๋ถ€์„œ์™€ 20๋ฒˆ๋ถ€์„œ์—์„œ ๊ทผ๋ฌดํ•˜๊ณ  ์žˆ๋Š” ์‚ฌ์›์˜ ์ด๋ฆ„๊ณผ ๋ถ€์„œ๋ฒˆํ˜ธ๋ฅผ ์ถœ๋ ฅํ•˜๋Š”๋ฐ ์ด๋ฆ„์„ ์˜๋ฌธ์ž์ˆœ์œผ๋กœ ํ‘œ์‹œํ•˜์‹œ์˜ค.
SELECT ename, deptno
FROM emp
WHERE deptno IN(10,20)
ORDER BY ename ASC;
 
--22) ์ปค๋ฏธ์…˜์„ ๋ฐ›๋Š” ๋ชจ๋“  ์‚ฌ์›์˜ ์ด๋ฆ„,๊ธ‰์—ฌ ๋ฐ ์ปค๋ฏธ์…˜์„ ์ปค๋ฏธ์…˜์„ ๊ธฐ์ค€์œผ๋กœ ๋‚ด๋ฆผ์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌํ•˜์—ฌ ํ‘œ์‹œํ•˜์‹ญ์‹œ์˜ค.
SELECT ename, comm
FROM emp
WHERE comm is not null
    and comm != 0    --<>๋กœ ์“ธ์ˆ˜์žˆ๋‹ค.
    ORDER BY comm DESC;
 
--23) empํ…Œ์ด๋ธ”์˜ ์—…๋ฌด(job)์„ ์ฒซ๊ธ€์ž๋Š” ๋Œ€๋ฌธ์ž ๋‚˜๋จธ์ง€๋Š” ์†Œ๋ฌธ์ž๋กœ ์ถœ๋ ฅํ•˜์‹œ์˜ค.    INITCAP() ์ฒซ๊ธ€์งœ๋Š” ๋Œ€๋ฌธ์ž๋กœ ๋‚˜๋จธ์ง„ ์†Œ์ˆ˜
SELECT job, INITCAP(job)
FROM emp;
 
 
--24) empํ…Œ์ด๋ธ”์—์„œ ์‚ฌ์›์ด๋ฆ„ ์ค‘ A๊ฐ€ ํฌํ•จ๋œ ์‚ฌ์›์ด๋ฆ„์„ ๊ตฌํ•˜๊ณ  ๊ทธ ์ด๋ฆ„ ์ค‘ ์•ž์—์„œ 3์ž๋งŒ ์ถ”์ถœํ•˜์—ฌ ์ถœ๋ ฅ
SELECT ename, SUBSTR(ename,1,3)  
FROM emp
WHERE ename LIKE '%A%';
 
--25) ์ด๋ฆ„์˜ ์„ธ๋ฒˆ์งธ ๋ฌธ์ž๊ฐ€ A์ธ ๋ชจ๋“  ์‚ฌ์›์˜ ์ด๋ฆ„์„ ํ‘œ์‹œํ•˜์‹œ์˜ค.
SELECT ename
FROM emp
WHERE SUBSTR(ename,3,1= 'A';
 
--26) ์ด๋ฆ„์ด J,A ๋˜๋Š” M์œผ๋กœ ์‹œ์ž‘ํ•˜๋Š” ๋ชจ๋“  ์‚ฌ์›์˜ ์ด๋ฆ„(์ฒซ ๊ธ€์ž๋Š” ๋Œ€๋ฌธ์ž๋กœ, ๋‚˜๋จธ์ง€ ๊ธ€์ž๋Š” ์†Œ๋ฌธ์ž๋กœ ํ‘œ์‹œ) ๋ฐ ์ด๋ฆ„์˜ ๊ธธ์ด๋ฅผ ํ‘œ์‹œํ•˜์‹œ์˜ค.(์—ด ๋ ˆ์ด๋ธ”์€ name๊ณผ length๋กœ ํ‘œ์‹œ)
SELECT ename, INITCAP(ename) AS name, length(ename)
FROM emp 
WHERE ename LIKE 'J%' OR ename LIKE 'A%' OR ename LIKE 'M%';
 
--27) ์ด๋ฆ„์˜ ๊ธ€์ž์ˆ˜๊ฐ€ 6์ž ์ด์ƒ์ธ ์‚ฌ์›์˜ ์ด๋ฆ„์„ ์†Œ๋ฌธ์ž๋กœ ์ด๋ฆ„๋งŒ ์ถœ๋ ฅํ•˜์‹œ์˜ค
SELECT lower(ename)
FROM emp
WHERE length(ename) >= 6;
 
--28) ์ด๋ฆ„์˜ ๊ธ€์ž์ˆ˜๊ฐ€ 6์ž ์ด์ƒ์ธ ์‚ฌ๋žŒ์˜ ์ด๋ฆ„์„ ์•ž์—์„œ 3์ž๋งŒ ๊ตฌํ•˜์—ฌ ์†Œ๋ฌธ์ž๋กœ ์ถœ๋ ฅํ•˜์‹œ์˜ค.
SELECT SUBSTR(lower(ename),1,3)
FROM emp
WHERE length(ename) >=6;
 
--29) ๋ชจ๋“  ์‚ฌ์›์˜ ์ด๋ฆ„๊ณผ ๊ธ‰์—ฌ๋ฅผ ํ‘œ์‹œํ•˜์‹œ์˜ค. ๊ธ‰์—ฌ๋Š” 15์ž ๊ธธ์ด๋กœ ์™ผ์ชฝ์— $๊ธฐํ˜ธ๊ฐ€ ์ฑ„์›Œ์ง„ ํ˜•์‹์œผ๋กœ ํ‘œ๊ธฐํ•˜๊ณ  ์—ด๋ ˆ์ด๋ธ”์„ SALARY๋กœ ์ง€์ •ํ•˜์‹œ์˜ค.
SELECT ename, LPAD(sal, 15'&') AS SALARY
FROM emp;
 
 
 
--30) ์˜ค๋Š˜๋ถ€ํ„ฐ ์ด๋ฒˆ๋‹ฌ์˜ ๋งˆ์ง€๋ง‰๋‚ ๊นŒ์ง€์˜ ๋‚จ์€ ๋‚  ์ˆ˜๋ฅผ ๊ตฌํ•˜์‹œ์˜ค.
SELECT LAST_DAY(SYSDATE) - SYSDATE  
FROM dual;
 
--31) empํ…Œ์ด๋ธ”์—์„œ ๊ฐ ์‚ฌ์›์— ๋Œ€ํ•ด ์‚ฌ์›๋ฒˆํ˜ธ, ์ด๋ฆ„, ๊ธ‰์—ฌ ๋ฐ 15% ์ธ์ƒ๋œ ๊ธ‰์—ฌ๋ฅผ ์ •์ˆ˜(๋ฐ˜์˜ฌ๋ฆผ)๋กœ ํ‘œ์‹œํ•˜์‹œ์˜ค.
--    ์ธ์ƒ๋œ ๊ธ‰์—ฌ์—ด์˜ ๋ ˆ์ด๋ธ”์„ New Salary๋กœ ์ง€์ •ํ•˜์‹œ์˜ค.
SELECT empno, ename, sal, ROUND(sal*1.15) as "New Salary"
FROM emp;
 
--32) empํ…Œ์ด๋ธ”์—์„œ ์›”๊ธ‰์˜ 4์˜ ๋ฐฐ์ˆ˜(mod(sal,4)=0)์ธ ์‚ฌ์›์˜ ์ด๋ฆ„๊ณผ ์›”๊ธ‰์„ ์ถœ๋ ฅํ•˜์‹œ์˜ค.(์„ธ์ž๋ฆฌ ๋‹จ์œ„ ์‰ผํ‘œ ํ‘œ์‹œ)
SELECT ename, TO_CHAR(sal,'999,999,999'
FROM emp
WHERE mod(sal, 4= 0 ;
 
-- 33) ๊ฐ ์‚ฌ์›์˜ ์ด๋ฆ„์„ ํ‘œ์‹œํ•˜๊ณ  ๊ทผ๋ฌด ๋‹ฌ ์ˆ˜(์ž…์‚ฌ์ผ๋กœ๋ถ€ํ„ฐ ํ˜„์žฌ๊นŒ์ง€์˜ ๋‹ฌ์ˆ˜)๋ฅผ ๊ณ„์‚ฐํ•˜์—ฌ ์—ด ๋ ˆ์ด๋ธ”์„ MONTHS_WORKED๋กœ ์ง€์ •ํ•˜์‹œ์˜ค. 
-- ๊ฒฐ๊ณผ๋Š” ์ •์ˆ˜๋กœ ๋ฐ˜์˜ฌ๋ฆผํ•˜์—ฌ ํ‘œ์‹œํ•˜๊ณ  ๊ทผ๋ฌด๋‹ฌ ์ˆ˜๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌํ•˜์‹œ์˜ค.
SELECT ename, ROUND(MONTHS_BETWEEN(SYSDATE,hiredate)) AS "MONTHS_WORKED"
FROM emp
ORDER BY MONTHS_WORKED ASC;
 
-- 34)empํ…Œ์ด๋ธ”์—์„œ ์ด๋ฆ„, ์—…๋ฌด, ๊ทผ๋ฌด์—ฐ์ฐจ๋ฅผ ์ถœ๋ ฅํ•˜์‹œ์˜ค.
SELECT ename, job, TRUNC(MONTHS_BETWEEN(SYSDATE,hiredate)/12)
FROM emp;
 
-- 35)empํ…Œ์ด๋ธ”์—์„œ ์‚ฌ์›์ด๋ฆ„, ์›”๊ธ‰, ์›”๊ธ‰๊ณผ ์ปค๋ฏธ์…˜์„ ๋”ํ•œ ๊ฐ’์„ ์ปฌ๋Ÿผ๋ช… ์‹ค๊ธ‰์—ฌ๋ผ๊ณ  ํ•ด์„œ ์ถœ๋ ฅ.
-- ๋‹จ, NULL๊ฐ’์€ ๋‚˜ํƒ€๋‚˜์ง€ ์•Š๊ฒŒ ์ž‘์„ฑํ•˜์‹œ์˜ค.
--NVL(comm,0) //comm์ด null ์ด๋ฉด 0์ด๋‹ค
SELECT ename, sal, sal + NVL(comm,0) AS ์‹ค๊ธ‰์—ฌ
FROM emp;
 
-- 36)์›”๊ธ‰๊ณผ ์ปค๋ฏธ์…˜์„ ํ•ฉ์นœ ๊ธˆ์•ก์ด 2,000์ด์ƒ์ธ ๊ธ‰์—ฌ๋ฅผ ๋ฐ›๋Š” ์‚ฌ์›์˜ ์ด๋ฆ„,์—…๋ฌด,์›”๊ธ‰,์ปค๋ฏธ์…˜,๊ณ ์šฉ๋‚ ์งœ๋ฅผ ์ถœ๋ ฅํ•˜์‹œ์˜ค. ๋‹จ, ๊ณ ์šฉ๋‚ ์งœ๋Š” 1980-12-17 ํ˜•ํƒœ๋กœ ์ถœ๋ ฅํ•˜์‹œ์˜ค.
SELECT ename, job, sal, NVL(comm,0), TO_CHAR(hiredate,'yyyy-mm-dd')
FROM emp
WHERE sal + NVL(comm,0>=2000;
 
-- 38)๋ชจ๋“  ์‚ฌ์›์˜ ๊ธ‰์—ฌ์˜ ์ตœ๊ณ ์•ก, ์ตœ์ €์•ก, ์ด์•ก ๋ฐ ํ‰๊ท ์•ก์„ ํ‘œ์‹œํ•˜์‹œ์˜ค. ์—ด ๋ ˆ์ด๋ธ”์„ ๊ฐ๊ฐ maximum,minimum,sum ๋ฐ average๋กœ ์ง€์ •ํ•˜๊ณ  
-- ๊ฒฐ๊ณผ๋ฅผ ์ •์ˆ˜๋กœ ๋ฐ˜์˜ฌ๋ฆผํ•˜๊ณ  ์„ธ์ž๋ฆฌ ๋‹จ์œ„๋กœ ,๋ฅผ ๋ช…์‹œํ•˜์‹œ์˜ค.
SELECT TO_CHAR(MAX(sal),'9,999') as maximum ,
    TO_CHAR(MIN(sal),'9,999') as minimum,
    TO_CHAR(SUM(sal),'99,999') as sum,
    TO_CHAR(AVG(sal),'9,999') as  average
FROM emp;
 
-- 39) ์—…๋ฌด๊ฐ€ ๋™์ผํ•œ ์‚ฌ์› ์ˆ˜๋ฅผ ํ‘œ์‹œํ•˜๋Š” ์งˆ์˜๋ฅผ ์ž‘์„ฑํ•˜์‹œ์˜ค.
SELECT job, count(*)
FROM emp
GROUP BY job;
 
-- 40) empํ…Œ์ด๋ธ”์—์„œ 30๋ฒˆ๋ถ€์„œ์˜ ์‚ฌ์›์ˆ˜๋ฅผ ๊ตฌํ•˜์‹œ์˜ค.
SELECT count(*)
FROM emp
WHERE deptno = 30;
 
-- 41) empํ…Œ์ด๋ธ”์—์„œ ์—…๋ฌด๋ณ„ ์ตœ๊ณ  ์›”๊ธ‰์„ ๊ตฌํ•˜๊ณ  ์—…๋ฌด,์ตœ๊ณ  ์›”๊ธ‰์„ ์ถœ๋ ฅํ•˜์‹œ์˜ค.
SELECT job, MAX(sal)
FROM emp
GROUP BY job;
 
-- 42) empํ…Œ์ด๋ธ”์—์„œ 20๋ฒˆ๋ถ€์„œ์˜ ๊ธ‰์—ฌ ํ•ฉ๊ณ„๋ฅผ ๊ตฌํ•˜๊ณ  ๊ธ‰์—ฌ ํ•ฉ๊ณ„ ๊ธˆ์•ก์„ ์ถœ๋ ฅํ•˜์‹œ์˜ค.
SELECT sum(sal)   
FROM emp
WHERE deptno = 20;
 
-- 43) empํ…Œ์ด๋ธ”์—์„œ ๋ถ€์„œ๋ณ„๋กœ ์ง€๊ธ‰๋˜๋Š” ์ด์›”๊ธ‰์—์„œ ๊ธˆ์•ก์ด 7,000์ด์ƒ์ธ ๋ถ€์„œ๋ฒˆํ˜ธ, ์ด์›”๊ธ‰์„ ์ถœ๋ ฅํ•˜์‹œ์˜ค.
SELECT deptno, SUM(sal)
FROM emp
GROUP BY deptno
HAVING SUM(sal) >= 7000;
 
-- 44) empํ…Œ์ด๋ธ”์—์„œ ์—…๋ฌด๋ณ„๋กœ ์‚ฌ๋ฒˆ์ด ์ œ์ผ ๋Šฆ์€ ์‚ฌ๋žŒ์„ ๊ตฌํ•˜๊ณ  ๊ทธ ๊ฒฐ๊ณผ ๋‚ด์—์„œ ์‚ฌ๋ฒˆ์ด 79๋กœ ์‹œ์ž‘ํ•˜๋Š” ๊ฒฐ๊ณผ๋งŒ ๋ณด์—ฌ์ฃผ์‹œ์˜ค.
SELECT job, MAX(empno)
FROM emp
GROUP BY job
HAVING MAX(empno) LIKE '79%';  
 
-- 45) empํ…Œ์ด๋ธ”์—์„œ ์—…๋ฌด๋ณ„ ์ด์›”๊ธ‰์„ ์ถœ๋ ฅํ•˜๋Š”๋ฐ ์—…๋ฌด๊ฐ€ 'MANAGER'์ธ ์‚ฌ์›๋“ค์€ ์ œ์™ธํ•˜๊ณ  ์ด์›”๊ธ‰์ด 5,000๋ณด๋‹ค ํฐ ์—…๋ฌด์™€ ์ด์›”๊ธ‰๋งŒ ์ถœ๋ ฅํ•˜์‹œ์˜ค.
SELECT job, SUM(sal)
FROM emp
WHERE job  NOT LIKE 'MANAGER'
-- != ์‚ฌ์šฉ๊ฐ€๋Šฅ
GROUP BY job
HAVING SUM(sal) > 5000;
 
-- 46)empํ…Œ์ด๋ธ”์—์„œ ์—…๋ฌด๋ณ„๋กœ ์‚ฌ์›์ˆ˜๊ฐ€ 4๋ช… ์ด์ƒ์ธ ์—…๋ฌด์™€ ์ธ์›์ˆ˜๋ฅผ ์ถœ๋ ฅํ•˜์‹œ์˜ค.
SELECT job, count(*)
FROM emp
GROUP BY job
HAVING count(*>= 4;
 
-- 47)empํ…Œ์ด๋ธ”์—์„œ ์‚ฌ์›์ˆ˜๊ฐ€ 5๋ช…์ด ๋„˜๋Š” ๋ถ€์„œ์˜ ๋ถ€์„œ๋ฒˆํ˜ธ์™€ ์‚ฌ์›์ˆ˜๋ฅผ ๊ตฌํ•˜์‹œ์˜ค.
SELECT deptno, count(*)
FROM emp
GROUP BY deptno
HAVING count(deptno) >= 5;
 
-- 48)empํ…Œ์ด๋ธ”์—์„œ ๋ถ€์„œ๋ณ„ ๊ธ‰์—ฌํ‰๊ท ์„ ๊ตฌํ•  ๋•Œ ์†Œ์ˆ˜์  3์ž๋ฆฌ์—์„œ ๋ฐ˜์˜ฌ๋ฆผํ•ด์„œ 2์ž๋ฆฌ๊นŒ์ง€ ๊ตฌํ•˜๊ณ  ๋ถ€์„œ๋ฒˆํ˜ธ, ๊ธ‰์—ฌํ‰๊ท ์„ ์ถœ๋ ฅํ•˜์‹œ์˜ค.
SELECT deptno, ROUND(avg(sal),2)
FROM emp 
GROUP BY deptno;
cs

๋Œ“๊ธ€