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

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

JOIN๋ฌธ - ๋ฌธ์ œ1

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
-- 50) ๋ชจ๋“  ์‚ฌ์›์˜ ์ด๋ฆ„, ๋ถ€์„œ๋ฒˆํ˜ธ, ๋ถ€์„œ์ด๋ฆ„์„ ํ‘œ์‹œํ•˜์‹œ์˜ค.(emp,dept)
SELECT ename, empno, a.deptno, b.deptno, b.dname 
FROM emp a , dept b
WHERE a.deptno = b.deptno;
 
SELECT
    *
FROM emp;
--51) ์—…๋ฌด๊ฐ€ MANAGER์ธ ์‚ฌ์›์˜ ์ •๋ณด๋ฅผ ์ด๋ฆ„,์—…๋ฌด,๋ถ€์„œ๋ช…,๊ทผ๋ฌด์ง€ ์ˆœ์œผ๋กœ
--    ์ถœ๋ ฅํ•˜์‹œ์˜ค.(emp,dept)
SELECT a.ename, a.job, b.dname, b.loc
FROM emp a, dept b
WHERE a.deptno = b.deptno
        and a.job = 'MANAGER';
 
-- 52) ์ปค๋ฏธ์…˜์„ ๋ฐ›๊ณ  ๊ธ‰์—ฌ๊ฐ€ 1,600์ด์ƒ์ธ ์‚ฌ์›์˜ ์‚ฌ์›์ด๋ฆ„,๋ถ€์„œ๋ช…,๊ทผ๋ฌด์ง€๋ฅผ ์ถœ๋ ฅํ•˜์‹œ์˜ค
SELECT a.ename, b.dname,b.loc
FROM emp a, dept b
WHERE a.deptno = b.deptno
        and a.comm is not null
        and a.sal >= 1600   ;
-- 53) ๊ทผ๋ฌด์ง€๊ฐ€ CHICAGO์ธ ๋ชจ๋“  ์‚ฌ์›์˜ ์ด๋ฆ„,์—…๋ฌด,๋ถ€์„œ๋ฒˆํ˜ธ ๋ฐ ๋ถ€์„œ์ด๋ฆ„์„ ํ‘œ์‹œํ•˜์‹œ์˜ค.
SELECT a.ename, a.job, b.deptno, b.dname, b.loc 
FROM emp a , dept b
WHERE a.deptno = b.deptno
        and b.loc = 'CHICAGO';
 
 
 
-- 54) ๊ทผ๋ฌด์ง€๋ณ„๋กœ ๊ทผ๋ฌดํ•˜๋Š” ์‚ฌ์›์˜ ์ˆ˜๊ฐ€ 5๋ช… ์ดํ•˜์ธ ๊ฒฝ์šฐ, ์ธ์›์ด ์ ์€ ๋„์‹œ์ˆœ์œผ๋กœ ์ •๋ ฌํ•˜์‹œ์˜ค.
-- (๊ทผ๋ฌด ์ธ์›์ด 0๋ช…์ธ ๊ณณ๋„ ํ‘œ์‹œ)
SELECT b.loc, count(*)
FROM emp a, dept b
WHERE a.deptno = b.deptno
GROUP BY b.loc
HAVING count(*<= 5
ORDER BY count(*) ASC;
 
 
 
-- 55) ์‚ฌ์›์˜ ์ด๋ฆ„ ๋ฐ ์‚ฌ์› ๋ฒˆํ˜ธ๋ฅผ ๊ด€๋ฆฌ์ž์˜ ์ด๋ฆ„๊ณผ ๊ด€๋ฆฌ์ž ๋ฒˆํ˜ธ์™€ ํ•จ๊ป˜ ํ‘œ์‹œํ•˜๊ณ  
-- ๊ฐ๊ฐ์˜ ์—ด ๋ ˆ์ด๋ธ”์€ employee, emp#, manager, mgr#๋กœ ์ง€์ •ํ•˜์‹œ์˜ค.
SELECT a.ename as employee, a.empno as "emp#", b.ename as manager, b.empno as "mgr#"
FROM emp a, emp b
WHERE a.MGR = b.empno;
 
