JAVA를 잡아라!...

SQL - 5. 조인 (Join) 본문

DBMS_SQL/Oracle

SQL - 5. 조인 (Join)

onivv 2023. 12. 25. 15:23
  • 2개 이상의 테이블에서 쿼리를 작성하는 방법
  • 2개 이상의 테이블 데이터를 조합한 결과 검색 가능
  • 데이터 중복을 최소화 : 저장 공간 확보, 데이터 수정 용이
  • 엔티티(entity) : 저장되고 관리되어야 할 데이터로, DB의 테이블은 1가지 이상의 엔티티를 포함

 

#1 내부 조인 (INNER JOIN)

조인키에 해당하는 각 테이블의 열값을 비교해 조건에 맞는 값 검색

SELECT		[열 이름]
FROM		[테이블1]
INNER JOIN 	[테이블2]
ON		[테이블1.열] = [테이블2.열]
WHERE		[검색조건]
  • SELECT 문 : 각 테이블에 검색할 열
  • FROM 문 : 조인할 테이블 이름
  • ON 문 : 테이블을 조인할 때 조인조건(조인키)으로 사용할 열
  • WHERE 문 : 조인을 완료한 상태에서 조건에 맞는 값을 가져오고자 사용
  • * AS 별칭 : 테이블 이름이 길거나, 테이블에 같은 이름의 열이 있을 때 사용 (어떤 테이블의 열을 검색할지 판단)
  • 데이터 검색 '성능'을 높이기 위해 인덱스가 형성된 열 or 데이터 양이 적은 열을 조인조건으로 우선 사용

 

#2 외부 조인 (OUTER JOIN)

열의 일치 항목을 고려하지 않고, 한쪽 테이블을 다른 쪽 테이블에 조합할 때 사용

SELECT	[열 이름]
FROM	[테이블1]
<LEFT, RIGHT, FULL> OUTER JOIN [테이블2]
ON	[테이블1.열] = [테이블2.열]
WHERE	[검색조건]

 

1) LEFT(RIGHT) OUTER JOIN

  • 왼쪽(오른쪽) 테이블 기준으로 모든 행을 표시하고, 오른쪽(왼쪽) 테이블에 존재하지 않는 데이터는 NULL로 표시
  • 기준 테이블에 있는 데이터만 추출하려면 LEFT(RIGHT) OUTER JOIN 결과에서 NULL 데이터만 추출하면 됨

2) FULL OUTER JOIN

  • LEFT + RIGHT OUTER JOIN
  • 양쪽 테이블의 일치하지 않는 행도 모두 검색
  • 실제 사용 X... 누락이나 오류 찾기 등 데이터 확인용으로 사용

 

#3 교차 조인 (CROSS JOIN)

각 테이블의 모든 경우의 수를 조합한 데이터가 필요한 경우 사용 (카르테시안 곱, cartesian product)

SELECT		[열 이름]
FROM		[테이블1]
CROSS JOIN	[테이블2]
WHERE		[검색조건]
  • FROM 문에 조인조건 없음
  • 한 테이블에 저장된 모든 행이 다른 테이블의 행을 조인
  • 자주 사용 X... 샘플 데이터 만들기, 각 행에 같은 숫자의 데이터 만들기 등 활용

 

#4 셀프 조인 (SELF JOIN)

같은 테이블을 사용하는 특수한 조인 (반드시 별칭 사용)

SELECT		[열 이름]	-- ex) a.열1, b.열2
FROM		[테이블1 AS a]
INNER JOIN	[테이블1 AS b]
ON		[조인조건]	-- ex) a.열1 = b.열1
WHERE		[검색조건]