SQL JOIN 정리 (Inner Join & Outer Join)
첨부 '1' |
|
---|
1. INNER JOIN
- 두 테이블간의 조인 조건을 만족하는 ROW만 리턴함... (교집합 이라고 하기엔 좀 애매하지만 일단 그렇게 이해하는게 쉽다.)
2. OUTER JOIN
- LEFT/RIGHT/FULL 형태의 OUTER JOIN 이 있음
- LEFT OUTER JOIN의 경우 조인문 왼쪽에 있는 테이블의 모든 결과를 가져온 후 오른쪽 테이블의 데이터를 매칭하며, 매칭되는 데이터가 없는 경우 NULL 매칭
- RIGHT OUTER JOIN은 LEFT 조인의 반대 - FULL OUTER JOIN은 일반적으로 사용할 일이 없으며, DB에 따라 지원하지 않음??? 간단히 설명하자면 두 테이블의 합집합이라고 이해하면 될 듯...
3. 주의 사항
- 일반적으로 조인은 1:1 혹은 N:1 의 관계를 갖는 경우 유용한 것 같음... 1:N 관계에서 조인문을 사용하는 경우 기준이 되는 테이블의 데이터가 중복되는 결과를 리턴함. 따라서 1:N 관계에서 조인문을 통해 N에 해당하는 테이블의 컬럼을 이용해 제한조건을 사용하는 경우 distinct 혹은 group by 를 사용하여 1에 해당 하는 테이블의 데이터가 중복되지 않도록 해야 한다. (에궁... 먼가 명확하지 않은 설명 ㅠ.ㅠ)
4. 예제
두 개의 테이블이 있다고 가정. 컬럼은 1개이고, 데이터는 아래와 같다.
A B
- -
1 3
2 4
3 5
4 6
(1, 2)는 A에만 있고, (3, 4)는 A와 B 모두에 있으며, (5, 6)은 B에만 있다.
Inner join
이너 조인, Inner join을 수행하면 두 집합에 모두 있는 열만 남게 된다.
select * from a INNER JOIN b on a.a = b.b;
select a.*,b.* from a,b where a.a = b.b;
a | b
--+--
3 | 3
4 | 4
Left outer join
레프트 아우터 조인, Left outer join을 하면, A의 모든 열 더하기 B에 있는 공통부분을 얻게 된다.
select * from a LEFT OUTER JOIN b on a.a = b.b;
select a.*,b.* from a,b where a.a = b.b(+);
a | b
--+-----
1 | null
2 | null
3 | 3
4 | 4
Right outer join
라이트 아우터 조인, Right outer join을 하면 B의 모든 열 더하기 A에 있는 공통부분을 얻게 된다.
select * from a RIGHT OUTER JOIN b on a.a = b.b;
select a.*,b.* from a,b where a.a(+) = b.b;
a | b
-----+----
3 | 3
4 | 4
null | 5
null | 6
Full outer join
풀 아우터 조인, Full outer join을 하면 A와 B의 합집합을 얻게 된다.
B에는 있는데 A에 없는 (5, 6)은 A에서는 해당 부분이 null 이 되고,
A에는 있는데 B에 없는 (1, 2)는 B에서는 해당 부분이 null 이 된다.
select * from a FULL OUTER JOIN b on a.a = b.b;
a | b
-----+-----
1 | null
2 | null
3 | 3
4 | 4
null | 6
null | 5
번호 | 분류 | 제목 | 글쓴이 | 날짜 | 조회 수 |
---|---|---|---|---|---|
225 | Develop | [php] XE에서 도메인 별로 광고 다르게 적용하기 | hooni | 2015.01.28 | 718 |
224 | Develop | [php] 그래프 그리는 프로그램.. | hooni | 2013.04.23 | 8511 |
223 | Develop | [php] 날짜 정보 출력 (년,월,일,시,분,초) | hooni | 2013.04.23 | 10586 |
222 | Develop | [php] 논문 관리 프로그램.. ㅋㅋ | hooni | 2013.04.23 | 7290 |
221 | Develop | [php] 니우쪽지다.. 받아라~ ^^ | hooni | 2003.04.23 | 9877 |
220 | Develop | [php] 데이터를 엑셀,워드 형태로 변환할 때 헤더(ms-office) | hooni | 2013.04.23 | 7526 |
219 | Develop | [php] 마시마로 캐릭터 방명록 | hooni | 2003.04.23 | 8277 |
218 | Develop | [php] 메모장 - 웅지학원 ([c] mysql 백업프로그램 포함) | hooni | 2003.04.23 | 7037 |
217 | Develop | [php] 몽이가 준 ajax 채팅 소스 ㅋㅋ | hooni | 2013.04.23 | 36212 |
216 | Develop | [php] 무조건 다운로드 받도록 header 세팅 | hooni | 2013.04.23 | 7428 |
215 | Develop | [php] 배열 관련 함수 설명 ㅎㅎ | hooni | 2003.04.23 | 11793 |
214 | Develop | [php] 빔 프로젝터 예약 프로그램.. ㅋㅋ | hooni | 2013.04.23 | 6963 |