SELECT
    *
FROM emp;
 
 
-- 56) ๊ด€๋ฆฌ์ž๋ณด๋‹ค ๋จผ์ € ์ž…์‚ฌํ•œ ๋ชจ๋“  ์‚ฌ์›์˜ ์ด๋ฆ„ ๋ฐ ์ž…์‚ฌ์ผ์„ 
-- ๊ด€๋ฆฌ์ž์˜ ์ด๋ฆ„ ๋ฐ ์ž…์‚ฌ์ผ๊ณผ ํ•จ๊ป˜ ํ‘œ์‹œํ•˜๊ณ  ๊ด€๋ฆฌ์ž๋ณด๋‹ค ์ž…์‚ฌ์ผ์ด ๋น ๋ฅธ ์‚ฌ์›์„ ์‚ฐ์ถœํ•˜๋ผ.
-- ์—ด ๋ ˆ์ด๋ธ”์„ ๊ฐ๊ฐ employee, emp hired, manager, mgr hired๋กœ ์ง€์ •
SELECT a.ename, a.hiredate, b.ename, b.hiredate
FROM emp a, emp b
WHERE a.mgr = b.empno
    and a.hiredate <  b.hiredate;
 
-- 57) ์‚ฌ์›์˜ ์ด๋ฆ„ ๋ฐ ์‚ฌ์›๋ฒˆํ˜ธ๋ฅผ ๊ด€๋ฆฌ์ž์˜ ์ด๋ฆ„๊ณผ ๊ด€๋ฆฌ์ž ๋ฒˆํ˜ธ์™€ ํ•จ๊ป˜ ํ‘œ์‹œํ•˜๊ณ  
-- ๊ฐ๊ฐ์˜ ์—ด ๋ ˆ์ด๋ธ”์€ employee, emp#, manager, mgr#๋กœ ์ง€์ •ํ•˜๋Š”๋ฐ 
-- King์„ ํฌํ•จํ•˜์—ฌ ๊ด€๋ฆฌ์ž๊ฐ€ ์—†๋Š” ๋ชจ๋“  ์‚ฌ์›์„ ํ‘œ์‹œํ•˜๋„๋ก ํ•˜๊ณ  
-- ๊ฒฐ๊ณผ๋ฅผ ์‚ฌ์›๋ฒˆํ˜ธ๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์ •๋ ฌ
 
-- left ์‚ฌ์šฉ
 
SELECT a.ename AS employee, a.empno AS "emp#"
        ,b.ename AS manager, b.empno AS "mgr#"
FROM emp a, emp b
WHERE a.mgr = b.empno(+)
ORDER BY a.empno;
 
-- 58) ์ง€์ •ํ•œ ๋ถ€์„œ๋ฒˆํ˜ธ, ์‚ฌ์›์ด๋ฆ„ ๋ฐ ์ง€์ •ํ•œ ์‚ฌ์›๊ณผ ๋™์ผํ•œ ๋ถ€์„œ์—์„œ ๊ทผ๋ฌดํ•˜๋Š” 
-- ๋ชจ๋“  ์‚ฌ์›์„ ํ‘œ์‹œํ•˜๋„๋ก ์งˆ์˜๋ฅผ ์ž‘์„ฑํ•˜๊ณ  
-- ๋ถ€์„œ๋ฒˆํ˜ธ๋Š” department, ์‚ฌ์›์ด๋ฆ„์€ employee, ๋™์ผํ•œ ๋ถ€์„œ์—์„œ ๊ทผ๋ฌดํ•˜๋Š” ์‚ฌ์›์€ colleague๋กœ ํ‘œ์‹œํ•˜์‹œ์˜ค.
-- (๋ถ€์„œ๋ฒˆํ˜ธ, ์‚ฌ์›์ด๋ฆ„,๋™๋ฃŒ ์ˆœ์œผ๋กœ ์˜ค๋ฆ„์ฐจ์ˆœ ์ •๋ ฌ) (์–ด๋ ค์›€)********************
SELECT b.deptno as department , a.ename as employee
FROM emp a, emp b
WHERE a.deptno = b.deptno
    and a.empno <> b.empno
   ORDER BY a.deptno ASC, a.ename ASC, b.ename;
 
