티스토리 뷰

자격증/SQLD

SQLD - SQL 기본 [조인(JOIN)]

나는연어다 2017. 8. 11. 14:16

1.   JOIN의 개요

-       두 개 이상의 테이블들을 연결 또는 결합하여 데이터를 출력하는 것

-       JOIN은 관계형 데이터베이스의 가장 큰 장점이면서 대표적인 핵심 기능이라고 할 수 있다. 일반적인 경우 행들은 PRIMARY KEY(PK) FOREIGN KEY(FK) 값의 연관에 의해 JOIN이 성립된다. 하지만 어떤 경우에는 이러한 PK, FK의 관계가 없어도 논리적인 값들의 연관만으로 JOIN이 성립 가능하다.

-       FROM절에 여러 테이블이 나열되더라도 SQL에서 데이터를 처리할 때는 단 두 개의 집합 간에만 조인이 일어나는 것이다. FROM 절에서 A, B, C 테이블이 나열되더라도 특정 2개의 테이블만 먼저 조인 처리되고, 2개의 테이블이 조인되어서 처리된 새로운 데이터 집합과 남은 한 개의 테이블이 다음 차례로 조인되는 것이다.

 

2.   EQUL JOIN

-       두 개의 테이블 간에 칼럼 값들이 서로 정확하게 일치하는 경우에 사용되는 방법은 대부분 PK<-> FK의 관계를 기반으로 한다. 그러나, 일반적으로 테이블 설계 시에 나타난 PK<->FK의 관계로만 EQUL JOIN이 성립하는 것은 아니다.

-       이 기능은 계층형(Hierarchical)이나 망형(Network) 데이터베이스와 비교해서 관계형 데이터베이스의 큰 장점이다.

-       어느 테이블에 존재하는 칼럼인지 명시하는 이유

n  JOIN에 사용되는 두 개의 테이블에 같은 칼럼명이 존재하는 경우에는 DBMS의 옵티마이저는 어떤 칼럼을 사용해야 할지 모르기 때문에 파싱 단계에서 에러가 발생된다.

n  데이터가 어느 테이블에 있는 칼럼을 말하는 것인지 쉽게 알 수 있게 하므로 SQL에 대한 가독성이나 유자보수성을 높이는 효과가 있다.

3.   Non Equl Join

-       = 연산자가 아닌 다른 (Between, >= , > , <, <=) 연산자를 사용하여 Join을 수행한다.

-       두 개의 테이블이 PK-FK로 연관관계를 가지거나 논리적으로 같은 값이 존재하는 경우에는 “=” 연산자를 이용하여 EQUL JOIN을 사용한다. 그러나, 두 개의 테이블 간에 칼럼 값들이 서로 정확하게 일치하지 않는 경우에는 EQUL JOIN을 사용할 수 없으며 Non Equl Join을 사용할 수 있으나 모델링에 따라 사용하지 못하는 경우가 발생하게 된다.

 

l  JOIN이 필요한 기본적인 이유는 과목1에서 배운 정규화에서부터 출발한다.
정규화란 불필요한 데이터의 정합성을 확보하고 이상현항(Anomaly) 발생을 피하기 위해, 테이블을 분할하여 생성하는 것이다.
사실 데이터웨어하우스 모델처럼 하나의 테이블에 모든 데이터를 집중시켜놓고 그 테이블로부터 필요한 데이터를 조회할 수도 있다.

l  그러나 이렇게 됐을 경우, 가장 중요한 데이터의 정합성에 더 큰 비용을 지불해야 하며, 데이터를 추가, 삭제, 수정하는 작업 역시 상당한 노력이 요구될 것이다.
성능 측면에서도 간단한 데이터를 조회하는 경우에도 규모가 큰 테이블에서 필요한 데이터를 찾아야 하기 때문에 오히려 검색 속도가 떨어질 수도 있다.
테이블을 정규화하여 데이터를 분할하게 되면 위와 같은 문제는 자연스럽게 해결된다.

l  특정 요구조건을 만족하는 데이터들을 분할된 테이블로부터 조회하기 위해서는 테이블 간에 논리적인 연관관계가 필요하고 그런 관계성을 통해서 다양한 데이터들을 출력할 수 있는 것이다.

l  이런 논리적인 관계를 구체적으로 표현하는 것이 바로 SQL 문장의 JOIN 조건인 것이다.

l  관계형 데이터베이스의 큰 장점이면서, SQL 튜닝의 중요 대상이 되는 JOIN을 잘못 기술하게 되면 시스템 자원부족이나 과다한 응답시간 지연을 발생시키는 중요 원인이 되므로 JOIN조건은 신중하게 작성해야 한다.

반응형
LIST

'자격증 > SQLD' 카테고리의 다른 글

SQLD - SQL 활용 [집합 연산자]  (0) 2017.08.14
SQLD - SQL 활용 [표준 조인]  (0) 2017.08.14
SQLD - SQL 기본 [ORDER BY 절]  (0) 2017.08.07
SQLD - SQL 기본 [GROUP BY, HAVING 절]  (0) 2017.08.07
SQLD - SQL 기본 [함수]  (0) 2017.08.07
댓글
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함