등가 조인(EQUI JOIN)
두 개의 테이블 간 칼럼 값들이 서로 정확하게 일치하는 경우
대부분 PK ↔ FK 관계를 기반으로 한다.
→ 반드시 PK ↔ FK 관계로만 성립하는 것은 아님.
- JOIN의 조건은 WHERE 절에 기술하게 되는데 '=' 연산자를 사용해서 표현한다.
SELECT 테이블1.칼럼명, 테이블2.칼럼명, ...
FROM 테이블1, 테이블2
WHERE 테이블1.칼럼명1 = 테이블2.칼럼명2;
- INNER JOIN으로도 표현할 수 있다. ON절에 JOIN 조건을 넣는다.
SELECT 테이블1.칼럼명, 테이블2.칼럼명, ...
FROM 테이블1 INNER JOIN 테이블2
ON 테이블1.칼럼명1 = 테이블2.칼럼명2;
참고) INNER JOIN
https://it-amin.tistory.com/16
- 특정 칼럼에 접근하기 위해 그 칼럼이 어느 테이블에 존재하는 칼럼인지 명시하는 이유
( → 테이블1.칼럼명, 테이블2.칼럼명으로 표시하는 이유)
- JOIN에 사용되는 두 개의 테이블에 같은 칼럼명이 존재할 수 있기 때문
- SQL에 대한 가독성, 유지보수성을 높이기 위함.
+) 조인 조건에 맞는 데이터만 출력하는 INNER JOIN에 참여하는 대상 테이블이 N개라고 했을 때 N개의 테이블로부터 필요한 데이터를 조회하기 위해 필요한 JOIN 조건은 대상 테이블의 개수에서 하나를 뺀 N-1개 이상이 필요하다.
- 테이블 명이 길고 SQL의 복잡도가 높아지면 가독성이 떨어지기 때문에 ALIAS를 주로 사용한다.
SELECT T1.칼럼명, T2.칼럼명, ...
FROM 테이블1 T1, 테이블2 T2
WHERE T1.칼럼명1 = T2.칼럼명2;
SELECT T1.칼럼명, T2.칼럼명, ...
FROM 테이블1 T1 INNER JOIN 테이블2 T2
ON T1.칼럼명1 = T2.칼럼명2;
- WHERE절에서 JOIN 조건 이외의 검색 조건에 대한 제한 조건을 덧붙여 사용할 수도 있다.
EQUI JOIN의 최소한의 연관관계를 위한 테이블 개수 - 1개의 JOIN 조건을 WHERE 절에 명시하고, 부수적인 제한조건을 논리 연산자를 통하여 추가로 입력하는 것이 가능하다.
SELECT T1.칼럼명, T2.칼럼명, ...
FROM 테이블1 T1, 테이블2 T2
WHERE T1.칼럼명1 = T2.칼럼명2 AND T2.칼럼명2 = 'ABC'
ORDER BY T1.칼럼명2;
SELECT T1.칼럼명, T2.칼럼명, ...
FROM 테이블1 T1 INNER JOIN 테이블2 T2
ON T1.칼럼명1 = T2.칼럼명2
WHERE T2.칼럼명2 = 'ABC'
ORDER BY T1.칼럼명2;
비등가 조인(NONEQUI JOIN)
두 개의 테이블 간 칼럼 값들이 서로 정확하게 일치하지 않는 경우
- JOIN의 조건은 '=' 연산자가 아닌 다른 연산자(BETWEEN, >, >=, <, <= 등)를 사용해서 표현한다.
SELECT 테이블1.칼럼명, 테이블2.칼럼명, ...
FROM 테이블1, 테이블2
WHERE 테이블1.칼럼명1 BETWEEN 테이블2.칼럼명1 AND 테이블2.칼럼명2;
JOIN이 필요한 이유
: 정규화
정규화
: 불필요한 데이터의 정합성을 확보하고 이상현상(Anomaly) 발생을 피하기 위해
테이블을 분할하여 생성하는 것.
- 하나의 테이블에 모든 데이터를 집중시켜 놓고 데이터를 조회할 경우
- 데이터의 정합성에 더 큰 비용 지불해야함.
- 데이터를 추가, 삭제, 수정하는 작업에 상당한 노력이 요구됨.
- 간단한 데이터를 조회하는 경우에도 규모가 큰 테이블에서 데이터를 찾아야하기 때문에 검색 속도가 떨어질 수 있음. (성능 측면)
- 특정 요구조건을 만족하는 데이터들을 분할된 테이블로부터 조회하기 위해서는 테이블 간에 논리적인 연관관계가 필요함.
→ 이런 논리적인 연관관계를 구체적으로 표현하는 것이 SQL 문장의 JOIN 조건.
'데이터베이스 > 데이터베이스 공부' 카테고리의 다른 글
FROM절 JOIN(INNER JOIN, NATURAL JOIN, USING 조건절, ON 조건절, CROSS JOIN, OUTER JOIN) (0) | 2022.09.03 |
---|---|
일반 집합 연산자, 순수 관계 연산자 (0) | 2022.09.03 |
조인수행원리(NL Join, Sort Merge Join, Hash Join) (0) | 2022.09.01 |
[데이터베이스] 전체 테이블 스캔과 인덱스 스캔 (0) | 2022.09.01 |
인덱스(인덱스 특징, 인덱스 종류, B-트리 인덱스, 클러스터형 인덱스) (0) | 2022.09.01 |