DB/Oracle Basic

SQL 문법( Join - 1 )

soccerda 2012. 7. 6. 01:03
반응형
 
1. join : 두 개 이상의 테이블을 결합하여 필요한 데이터를 조회하게 하는 기능
가. 조인의 종류
- 카티션 곱 : where 절에 조건을 기입하지 않을 경우, 테이블 row 수만큼(null 제외) * 연산하여 출력
- EQUI JOIN : where 절에 = 을 사용했을 경우
- NON-EQUI JOIN : where 절에 >=, <=, 등의 연산자 이용
- OUTER JOIN : null 이 포함된 행도 출력하고자 할 때(+), outer join의 경우 (+)의 반대쪽 테이블에 full scan 이
일어나 성능저하를 가져온다.

- SELF JOIN : 1개의 테이블을 마치 2개의 테이블 조인 마냥, 같은 테이블내에서 조인을 맺는 것

나. 조인 시 주의사항 : 2개의 테이블 이상의 테이블 조인 시, 앞 테이블은 상대적으로 row 량이 적은 것을 사용한다.


2. 예제모음

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
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
SQL> select s.name, d.dname
2 from student s, department d
3 where s.deptno=d.deptno;
NAME DNAME
---------- ----------------
전인하 컴퓨터공학과
이동훈 전자공학과
박미경 컴퓨터공학과
김영균 컴퓨터공학과
박동진 전자공학과
김진영 멀티미디어학과
지은경 컴퓨터공학과
오유석 멀티미디어학과
하나리 멀티미디어학과
임유진 컴퓨터공학과
서재진 컴퓨터공학과
윤진욱 멀티미디어학과
이광훈 컴퓨터공학과
김진경 전자공학과
조명훈 전자공학과
류민정 컴퓨터공학과
16 rows selected.
SQL> select s.name, d.dname, p.name
2 from student s, department d, professor p
3 where s.deptno=d.deptno and s.profno=p.profno;
NAME DNAME NAME
---------- ---------------- ----------
김진경 전자공학과 이재우
이광훈 컴퓨터공학과 성연희
전인하 컴퓨터공학과 성연희
윤진욱 멀티미디어학과 권혁일
오유석 멀티미디어학과 권혁일
김진영 멀티미디어학과 권혁일
김영균 컴퓨터공학과 이만식
류민정 컴퓨터공학과 전은지
임유진 컴퓨터공학과 전은지
지은경 컴퓨터공학과 전은지
10 rows selected.
SQL> select c.cust, g.gift
2 from test14 c, test13 g
3 where c.point between g.fpoint and g.tpoint;
CUST GIFT
-------------- ----------------------------------------
771201-2233445 COMPUTER
620908-2121232 COMPUTER
500823-1132762 AUDIO
672102-2123452 의류교환권
650207-1765152 굴비세트
680801-1234455 갈비세트
701212-1143211 PCS무료가입권
710125-1144951 구두상품권
721109-2144952 녹차세트
721101-2144952 도서상품권
10 rows selected.
SQL> select g.gift, count(g.gift)
2 from test14 c, test13 g
3 where c.point between g.fpoint and g.tpoint
4 group by g.gift;
GIFT COUNT(G.GIFT)
---------------------------------------- -------------
COMPUTER 2
의류교환권 1
굴비세트 1
갈비세트 1
PCS무료가입권 1
구두상품권 1
AUDIO 1
녹차세트 1
도서상품권 1
9 rows selected.
SQL> select c.cust, c.point, p.gift
2 from test14 c, test13 p
3 where p.gift='갈비세트' and c.point > p.fpoint;
CUST POINT GIFT
-------------- ---------- ----------------------------------------
650207-1765152 20239650 갈비세트
672102-2123452 40935040 갈비세트
500823-1132762 75636408 갈비세트
771201-2233445 129855120 갈비세트
680801-1234455 10059470 갈비세트
620908-2121232 123674200 갈비세트
6 rows selected.
SQL> select e.emp_id, e.emp_name, e.birth_date,
2 trunc(months_between(sysdate, e.birth_date)/12) age, e.lev
3 from temp e, emp_level l
4 where trunc(months_between(sysdate, e.birth_date)/12) between l.from_age and l.to_age
5 and l.lev='부장';
EMP_ID EMP_NAME BIRTH_DATE AGE LEV
---------- ---------- ------------ ---------- ----
19970101 김길동 25-JAN-74 37 부장
19960101 홍길동 22-MAR-73 38 과장
19970201 박문수 15-APR-75 36 과장
19930331 정도령 25-MAY-76 35 차장
19950303 이순신 15-JUN-73 38 대리
19966102 지문덕 05-JUL-72 39 과장
19930402 강감찬 15-AUG-72 39 차장
19960303 설까치 25-SEP-71 40 사원
19970112 연흥부 05-NOV-76 35 대리
19960212 배뱅이 15-DEC-72 39 과장
20000101 이태백 25-JAN-80 31 수습
20000102 김설악 22-MAR-80 31 수습
20000203 최오대 15-APR-80 31 수습
20000334 박지리 25-MAY-80 31 수습
20000305 정북악 15-JUN-80 31 수습
20006106 유도봉 05-JUL-80 31 수습
20000407 윤주왕 15-AUG-80 31 수습
20000308 강월악 25-SEP-80 31 수습
20000119 장금강 05-NOV-80 31 수습
20000210 나한라 15-DEC-80 31 수습
20 rows selected.
SQL> select s.name s_name, s.grade, p.name p_name, p.position
2 from professor p, student s
3 where p.profno=s.profno(+);
S_NAME G P_NAME POSITION
---------- - ---------- --------------------
전인하 4 성연희 조교수
김영균 3 이만식 부교수
김진영 2 권혁일 교수
지은경 2 전은지 전임강사
오유석 4 권혁일 교수
임유진 2 전은지 전임강사
윤진욱 3 권혁일 교수
이광훈 4 성연희 조교수
김진경 2 이재우 조교수
류민정 2 전은지 전임강사
김도훈 교수
염일웅 전임강사
남은혁 부교수
13 rows selected.
SQL> select e.emp_id, e.emp_name, e.lev,e.salary, l.from_sal, l.to_sal
2 from temp e, emp_level l
3 where e.lev=l.lev(+);
EMP_ID EMP_NAME LEV SALARY FROM_SAL TO_SAL
---------- ---------- ---- ---------- ---------- ----------
19960303 설까치 사원 35000000 30000000 40000000
19970112 연흥부 대리 45000000 35000000 60000000
19950303 이순신 대리 56000000 35000000 60000000
19960212 배뱅이 과장 39000000 37000000 75000000
19966102 지문덕 과장 45000000 37000000 75000000
19970201 박문수 과장 50000000 37000000 75000000
19960101 홍길동 과장 72000000 37000000 75000000
19930402 강감찬 차장 64000000 40000000 80000000
19930331 정도령 차장 70000000 40000000 80000000
19970101 김길동 부장 100000000 60000000 100000000
20000210 나한라 수습 30000000
20000119 장금강 수습 30000000
20000308 강월악 수습 30000000
20000407 윤주왕 수습 30000000
20006106 유도봉 수습 30000000
20000305 정북악 수습 30000000
20000334 박지리 수습 30000000
20000203 최오대 수습 30000000
20000102 김설악 수습 30000000
20000101 이태백 수습 30000000
20 rows selected.

반응형