프로그래밍

[SQL 입문] 조인 본문

SQL

[SQL 입문] 조인

시케 2023. 6. 22. 15:27
728x90
반응형

조인

교재:  Do it! SQL 입문

138p ~ 161p

테이블을 2개 이상 조인한다는 의미

 

내부 조인

조인은 상황에 따라 여러 종류로 구분해 사용한다. 먼저 알아볼 조인은 가장 많이 사용하는 조인인 내부 조인으로, 보통 조인이라고 하면 내부 조인을 가리킬 만큼 널리 쓰이는 형태이다. 내부 조인은 조인키에 해당하는 각 테이블의 열값을 비교해 조건에 맞는 값을 검색한다.

-- 내부 조인의 기본 형식
SELECT [열 이름]
FROM [테이블 1]
INNER JOIN [테이블 2] ON [테이블 1.열] = [테이블 2.열]
WHERE [검색 조건]
-- INNER JOIN 문을 적용한 쿼리
SELECT
	[고객.고객 번호], [고객], [고객 이름], [주문.주문 번호], [주문.고객 번호], [주문.주문 날짜]
FROM [고객]
	INNER JOIN [주문] ON [고객.고객 번호] = [주문.고객 번호]
    
-- 3개 이상 테이블의 INNER JOIN 기본 형식
SELECT [열 이름]
FROM [테이블 1]
INNER JOIN [테이블 2] ON [테이블 1.열] = [테이블 2.열]
INNER JOIN [테이블 3] ON [테이블 2.열] = [테이블 3.열]
WHERE[검색 조건]

 

ON 문과 WHERE 문의 차이

많은 사람이 조인을 학습할 때 ON 문과 WHERE 문의 역할을 혼동한다. 두 구문은 데이터를 필터링한다는 점에서는 역할이 비슷해 보이지만 실제는 완전히 다르다. ON 문은 조인할 때 조인 조건을 위해 사용하며, WHERE 문은 조인을 완료한 상태에서 조건에 맞는 값을 가져오고자 사용한다. 물론 ON 문에 조건을 다양하게 부여해 WHERE 문과 같은 효과를 내게 할 수도 있지만 조인 조건을 만족하는 데이터 매칭 과정에서 오차가 발생하므로 그렇게 해서는 안 된다. 반드시 ON 문과 WHERE 문의 성격을 분리해 사용하자.

 

외부 조인

INNER JOIN은 두 테이블을 조인해 조인 조건으로 사용한 열에 있는 같은 값을 조합해 검색했다. 하지만 다른 테이블에 있는 행서에 일치 항목이 아닌 행을 조합해 검색해야 할 때도 있다. 그런 경우에 외부 조인을 사용한다. 예를 들어 상품을 주문한 고객과 주문하지 않은 고객을 포함해 주문 내역을 함께 검색하고 싶다면 외부 조인을 사용할 수 있다. 정리하자면 외부 조인은 열의 일치 항목을 고려하지 않고, 한쪽 테이블을 다른 쪽 테이블에서 조합할때 사용한다.

-- 외부 조인의 기본 형식
SELECT [열 이름]
FROM [테이블 1]
<LEFT, RIGHT, FULL> OUTER JOIN [테이블 2] ON [테이블 1.열] = [테이블 2.열]
WHERE [검색 조건]

 

LEFT OUTER JOIN 문의 기본 개념 알아보기

기본 형식에서 봤듯이 OUTER JOIN은 LEFT, RIGHT, FULL 중 한 옵션을 지정해야 한다. LEFT, RIGHT는 기준 테이블을 정하는 것이다. 예를 들어 A, B 테이블이 좌우에 있다고 생각했을 때 A 테이블을 기준으로 B 테이블을 조인하고 싶다면 LEFT를 사용하고, B테이블을 기준으로 A 테이블을 조인하고 싶다면 RIGHT를 사용한다.

-- LEFT OUTER JOIN 문을 적용한 쿼리
SELECT
	[고객.고객 번호], [고객.고객 이름], [주문.주문 번호], [주문.고객 번호], [주문.주문 날짜]
FROM [고객]
	LEFT OUTER JOIN [주문] ON [고객.고객 번호] = [주문.고객 번호]

교차 조인

자주 사용하지는 않지만, 각 테이블의 모든 경우의 수를 조합한 데이터가 필요한 경우 교차 조인을 사용할 수 있다. 교차 조인은 카르테시안 곱이라고도 한다.

-- 교차 조인의 기본 형식
SELECT [열 이름]
FROM [테이블 1]
	CROSS JOIN [테이블 2]
WHERE [검색 조건]

셀프 조인

셀프 조인은 같은 테이블을 사용하는 특수한 조인이다. 셀프 조인을 사용하는 방법은 지금까지 배운 조인과 같다. 용어 그대로 자기 자신을 조인에 사용한다는 것만 기억하자. 한가지 주의 사항은 반드시 별칭을 사용해야 한다는 것이다. 만약 별칭을 사용하지 않으면 오류가 발생한다.

-- SELF JOIN 쿼리 실행 예
SELECT
	a.symbol, b.company_name
FROM nasdaq_company AS a
	INNER JOIN nasdaq_company AS b
    	ON a.symbol = b.symbol

 

 

 

 

 

 

728x90
반응형
Comments