[SQL] JOIN 함수

jay bong·2024년 4월 24일

SQL

목록 보기
7/9
post-thumbnail

JION 함수

JOIN함수도 여러개의 SELECT문의 결과를 하나의 결과 세트로 연결한다. 즉, JOIN은 원하는 데이터를 추출하기 위해 두개의 테이블을 결합하는 것이다.

JOIN 사용법

1. 공통컬럼 찾기

JOIN을 하기 위해서는 가장 먼저 공통의 칼럼을 찾아야 한다. 공통의 칼럼이란, 두 테이블에서 공통으로 존재하는 컬럼이다.

2. 공통컬럼 관계찾기

공통의 칼럼뿐 아니라 어떤 테이블이 기준이 되고, 어떤 칼럼이 종속이 되는지를 잘 파악해야 한다. 테이블의 구조는 아래와 같이 다양하게 표현된다.

  • 1(기준):1(기준)
  • 1(기준):N(비교)
  • N(비교):1(기준)
  • N(비교):N(비교)

여기서, N:N 구조를 사용했을 때, 기준테이블이 없기 때문에 데이터가 부풀려져 리턴될 수 있다. 즉, 데이터의 크기에 비해 의미있는 데이터가 적어질 수 있다. 또한 데이터 검증을 할 수 없기에, 조인함수에서는 N:N 구조는 사용하지 않는 것을 권장한다.

또한 데이터에는 PK,FK가 존재한다.

PK 는 기본키이기 때문에 NULL 일 수 없고, 유일한 값을 가진다. 따라서 PK 컬럼은 모든 데이터를 식별하는 기준이 되는 컬럼으로 보면 된다.

테이블 당 하나의 PK만 가진다.

FK 는 외래키이다. 다른 테이블의 PK 와 연결되어 테이블 간 관계를 나타내주는 역할을하는 칼럼을 의미한다.

3. 적절한 JOIN 방식 찾기

JOIN함수는 다양한 방식이 있기 때문에 최종적으로 구하고자 하는 데이터와 알맞은 방식을 선택해야 한다.

JOIN의 종류

JOIN 종류특징
INNER JOIN두 테이블에서 일치하는 값을 가진 행을 출력(교집합)
LEFT JOIN왼쪽 테이블의 모든 행과 오른쪽 테이블의 일치하는 행을 반환한다. 일치하는 항목이 없으면 오른쪽 테이블의 열에 대해 NULL 값이 출력됩니다.
RIGHT JOIN오른쪽 테이블의 모든 행과 왼쪽 테이블의 일치하는 행을 반환합니다. 일치하는 항목이 없으면 왼쪽 테이블의 열에 대해 NULL 값이 출력됩니다.
FULL OUTER JOIN모든 데이터를 보고 싶을 때 사용합니다. 용량 이슈로 자주 사용하지 않아요! MySQL 환경에서는 제공하지 않아 LEFT JOIN 과 RIGHT 조인의 UNION으로 계산해야합니다. (합집합)

INNER JOIN

# INNER JOIN 작성법(기초편)
select 컬럼1, 컬럼2... 
from 테이블1 as a
inner join 테이블2 as b
on a.공통컬럼=b.공통컬럼

# INNER JOIN 작성법 (서브쿼리 활용편)
select 테이블명1.컬럼a, .... 
from(   select 컬럼a, 컬럼b ... 
				from 테이블1
		 )as 테이블명1 #첫번째 셀렉트 절의 결과를 '테이블명1' 로 명시 
inner join #(또는 join) #테이블1과 테이블2를 inner join 하겠다는 의미
	  (   select 컬럼c, 컬럼d... 
			  from 테이블2
		 )as 테이블명2 #두번째 셀렉트 절의 결과를 '테이블명2' 로 명시 
on a.공통컬럼=b.공통컬럼# 공통된 의미의 컬럼으로, 컬럼이름이 같을필요는 없음
# 공통컬럼은 ON 절의 조건절이 되며, 조건절은 1개가 아닐 수 있음
# 즉, on a.공통컬럼=b.공통컬럼 and a.공통컬럼2=b.공통컬럼2 가 될 수 있음

LEFT JOIN

# LEFT JOIN 작성법(기초편)
select 컬럼1, 컬럼2... 
from 테이블1 as 테이블명1
left join 테이블2 as 테이블명2   
on a.공통컬럼=b.공통컬럼

# LEFT JOIN 작성법 (서브쿼리 활용편)
select 테이블명1.컬럼a, .... 
from(   select 컬럼a, 컬럼b ... 
				from 테이블1
		 )as 테이블명1 #첫번째 셀렉트 절의 결과를 '테이블명1' 로 명시 
LEFT join #테이블1과 테이블2를 LEFT join 하겠다는 의미
	  (   select 컬럼c, 컬럼d... 
			  from 테이블2
		 )as 테이블명2 #두번째 셀렉트 절의 결과를 '테이블명2' 로 명시 
on a.공통컬럼=b.공통컬럼# 공통된 의미의 컬럼으로, 컬럼이름이 같을필요는 없음

RIGHT JOIN

# RIGHT JOIN 작성법(기초편)
select 컬럼1, 컬럼2... 
from 테이블1 as 테이블명1
RIGHT JOIN 테이블2 as 테이블명2   
on a.공통컬럼=b.공통컬럼

# RIGHT JOIN 작성법 (서브쿼리 활용편)
select 테이블명1.컬럼a, .... 
from(   select 컬럼a, 컬럼b ... 
				from 테이블1
		 )as 테이블명1 #첫번째 셀렉트 절의 결과를 '테이블명1' 로 명시 
RIGHT JOIN #테이블1과 테이블2를 RIGHT JOIN 하겠다는 의미
	  (   select 컬럼c, 컬럼d... 
			  from 테이블2
		 )as 테이블명2 #두번째 셀렉트 절의 결과를 '테이블명2' 로 명시 
on a.공통컬럼=b.공통컬럼# 공통된 의미의 컬럼으로, 컬럼이름이 같을필요는 없음
profile
Fly High

0개의 댓글