참고
2020-08-20-04)JOIN.sql
2020-08-21-01)내부외부조인.sql
- RDB의 핵심 기능
- 조회할 컬럼이 여러 개의 테이블에 분산되어 저장된 경우
테이블 사이의 관계(Relationship)을 이용하여 검색할 때 사용
- 일반join과 ansi join으로 구분
- JOIN이 필요한 이유 (사용예시)
- 테이블을 정제하고 정규화를 시키는 경우 하나의 컬럼에 들어있는 값이 여러 테이블로 나누어져서 저장되게됨
- ex. 카트테이블 이용해서 금액계산시 단가는 PROD에 들어있음. 내가 원하는 단가를 PROD에서 꺼내와야함.
- 조인시 중심테이블을 어느 것으로 할지 선정하는 것이 중요
1. Cartesian Product (ANSI: CROSS JOIN)
- 사용하지 말것
- 모든 행들의 조합을 결과로 반환
- ex. A 테이블이 100행 20열, B 테이블이 2000행 10열로 구성되었다면
-->A,B 테이블의 Cartesin Product 결과는 200000행, 30열로 결과 반환
=>행=행*행, 열=열+열
- 조인조건이 없을 경우, 조인조건을 잘 못 기술한 경우
예시
2. Equi-JOIN (≒ 내부조인) (ANSI: INNER JOIN)
- 조인조건에 '='연산자를 사용하는 조인형식
- 조인조건: 사용된 테이블의 갯수가 n개일때 적어도 n-1개 이상이어야한다.
- 일치하지 않는 데이터(행) 무시
- ANSI 형식에서는 INNER JOIN이라고 함
사용형식 - 일반 JOIN
사용형식 - INNER JOIN (ANSI)
예시
1. 사원테이블에서 사원정보를 조회하시오.
- Alias: 사원번호, 사원명, 부서코드, 부서명
- 일반조인
- ANSI조인
- 결과 동일
2. 사원테이블에서 100번 부서의 사원정보를 조회하시오
- Alias: 사원번호, 사원명, 부서코드, 부서명
- 일반조인
- ANSI조인 (1)
- ANSI조인 (2)
- 조인 테이블이 2개밖에 없기때문에 가능한 것
- 테이블3개 이상시에는 잘 안쓰임, 보통 두 테이블에만 조건을 부여하기때문
- 결과 동일
3. 2005년 6월 상품별 매출현황을 조회하시오
- Alias: 상품코드, 상품명, 금액
- 일반조인
- ANSI조인
- 결과 동일
4. 매입테이블에서 2005년 5월 거래처별 매입현황을 조회하시오
- Alias는 거래처코드, 거래처명, 매입금액합계
- 일반조인
- ANSI조인
- 결과동일
5. 2005년 5월 상품별 매입/매출 정보를 조회하시오
- Alias: 상품코드, 상품명, 매입수량, 매출수량
- 일반조인
- 일반OUTER조인
- ANSI조인
- SUBQUERY + 일반OUTER조인
- ANSI와 결과값 같음