데이터베이스/데이터베이스 공부

EQUI JOIN(등가 조인)과 Non EQUI JOIN(비등가 조인)

아밍나 2022. 9. 2. 23:16
728x90

등가 조인(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

 

조인(Join)의 종류(내부 조인, 왼쪽 조인, 오른쪽 조인, 합집합 조인)

조인 하나의 테이블이 아닌 두 개 이상의 테이블을 묶어서 하나의 결과물을 만드는 것.  - MySQL에서는 JOIN이라는 쿼리로, MongoDB에서는 lookup이라는 쿼리로 처리할 수 있다.  - 여러 테이블을 조인

it-amin.tistory.com


- 특정 칼럼에 접근하기 위해 그 칼럼이 어느 테이블에 존재하는 칼럼인지 명시하는 이유

( → 테이블1.칼럼명, 테이블2.칼럼명으로 표시하는 이유)

  1. JOIN에 사용되는 두 개의 테이블에 같은 칼럼명이 존재할 수 있기 때문
  2. 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 조건.

728x90
반응형