반응형
1. Join(조인) 이란?
- 한 데이터베이스 내의 여러 테이블의 레코드를 조합하여 하나의 열로 표현한 것
- 즉, 둘 이상의 테이블을 연결해서 데이터를 검색하는 방법
- 테이블로서 저장되거나, 그 자체로 이용할 수 있는 결과 셋을 만들어 낸다.
- 아래 그림은 조인을 쉽게 이해하기 위한 그림이다.
- Join의 종류
- INNER JOIN : 내부조인(교집합)
- LEFT/RIGHT JOIN : 부분집합
- OUTER JOIN : 외부조인(합집합)
2. DB에서의 조인 필요성
- 관계형 데이터베이스의 구조적 특징으로 정규화를 수행하면 의미 있는 데이터의 집합으로 테이블이 구성되고, 각 테이블끼리는 관계(Relationship)를 가진다.
- 이와 같은 특징으로 관계형 데이터베이스는 저장 공간의 효율성과 확장성이 향상된다.
- 서로 관계있는 데이터가 여러 테이블로 나뉘어 저장되므로, 각 테이블에 저장된 데이터를 효과적으로 검색이 가능하다.
3. Join(조인)의 종류
- 아래 그림은 조인의 종류를 설명하기 위한 샘플 데이터 이다.
- 내부 조인(Inner Join)
- 여러 어플리케이션에서 사용되는 가증 흔한 결합 방식
- 공통적인 부분만 SELECT
- 조인 구문에 기반한 2개의 테이블(A, B)의 컬럼 값을 결합함으로써 새로운 결과 테이블을 생성
- 명시적 조인 표현(explicit)
- join 키워드와 함께 on 키워드를 사용
SELECT *
FROM STUDENT_TABLE
INNER JOIN DEPARTMENT_TABLE
ON STUDENT_TABLE.DEPARTMENT_ID = DEPARTMENT_TABLE.DEPARTMENT_ID;
- 암시적 조인 표현(implicit)
- select 구문의 from 절에서 테이블을 분리하는 컴마(,)를 사용
SELECT *
FROM STUDENT_TABLE, DEPARTMENT_TABLE
WHERE STUDENT_TABLE.DEPARTMENT_ID = DEPARTMENT_TABLE.DEPARTMENT_ID;
- 결과
- 외부 조인(Outer Join)
- 조인 대상 테이블에서 특정 테이블의 데이터가 모두 필요한 상황에서 외부 조인을 활용하여 효과적으로 결과 집합을 생성
- 두 테이블이 가지고 있는 전체 부분 SELECT
- 왼쪽 외부 조인(LEFT OUTER JOIN)
- 우측 테이블에 조인할 컬럼의 값이 없는 경우 사용
- 좌측 테이블의 모든 데이터를 포함하는 결과 집합을 생성
- 공통적인 부분 + LEFT 테이블에 있는 데이터만 SELECT
SELECT *
FROM STUDENT_TABLE S LEFT OUTER JOIN DEPARTMENT_TABLE D
ON S.DEPARTMENT_ID = D.DEPARTMENT_ID;
- 오른쪽 외부 조인(RIGHT OUTER JOIN)
- 좌측 테이블에 조인할 컬럼의 값이 없는 경우 사용
- 우측 테이블의 모든 데이터를 포함하는 결과 집합을 생성
- 공통적인 부분 + RIGHT 테이블에 있는 데이터만 SELECT
SELECT *
FROM STUDENT_TABLE S RIGHT OUTER JOIN DEPARTMENT_TABLE D
ON S.DEPARTMENT_ID = D.DEPARTMENT_ID;
- 완전 외부 조인(FULL OUTER JOIN)
- 양쪽 테이블 모두 OUTER JOIN이 필요할 때 사용
- 두 테이블 모든 데이터 SELECT
오라클에서는 OUTER JOIN 연산이 있지만, MYSQL은 없다.
그렇기 때문에, MYSQL에서는 LEFT OUTER JOIN + RIGHT OUTER JOIN을 같이 사용하여 FULL OUTER JOIN을 사용한다.
-- ORACLE
SELECT *
FROM STUDENT_TABLE S FULL OUTER JOIN DEPARTMENT_TABLE D
ON S.DEPARTMENT_ID = D.DEPARTMENT_ID;
-- MYSQL
SELECT *
FROM STUDENT_TABLE S LEFT OUTER JOIN DEPARTMENT_TABLE D
ON S.DEPARTMENT_ID = D.DEPARTMENT_ID
UNION
SELECT *
FROM STUDENT_TABLE S RIGHT OUTER JOIN DEPARTMENT_TABLE D
ON S.DEPARTMENT_ID = D.DEPARTMENT_ID;
4. 조인 사용 시 주의사항
- SQL 문장의 의미를 제대로 파악 필요
- SQL 작성하는 방법에 따라 성능이 크게 좌우된다.
- 어떤 질의를 수행할 것인지를 명확하게 정의한 후, 비효율을 제거하여 최적의 SQL을 작성한다.
- 명확한 조인 조건을 제공
- 조인 조건을 명확하게 제공하지 않을 경우, 의도치 않게 CROSS JOIN(Cartesian Prdouct)이 수행 될 수 있다.
5. 조인 사용 시 고려사항
- 조인할 대상의 집합을 최소화
- 집합을 최소화할 방법이 있으면, 조건을 먼저 적용하여 관계를 맺을 집합을 최소화한 후, 조인을 맺는 것이 효율적이다.
- 효과적인 인덱스 활용
- 인덱스를 활용하면, 조인 연산의 비용을 극적으로 낮출 수 있다.
참고
- https://doooyeon.github.io/2018/11/11/database-join.html
- https://pearlluck.tistory.com/46
반응형
'BackEnd > DataBase' 카테고리의 다른 글
[DB] DELETE 쿼리 시 Join 사용하기(MySQL) (0) | 2022.07.20 |
---|---|
[MySQL] on duplicate key update(Insert 시 값 존재하면 Update) (0) | 2022.07.01 |
[DB] Transaction(트랜잭션) 정리하기 (0) | 2022.05.07 |
[DB] Oracle vs MySQL vs MSSQL 비교 (0) | 2022.04.20 |
[MySql] 데이터 정렬하기(한글 ->영문 순서) (0) | 2021.08.28 |