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

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

JOIN๋ฌธ

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
/*
Join
๋‘๊ฐœ์ด์ƒ์˜ ํ…Œ์ด๋ธ”์„ ์—ฐ๊ฒฐํ•ด์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฒ€์ƒ‰ํ•˜๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค.
๋ณดํ†ต ๋‘ ๊ฐœ ์ด์ƒ์˜ ํ–‰(ROW) ๊ณตํ†ต๋œ ๊ฐ’ ๊ธฐ๋ณธํ‚ค, ์™ธ๋ž˜ํ‚ค๋ฅผ ์‚ฌ์šฉํ•ด์„œ ์กฐ์ธํ•œ๋‹ค.
๊ธฐ๋ณธํ‚ค(Primary key) : ํ…Œ์ด๋ธ”์—์„œ ์ค‘๋ณต์ด ๋˜์ง€ ์•Š๋Š” ํ‚ค
์™ธ๋ž˜ ํ‚ค(Foreign Key): ๋‹ค๋ฅธ ์ผ€์ด๋ธ”์—์„œ PK,UK์ธ ๊ฒฝ์šฐ๊ฐ€ ใ…ใ„ถ์Œ
 
inner JOIN =๊ต์ง‘ํ•ฉ *****
full outer JOIN = ํ•ฉ์ง‘ํ•ฉ
cross Join
outer Join
left ***
Right ***
self Join ******
*/
 
--inner Join
--ansi SQL
SELECT e.employee_id, e.first_name,
        e.department_id, d.department_id,
        d.department_name
 
FROM employees e INNER JOIN departments d
ON e.department_id = d.department_id;
 
--ORACLE
SELECT employee_id, first_name,
    e.department_id, d.department_id,
    department_name, d.location_id
 
FROM employees e, departments d
WHERE e.department_id = d.department_id;
 
 
SELECT e.employee_id, e.first_name,
    e.job_id, j.job_id,
    j.job_title
FROM employees e, jobs j
WHERE e.job_id = j.job_id
    AND e.job_id = 'IT_PROG';
 
 
--cross join
--ANSI
SELECT e.employee_id,e.first_name
        ,e.department_id, d.department_id,
        d.department_name
FROM employees e CROSS JOIN departments d;
 
--ORACLE
SELECT e.employee_id,e.first_name
        ,e.department_id, d.department_id,
        d.department_name
FROM employees e, departments d;
 
--full outer join
--ANSI
SELECT e.employee_id,e.first_name
        ,e.department_id, d.department_id,
        d.department_name
 
FROM employees e FULL OUTER JOIN  departments d
ON e.department_id = d.department_id;
 
--ORACLE left outer join + right outer join
SELECT e.employee_id,e.first_name
        ,e.department_id, d.department_id,
        d.department_name
        FROM employees e, departments d
        WHERE e.department_id = d.department_id(+)
UNION
SELECT e.employee_id,e.first_name
        ,e.department_id, d.department_id,
        d.department_name
        FROM employees e, departments d
        WHERE e.department_id(+= d.department_id;
 
--Outer join
--left
--ANSI
SELECT e.employee_id,e.first_name
        ,e.department_id, d.department_id,
        d.department_name
FROM employees e LEFT OUTER JOIN departments d
ON e.department_id = d.department_id;
 
--ORACLE
SELECT e.employee_id,e.first_name
        ,e.department_id, d.department_id,
        d.department_name
        FROM employees e, departments d
        WHERE e.department_id = d.department_id(+);
 
--์ฐจ์ง‘ํ•ฉ
SELECT e.employee_id,e.first_name
        ,e.department_id, d.department_id,
        d.department_name
        FROM employees e, departments d
        WHERE e.department_id = d.department_id(+)
        AND e.department_id IS NULL;
 
--๋Œ€์นญ์ฐจ์ง‘ํ•ฉ
SELECT e.employee_id,e.first_name
        ,e.department_id, d.department_id,
        d.department_name
 
FROM employees e FULL OUTER JOIN  departments d
ON e.department_id = d.department_id
WHERE e.department_id IS NULL
        OR d.department_id IS NULL;
 
--SELF join :๋™์ผํ•œ ํ…Œ์ด๋ธ”์„ ์กฐ์ธ, ์ž๊ธฐํ…Œ์ด๋ธ”์— ์žˆ๋Š” ๋ฐ์ดํ„ฐ ์ฐพ๊ธฐ
SELECT a.employee_id, a.first_name,
     a.manager_id, b.employee_id,
     b.first_name
     -- b๋Š” ์ƒ์‚ฌ์— ๋Œ€ํ•œ์ •๋ณด
FROM employees a , employees b -- a: ์‚ฌ์›  b: ์ƒ์‚ฌ
WHERE a.manager_id = b.employee_id;
 
--๊ณ„์ธตํ˜• ๊ตฌ์กฐ ์˜ค๋ฆ„, ๋‚ด๋ฆผ
SELECT a.employee_id, a.first_name AS"์‚ฌ์›",
    a.manager_id AS "์‚ฌ์›์˜ ์ƒ์‚ฌ", b.employee_id,
    b.first_name AS "์ƒ์‚ฌ"
FROM employees a, employees b
WHERE a.manager_id = b.employee_id(+)
CONNECT BY PRIOR a.manager_id = a.employee_id; -- ์ƒํ–ฅ์‹
cs

๋Œ“๊ธ€