본문 바로가기

SQL

[SQL] JOIN 조인

 

5. inner join(내부조인 = join) : 가장 일반적인 조인 양쪽 테이블에 모두 있는 것만 조인된다.

위는 select ~ from ~ join ~ where 순의 구조로 이루어진다.

 

Buytbl12개의 데이터 모두 아이디를 가지고 있다. Usertbl 10개의 데이터. 한번도 구매하지 않은 이승기, 김경호, 임재범, 윤종신, 조관우는 구매테이블에 없다.

 

* inner join : 양쪽 테이블에 모두 있는 데이터만 추출한다. , 구매한 이력이 있는 아이디만 출력되므로 구매테이블에 있는 데이터들이 기준이된다.(, 교집합)

6. 테이블명.컬럼명 : 어떤 컬럼명인지 테이블을 명시해 주어야한다. 별칭으로도 가능하다.

 

* outer join(외부조인) : 조건에 만족하지 않는 행까지도 포함시키는 것.

9. left outer join : 왼쪽테이블(usertbl)의 것은 모두 출력한다. , 구매기록이 없는 전체 회원 정보를 보고 싶을 때. 줄여서 left join 이라고만 써도 된다.

 

9. right outer join : 위의 left outer join과 동일한 결과를 얻으려면 조인이 걸리는 테이블 위치만 변경해주면 된다.

 

9. Full outer join : left, right outer join 을 합친 개념. 합집합 MySQL 5버전에서는 지원안함. left, right join 한것을 union 시키는 대체방안이 있음.

 

2개의 조인한 쿼리는 같다. 11라인의 마지막 right outer join을 따라가 마지막 동아리(clubtbl)을 기준으로 조회한다.

 

* cross join : 한테이블의 모든 행들과 다른 쪽 테이블의 모든 행을 조인시키는 기능을 한다. 그래서 결과 개수는 두 테이블 개수를 곱한 개수가 된다. 카티션곱이라고 부른다.

 

따라서 회원테이블 10명과 구매테이블 개수인 12개가 곱해져 120개의 결과가 된다.

5번 라인처럼 cross join을 해도 되지만 권장하지 않는다.

* cross join

- on 구문을 사용할 수 없다.

- 테스트로 쓸 많은 용량의 데이터를 생성할 때 주로 사용한다. (큰 샘플 데이터를 실제로 생성하고자 한다면 create table … select 문과 함께 사용하면 된다.)

 

코드 관리의 대분류 코드와 소분류 코드를 보여줄 필요가 있을 때 self join이 활용된다.

 

* self join

- 자기 자신과 자기자신이 조인한다.

- 나사장은 대분류 코드가 되고, 대분류 코드를 바라보는 하위직원들은 소분류 코드로 나열할 수 있다.

 

나사장의 부하직원들 즉 대분류 코드의 소분류 코드정보를 저장하고 조회가 가능하다.