-- 59)10๋ฒˆ ๋ถ€์„œ์—์„œ ๊ทผ๋ฌดํ•˜๋Š” ์‚ฌ์›๋“ค์˜ 
-- ๋ถ€์„œ๋ฒˆํ˜ธ, ๋ถ€์„œ์ด๋ฆ„, ์‚ฌ์›์ด๋ฆ„, ์›”๊ธ‰, ๊ธ‰์—ฌ๋“ฑ๊ธ‰์„ ์ถœ๋ ฅํ•˜์‹œ์˜ค
SELECT e.deptno, d.dname, e.ename, e.sal, s.grade
 
FROM emp e, dept d, salgrade s
WHERE e.deptno = d.deptno
    AND e.deptno = 10
    AND e.sal BETWEEN s.losal AND s.hisal;
 
 
SELECT empno, ename, trunc(TO_DATE(SYSDATE)-hiredate) AS "๊ทผ๋ฌด ์ผ์ˆ˜"
FROM emp
ORDER BY "๊ทผ๋ฌด ์ผ์ˆ˜" DESC;
 
SELECT empno, ename, trunc(TO_DATE('2021-02-10')-hiredate) AS "๊ทผ๋ฌด ์ผ์ˆ˜"
FROM emp
ORDER BY "๊ทผ๋ฌด ์ผ์ˆ˜" DESC;
 
SELECT a.empno AS ์‚ฌ์›๋ฒˆํ˜ธ,
        a.ename AS ์‚ฌ์›์ด๋ฆ„,
        NVL(a.comm,0) AS ๋ณด๋„ˆ์Šค,
        b.deptno AS ๋ถ€์„œ๋ฒˆํ˜ธ,
        b.dname AS ๋ถ€์„œ์ด๋ฆ„,
        b.loc AS ๋ถ€์„œ์œ„์น˜
FROM emp a, dept b
WHERE a.deptno = b.deptno
    and b.loc LIKE '%GO';
cs
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
-- 50) ๋ชจ๋“  ์‚ฌ์›์˜ ์ด๋ฆ„, ๋ถ€์„œ๋ฒˆํ˜ธ, ๋ถ€์„œ์ด๋ฆ„์„ ํ‘œ์‹œํ•˜์‹œ์˜ค.(emp,dept)
SELECT ename, empno, a.deptno, b.deptno, b.dname 
FROM emp a , dept b
WHERE a.deptno = b.deptno;
 
SELECT
    *
FROM emp;
--51) ์—…๋ฌด๊ฐ€ MANAGER์ธ ์‚ฌ์›์˜ ์ •๋ณด๋ฅผ ์ด๋ฆ„,์—…๋ฌด,๋ถ€์„œ๋ช…,๊ทผ๋ฌด์ง€ ์ˆœ์œผ๋กœ
--    ์ถœ๋ ฅํ•˜์‹œ์˜ค.(emp,dept)
SELECT a.ename, a.job, b.dname, b.loc
FROM emp a, dept b
WHERE a.deptno = b.deptno
        and a.job = 'MANAGER';
 
-- 52) ์ปค๋ฏธ์…˜์„ ๋ฐ›๊ณ  ๊ธ‰์—ฌ๊ฐ€ 1,600์ด์ƒ์ธ ์‚ฌ์›์˜ ์‚ฌ์›์ด๋ฆ„,๋ถ€์„œ๋ช…,๊ทผ๋ฌด์ง€๋ฅผ ์ถœ๋ ฅํ•˜์‹œ์˜ค
SELECT a.ename, b.dname,b.loc
FROM emp a, dept b
WHERE a.deptno = b.deptno
        and a.comm is not null
        and a.sal >= 1600   ;
