조인이란 무엇이며 왜 필요한가 ?
여러개로 나누어진 테이블에서 필요한 데이터만 보기 위해 즉, 하나로 합치기 위해 데이터베이스가 제공하는 기능이다.
관계형 데이터베이스(RDB)에서는 데이터들이 한 곳에 모여있는 것이 아니라 정규화로 인해 분산되어 있다.
따라서 RDB에 내가 원하는 데이터를 추출할 때는 JOIN은 필수 기능중 하나이다.
- 여러 테이블에 흩어져 있는 정보 중 사용자가 필요한 정보만 가져와 결과를 보여주는 기술
- 두 개 이상의 테이블들을 연결 또는 결합하여 데이터를 출력하는 것
- 서로 다른 테이블을 공통 컬럼을 기준으로 합치는 테이블의 단위 연산
조인의 종류는 내부조인(inner join), 외부조인(outer join), 셀프조인(self join) 이 있으며 이 글에서 다뤄보는 것은
내부조인과 외부조인정도가 될 것이다.
가장먼저 내부조인부터 살펴보자.
1. 내부조인(INNER JOIN)
예를 들어 두개의 테이블이 있다고 가정하자.
이 두개의 테이블에서 부서번호를 기준으로 어느 부서의 어느사원인지 정보를 알려고한다.
//명시적
SELECT A.사원명, B.부서명
FROM 사원table A JOIN 부서table B
ON A.부서번호 = B.부서번호;
//암시적
SELECT A.사원명, B.부서명
FROM 사원table A , 부서table B
WHERE A.부서번호 = B.부서번호;
간단하게 다음의 쿼리를 통해
다음과 같은 결과 테이블을 추출해 낼 수 있다.
2. 외부조인(OUTER JOIN)
외부조인은 왜 쓰이나.. 어떨때??
조인 조건에서 동일한 값이 없는 행도 반환활 때 사용하는 구문이다.
예를들어 회원테이블A와 멤버쉽포인트테이블B가 있다고 가정해보자. 근데 A테이블에 있는 회원이 B테이블에는 없을수도있지만
회원테이블의 전체 통계가 필요할 때 사용한다.
외부조인으로는 left outer join , right outer join, full outer join 3가지가 있다.
2-1 왼쪽 외부 조인(LEFT OUTER JOIN = LEFT JOIN)
왼쪽외부조인은 테이블 A의 모든 데이터와 테이블 B와 매칭이 되는 레코드를 포함하는 조인이다.
즉 , 왼쪽 테이블을 중심으로 오른쪽의 테이블을 매치시킨다.
왼쪽 테이블의 한개의 레코드에 여러개의 오른쪽 테이블 레코드가 일치할 경우 ?
-> 해당 왼쪽 레코드를 여러번 표시하게 된다.
-> 왼쪽은 무조건 표시하고, 매치되는 레코드가 오른쪽에 없으면 NULL을 표시한다.
글보다 사진으로 보는게 이해가 더 잘 가는것 같다.
여기서 n을 기준으로 left join을 하게 되면 어떤 결과가 나올 것인가..??
조인 결과 = table1의 모든 데이터 + table1과 table2 컬럼(n)과 매칭이 되는 데이터
SELECT *
FROM employees
LEFT OUTER JOIN departments
ON employees.dept_no = departments.dept_no;
2-2 오른쪽 외부 조인(RIGHT OUTER JOIN = RIGHT JOIN)
오른쪽 외부조인은 왼쪽과 상반되는 거라고 생각하면 된다.
오른쪽 테이블을 중심으로 왼쪽 테이블을 매치시킨다.
사진을 한번 보자.
결과는 ...
조인 결과 = table2의 모든 데이터 + table1과 table2 컬럼(n)과 매칭이 되는 데이터
SELECT *
FROM employees
RIGHT OUTER JOIN departments
ON employees.dept_no = departments.dept_no;
2-3 완전 외부 조인(FULL OUTER JOIN = FULL JOIN)
완전 외부 조인은 mysql에서는 명시적인 SQL 구문은 지원하지 않지만 , UNION을 사용해서 완전 외부 조인을 사용할 수 있다.
left , right의 경우는 그래도 하나의 테이블을 기준으로 데이터를 추출하지만
full의 경우는 두개다 포함되어 있는 데이터를 전부 가져온다.
조인 결과 - 왼쪽 외부 조인 + 오른쪽 외부 조인
SELECT *
FROM table1
LEFT OUTER JOIN table2
ON table1.n = table2.n
UNION
SELECT *
FROM table1
RIGHT OUTER JOIN table2
ON table1.n = table2.n;
참조
https://yoo-hyeok.tistory.com/98
[MySQL] Join 깔끔한 이해와 사용법
상단의 그림 정말 정리가 잘 되어 있습니다. 처음 접할 때 보고도 저게뭔가 싶었는데 초심자의 입장에서 이해하기 쉽도록 설명해보려합니다. 1. LEFT JOIN A, B 테이블 중에 A값의 전체와, A의 KEY 값
yoo-hyeok.tistory.com
https://advenoh.tistory.com/23
관계형 데이터베이스에서 조인(join)이란?
1.JOIN에 대한 기본 개념 관계형 데이터베이스에서는 중복 데이터를 피하기 위해서 데이터를 쪼개 여러 테이블로 나눠서 저장합니다. 이렇게 분리되어 저장된 데이터에서 원하는 결과를 다시 도
advenoh.tistory.com
'DB' 카테고리의 다른 글
클릭하우스(ClickHouse)란? (2) | 2021.07.24 |
---|---|
MySQL 쿼리 동작원리(실행계획, 인덱스) (0) | 2021.06.10 |
Redis (레디스란?) (0) | 2021.06.01 |
엘라스틱서치란? (ElasticSearch) (0) | 2021.05.30 |