> JOIN
- JOIN이 필요한 기본적인 이유는 과목 1에서 배운 정규화에서부터 출발한다. 정규화란 불필요한 데이터의 적합성을 확보하고 이상현상 발생을 피하기 위해, 테이블을 분할하여 생성하는 것이다.
- 테이블을 정규화하여 데이터를 분할하게 되면 성능이나 비용측면의 문제는 해결된다. 하지만 특정 요구 조건을 만족하는 데이터들을 분할된 테이블로부터 조회하기 위해서는 테이블 간에 논리적인 연관관계가 필요하고 그런 관계성을 통해서 다양한 데이터들을 조회할 수 있는 것이다. 그리고 이런 논리적인 관계를 성립시켜주는 것이 바로 JOIN
- 두 개 이상의 테이블들을 연결 또는 결합하여 데이터를 조회하는 것을 JOIN이라 한다. 조인은 관계형 데이터베이스의 가장 큰 장점이면서 기본적인 기능
- 일반적인 경우 행들은 PK나 FK 값의 연관에 의해 JOIN이 성립된다. 하지만 어떤 경우에는 이러한 PK, FK의 관계가 없어도 논리적인 값들의 연관성만으로 JOIN이 성립 가능하다. 이 기능은 계층형이나 망형 데이터베이스와 비교해서 관계형 데이터베이스의 큰 장점이다.
- 주의할 점은 FROM 절에 여러 테이블이 나열되더라도 SQL에서 데이터를 처리할 때는 단 두개의 집한 간에만 조인이 일어난다는 것이다. FROM절에 A, B, C 테이블이 나열되었더라도 특정 2개의 테이블만 먼저 조인 처리되고, 2개의 테이블이 조인되어서 처리된 새로운 데이터 집합과 남은 한 개의 테이블이 다음 차례로 조인 되는것이다.
- JOIN에 참여하는 대상 테이블이 N개라고 했을 때, N개의 테이블로부터 필요한 데이터를 조회하기 위해 필요한 JOIN 조건은 대상 테이블의 개수에서 하나를 뺀 N-1개 이상이 필요하다.
> 등가 조인 (EQUI JOIN)
- EQUI JOIN은 두 개의 테이블 간에 칼럼 값들이 서로 정확하게 일치하는 경우에 사용되는 방법으로 대부분 PK ↔ FK의 관계를 기반으로 한다. 그러나 일반적으로 테이블 설계 시에 나타난 PK ↔ FK의 관계를 이용하는 것이지 반드시 PK ↔ FK의 관계로만 EQUI JOIN이 성립하는 것은 아니다.
- 고전적인 JOIN의 조건은 WHERE 절에 기술하게 되는데 EQUI JOIN은 "=" 연산자를 사용해서 표현한다.
- SQL 문장에 단순히 칼럼명이 오지 않고 테이블명과 칼럼명을 같이 명시하는 이유는 먼저 JOIN에 사용되는 두 개의테이블에 같은 칼럼명이 존재하는 경우에는 DBMS의 옵티마이저는 어떤 칼럼을 사용해야 할지 모르기 때문에 파싱 단계에서 에러가 발생한다. 두번째는 개발자나 사용자가 조회할 때 쉽게 알 수 있게 하므로 SQL에 대한 가독성이나 유지보수성을 높이는 효과가 있다.
- SELECT 절에서 칼럼에 대한 ALIAS를 사용하는 것처럼 FROM 절의 테이블에 대해서도 ALIAS를 사용할 수 있다.
- 만약 테이블에 대한 ALIAS를 적용해서 SQL 문장을 작성했을 경우, WHERE 절과 SELECT 절에는 테이블명이 아닌 테이블에 대한 ALIAS를 사용해야 한다.(미사용시 에러 발생)
- JOIN 조건을 WHERE 절에 명시하고, 부수적으로 제한 조건을 논리 연산자를 통하여 추가로 입력하는 것이 가능하다.
> NON EQUI JOIN
- 두개의 테이블 간에 칼럼 값들이 서로 정확하게 일치하지 않는 경우에는 EQUI JOIN을 사용할 수 없다. 이런 경우 NON EQUI JOIN을 시도하는데 "=" 연산자가 아닌 다른 (BETWEEN, > , >=, < , <= 등) 연산자들을 사용하여 JOIN을 수행하는 것이다.
- 데이터 모델에 다라서 NON EQUI JOIN이 불가능한 경우도 있다.
출처 : 한국데이터산업진흥원 게시자료