-- 53) ๊ทผ๋ฌด์ง€๊ฐ€ CHICAGO์ธ ๋ชจ๋“  ์‚ฌ์›์˜ ์ด๋ฆ„,์—…๋ฌด,๋ถ€์„œ๋ฒˆํ˜ธ ๋ฐ ๋ถ€์„œ์ด๋ฆ„์„ ํ‘œ์‹œํ•˜์‹œ์˜ค.
SELECT a.ename, a.job, b.deptno, b.dname, b.loc 
FROM emp a , dept b
WHERE a.deptno = b.deptno
        and b.loc = 'CHICAGO';
 
 
 
-- 54) ๊ทผ๋ฌด์ง€๋ณ„๋กœ ๊ทผ๋ฌดํ•˜๋Š” ์‚ฌ์›์˜ ์ˆ˜๊ฐ€ 5๋ช… ์ดํ•˜์ธ ๊ฒฝ์šฐ, ์ธ์›์ด ์ ์€ ๋„์‹œ์ˆœ์œผ๋กœ ์ •๋ ฌํ•˜์‹œ์˜ค.
-- (๊ทผ๋ฌด ์ธ์›์ด 0๋ช…์ธ ๊ณณ๋„ ํ‘œ์‹œ)
SELECT b.loc, count(*)
FROM emp a, dept b
WHERE a.deptno = b.deptno
GROUP BY b.loc
HAVING count(*<= 5
ORDER BY count(*) ASC;
 
 
 
-- 55) ์‚ฌ์›์˜ ์ด๋ฆ„ ๋ฐ ์‚ฌ์› ๋ฒˆํ˜ธ๋ฅผ ๊ด€๋ฆฌ์ž์˜ ์ด๋ฆ„๊ณผ ๊ด€๋ฆฌ์ž ๋ฒˆํ˜ธ์™€ ํ•จ๊ป˜ ํ‘œ์‹œํ•˜๊ณ  
-- ๊ฐ๊ฐ์˜ ์—ด ๋ ˆ์ด๋ธ”์€ employee, emp#, manager, mgr#๋กœ ์ง€์ •ํ•˜์‹œ์˜ค.
SELECT a.ename as employee, a.empno as "emp#", b.ename as manager, b.empno as "mgr#"
FROM emp a, emp b
WHERE a.MGR = b.empno;
 
SELECT
    *
FROM emp;
 
 
-- 56) ๊ด€๋ฆฌ์ž๋ณด๋‹ค ๋จผ์ € ์ž…์‚ฌํ•œ ๋ชจ๋“  ์‚ฌ์›์˜ ์ด๋ฆ„ ๋ฐ ์ž…์‚ฌ์ผ์„ 
-- ๊ด€๋ฆฌ์ž์˜ ์ด๋ฆ„ ๋ฐ ์ž…์‚ฌ์ผ๊ณผ ํ•จ๊ป˜ ํ‘œ์‹œํ•˜๊ณ  ๊ด€๋ฆฌ์ž๋ณด๋‹ค ์ž…์‚ฌ์ผ์ด ๋น ๋ฅธ ์‚ฌ์›์„ ์‚ฐ์ถœํ•˜๋ผ.
-- ์—ด ๋ ˆ์ด๋ธ”์„ ๊ฐ๊ฐ employee, emp hired, manager, mgr hired๋กœ ์ง€์ •
SELECT a.ename, a.hiredate, b.ename, b.hiredate
FROM emp a, emp b
WHERE a.mgr = b.empno
    and a.hiredate <  b.hiredate;
 
-- 57) ์‚ฌ์›์˜ ์ด๋ฆ„ ๋ฐ ์‚ฌ์›๋ฒˆํ˜ธ๋ฅผ ๊ด€๋ฆฌ์ž์˜ ์ด๋ฆ„๊ณผ ๊ด€๋ฆฌ์ž ๋ฒˆํ˜ธ์™€ ํ•จ๊ป˜ ํ‘œ์‹œํ•˜๊ณ  
-- ๊ฐ๊ฐ์˜ ์—ด ๋ ˆ์ด๋ธ”์€ employee, emp#, manager, mgr#๋กœ ์ง€์ •ํ•˜๋Š”๋ฐ 
-- King์„ ํฌํ•จํ•˜์—ฌ ๊ด€๋ฆฌ์ž๊ฐ€ ์—†๋Š” ๋ชจ๋“  ์‚ฌ์›์„ ํ‘œ์‹œํ•˜๋„๋ก ํ•˜๊ณ  
-- ๊ฒฐ๊ณผ๋ฅผ ์‚ฌ์›๋ฒˆํ˜ธ๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์ •๋ ฌ
 
