JOIN 조인
- 2개(1개) 이상의 테이블의 내용을 한번에 가져와 1개의 결과셋을 만드는 작업
- 분리되어 있는 2개 이상의 테이블을 1개로 만드는 작업
- 2개 이상의 테이블이 서로 관계가 있어야 한다.( 관계 테이블끼리 조인하는 경우X)
조인의 종류(ANSI SQL)
1. 단순 조인, Cross Join
2. 내부 조인, Inner Join
3. 외부 조인, Outer Join
4. 셀프 조인, Self Join
**1. 단순조인, 크로스 조인
select * from Customer,Sales;
select * from Customer cross join Sales;
**2. 내부조인
- 단순 조인에서 유효한 레코드만을 취하는 조인
- 부모 테이블의 PK와 자식 테이블의 FK가 동일한 레코드만을 취하는 조인
select 컬럼리스트 from 테이블A
inner join 테이블B
on 테이블A.컬럼명(PK) = 테이블B.컬럼명(FK);
ex) inner join의 결과 > 자식 테이블 레코드 수
구매내역과 해당 손님의 정보를 가져오시오.
select * from Customer inner join Sales on Customer.seq = Sales.seq; -부모 테이블 join 자식 테이블(권장)
select * from Sales inner join Customer on Sales .seq = Customer.seq; - 자식 테이블 join 부모 테이블
**표준 SQL
select * from Customer inner join Sales on Customer.seq = Sales.customer
**오라클
select * from Customer,Sales where Customer.seq = Sales.customer; --(크로스조인)
**조인 사용 시 절대(되도록) 하면 안되는 행동
- PK-FK 연결된 관계있는 테이블끼리만 조인
ex)노트(tblSales)를 사간 회원의 연락처
**일일히 컬럼명 앞에 테이블명을 붙이기가 귀찮다. > 간략하게 기재 > Table Alias(별칭)
select c.name, c.tel
from Customer c inner join Sales s
on c.seq = s.customer
where s.item = '노트'
**내부 조인은 부모 테이블의 레코드가 자식 테이블에 참조되지 않으면 그 부모 레코드는 결과셋에서 제외된다.
ex)쇼핑몰에서 적어도 1회이상 구매이력이 있는 고객의 정보와 구매 이력을 가져오시오.
부모 테이블과 자식 테이블 모두 동시에 전재하는 레코드만으로 가져온다.
select * from Customer c
inner join Sales
on c.seq= customer
**3. 외부 조인
- select 컬럼리스트 from 테이블A left[right] outer join 테이블B on c.PK = s.FK
- 일반적으로 방향은 부모테이블을 가리킨다.
- 방향은 자식 테이블을 가리키게 되면 내부 조인의 결과와 동일하다.
ex)
--내부 조인
--대여 기록과 함께 고객 정보를 가져오시오(한번도 내여를 하지 않는 고객은 제외)
select * from tblMember m
inner join tblRent r
on m.seq = r.member;
--외부 조인
--대여의 유무와 상관없이 모든 고객 정보 + 대여 기록을 가져오시오.
select * from tblMember m
left outer join tblRent r
on m.seq = r.member;
**4. 셀프 조인
- 1개의 테이블을 가지고 조인
- 자신이 자신을 참조하는 키를 소유함(PK+FK)
ex)
--직원 정보 + 직속상사 정보
select s2.name as 직원명, s1.name as 상사명 from tblSelf s1 --부모테이블(상사)
inner join tblSelf s2 --자식테이블(부하)
on s1.seq = s2.super;
select s2.name as 직원명,nvl(s1.name,'미정') as 상사명 from tblSelf s1 --부모테이블(상사)
right outer tblSelf s2 --자식테이블(부하)
on s1.seq = s2.super;
'오라클' 카테고리의 다른 글
오라클 DB 강좌 (0) | 2018.08.31 |
---|---|
DDL (1) | 2018.08.29 |
뷰(View) (0) | 2018.08.29 |
INSERT문/UPDATE문/DELETE문 (DML) (0) | 2018.08.29 |
서브쿼리(SubQuery) (0) | 2018.08.28 |