-- left ์‚ฌ์šฉ
 
SELECT a.ename AS employee, a.empno AS "emp#"
        ,b.ename AS manager, b.empno AS "mgr#"
FROM emp a, emp b
WHERE a.mgr = b.empno(+)
ORDER BY a.empno;
 
-- 58) ์ง€์ •ํ•œ ๋ถ€์„œ๋ฒˆํ˜ธ, ์‚ฌ์›์ด๋ฆ„ ๋ฐ ์ง€์ •ํ•œ ์‚ฌ์›๊ณผ ๋™์ผํ•œ ๋ถ€์„œ์—์„œ ๊ทผ๋ฌดํ•˜๋Š” 
-- ๋ชจ๋“  ์‚ฌ์›์„ ํ‘œ์‹œํ•˜๋„๋ก ์งˆ์˜๋ฅผ ์ž‘์„ฑํ•˜๊ณ  
-- ๋ถ€์„œ๋ฒˆํ˜ธ๋Š” department, ์‚ฌ์›์ด๋ฆ„์€ employee, ๋™์ผํ•œ ๋ถ€์„œ์—์„œ ๊ทผ๋ฌดํ•˜๋Š” ์‚ฌ์›์€ colleague๋กœ ํ‘œ์‹œํ•˜์‹œ์˜ค.
-- (๋ถ€์„œ๋ฒˆํ˜ธ, ์‚ฌ์›์ด๋ฆ„,๋™๋ฃŒ ์ˆœ์œผ๋กœ ์˜ค๋ฆ„์ฐจ์ˆœ ์ •๋ ฌ) (์–ด๋ ค์›€)********************
SELECT b.deptno as department , a.ename as employee
FROM emp a, emp b
WHERE a.deptno = b.deptno
    and a.empno <> b.empno
   ORDER BY a.deptno ASC, a.ename ASC, b.ename;
 
-- 59)10๋ฒˆ ๋ถ€์„œ์—์„œ ๊ทผ๋ฌดํ•˜๋Š” ์‚ฌ์›๋“ค์˜ 
-- ๋ถ€์„œ๋ฒˆํ˜ธ, ๋ถ€์„œ์ด๋ฆ„, ์‚ฌ์›์ด๋ฆ„, ์›”๊ธ‰, ๊ธ‰์—ฌ๋“ฑ๊ธ‰์„ ์ถœ๋ ฅํ•˜์‹œ์˜ค
SELECT e.deptno, d.dname, e.ename, e.sal, s.grade
 
FROM emp e, dept d, salgrade s
WHERE e.deptno = d.deptno
    AND e.deptno = 10
    AND e.sal BETWEEN s.losal AND s.hisal;
 
 
SELECT empno, ename, trunc(TO_DATE(SYSDATE)-hiredate) AS "๊ทผ๋ฌด ์ผ์ˆ˜"
FROM emp
ORDER BY "๊ทผ๋ฌด ์ผ์ˆ˜" DESC;
 
SELECT empno, ename, trunc(TO_DATE('2021-02-10')-hiredate) AS "๊ทผ๋ฌด ์ผ์ˆ˜"
FROM emp
ORDER BY "๊ทผ๋ฌด ์ผ์ˆ˜" DESC;
 
SELECT a.empno AS ์‚ฌ์›๋ฒˆํ˜ธ,
        a.ename AS ์‚ฌ์›์ด๋ฆ„,
        NVL(a.comm,0) AS ๋ณด๋„ˆ์Šค,
        b.deptno AS ๋ถ€์„œ๋ฒˆํ˜ธ,
        b.dname AS ๋ถ€์„œ์ด๋ฆ„,
        b.loc AS ๋ถ€์„œ์œ„์น˜
FROM emp a, dept b
WHERE a.deptno = b.deptno
    and b.loc LIKE '%GO';
cs

๋Œ“๊ธ€