JOIN

m_ngyeong·2024년 7월 26일
0

Database(DB)

목록 보기
4/4
post-thumbnail

SQL


JOIN(⨝)

JOIN은 두 개의 릴레이션에서 연관된 튜플들을 결합하여, 하나의 새로운 릴레이션으로 반환한다.

<동호회>

회원ID사번이름
101B117신짱구
102K230김철수
103L300한유리

<사원>

사번이름주소
K230김철수서울
L300한유리안동
K400임맹구성남

THETA JOIN(세타 조인) :

두 릴레이션의 속성 값을 비교하여 특정 조건을 만족하는 튜플만 반환하는 방식이다.
세타 조인은 = 외에도 !=, <, >, , 와 같은 다양한 비교 연산자를 사용할 수 있는 조인의 일종이며, 보통 ON 절을 사용해 조인 조건을 명시한다.

세타조인에서 = 연산자를 사용하는 조인을 동등 조인(Equi-Join)이라 한다.

EQUI JOIN(동등 조인) :

JOIN 대상 테이블에서 공통 속성을 기준으로 =(equal) 비교에 의해 같은 값을 가지는 행을 연결하여 결과 생성하는 방법이다.

  • '이름'이 '푸바오'인 튜플의 '과목번호'와 '과목이름'을 구하는 SQL문 :
    SELCET 과목번호, 과목이름 FROM R1, R2 WHERE R1.학번 = R2.학번 AND R1.이름 = '푸바오';

NATURAL JOIN(자연 조인) :

EQUI JOIN에서 JOIN 조건이 =일 때 동일한 속성이 두 번 나타나게 되는데, 이 중 중복된 속성을 제거하여 같은 속성을 한 번만 표기하는 방법이다.

  • SELECT [테이블명1.]속성명, [테이블명2.]속성명... FROM 테이블명1 NATURAL JOIN 테이블명2;

JOIN ~ USING절 :

  • SELECT [테이블명1.]속성명, [테이블명2.]속성명... FROM 테이블명1 JOIN 테이블명2 USING(속성명);

INNTER JOIN(내부 조인) :

내부 조인은 공통 존재 컬럼의 값이 같은 경우를 추출하는 기법이다.

SELECT 
	동호회.*, 사원.*
FROM 동호회 INNER JOIN 사원
ON 동호회.사번=사원.사번;

<결과>

회원ID사번이름사번이름주소
102K230김철수K230김철수서울
103L300한유리L300한유리안동

OUTER JOIN(외부 조인) :

외부 조인은 왼쪽/오른쪽 중 하나의 테이블의 모든 데이터와 그 반대에 해당하는 데이블의 동일한 데이터를 추출하는 기법 또는 양쪽의 모든 데이터를 추출하는 기법이다.

LEFT OUTER JOIN(왼쪽 외부 조인) :

왼쪽 테이블의 모든 데이터와 오른쪽 데이블의 동일한 데이터를 추출하는 기법이다.

  • INNTER JOIN의 결과를 구한 수, 우측 항 릴레이션의 어떤 튜플과도 맞지 않는 좌측 항의 릴레이션에 있는 튜플들에 NULL 값을 붙여서 INNTER JOIN의 결과에 추가
  • SELECT a.코드, 이름, 동아리명 FROM 사원 a LEFT OUTER JOIN 동아리 b ON a.코드 = b.코드;

SELECT 
	동호회.*, 사원.*
FROM 동호회 LEFT OUTER JOIN 사원
ON 동호회.사번=사원.사번;

<결과>

회원ID사번이름사번이름주소
101B117신짱구NULLNULLNULL
102K230김철수K230김철수서울
103L300한유리L300한유리안동

RIGHT OUTER JOIN(오른쪽 외부 조인) :

오른쪽 테이블의 모든 데이터와 왼쪽 데이블의 동일한 데이터를 추출하는 기법이다.

  • INNTER JOIN의 결과를 구한 수, 좌측 항 릴레이션의 어떤 튜플과도 맞지 않는 우측 항의 릴레이션에 있는 튜플들에 NULL 값을 붙여서 INNTER JOIN의 결과에 추가

SELECT 
	동호회.*, 사원.*
FROM 동호회 RIGHT OUTER JOIN 사원
ON 동호회.사번=사원.사번;

<결과>

회원ID사번이름사번이름주소
102K230김철수K230김철수서울
103L300한유리L300한유리안동
NULLNULLNULLK300임맹구성남

FULL OUTER JOIN(완전 외부 조인) :

양쪽의 모든 데이터를 추출하는 기법이다.

SELECT 
	동호회.*, 사원.*
FROM 동호회 FULL OUTER JOIN 사원
ON 동호회.사번=사원.사번;

<결과>

회원ID사번이름사번이름주소
101B117신짱구NULLNULLNULL
102K230김철수K230김철수서울
103L300한유리L300한유리안동
NULLNULLNULLK300임맹구성남

SEMI JOIN(세미 조인) :

서브 쿼리를 사용하여 서브 쿼리의 결과에 존재하는 데이터만 메인 쿼리에서 추출하는 조인 방법이다.

  • 조인 대상 릴레이션 중 하나를 프로젝트(PROJECT) 연산을 수행한 후 조인
  • 1:n 관계에서 1의 컬럼만을 사용할 경우 사용하는데, 집계함수 없이 group bydistinct를 통해 중복을 제거하고 사용하면 성능 향상의 효과를 얻을 수 있음
  • `SELECT * FROM A WHRER A.name IN (SELECT B.name FROM B);
  • SELECT * FROM A WHRER EXISTS (SELECT 1 FROM B WHERE A.name = B.name);

CROSS JOIN(교차 조인) :

교차 조인조인 조건 없이 테이블의 모든 데이터 조합하여 추출하는 방식으로 Cartesian Product(카테시안 곱)을 생성한다.

  • 특별한 조인 조건 없이 두 테이블의 모든 가능한 조합을 반환
  • 보통은 사용을 피하는 것이 좋아, 의도적으로 사용되는 경우는 드물며, 대부분은 특정 조인 조건을 명시해서 사용
  • SELECT * FROM A CROSS JOIN B ON A.id = B.id;

<도서>

책번호책명
111운영체제
222자료구조
333컴퓨터구조

<도서가격>

책번호가격
11120,000
22225,000
33310,000
44415,000
SELECT 
	A.책번호, A.책명, B.책번호, B.가격
FROM 도서 A CROSS JOIN 도서가격 B;
// '도서'테이블은 A라는 별칭으로, '도서가격'테이블은 B라는 별칭으로 설정 후 조건 설정 없이 교차 조인

<결과>

A.책번호A.책명B.책번호B.가격
111운영체제11120,000
111운영체제22225,000
111운영체제33310,000
111운영체제44415,000
222자료구조11120,000
222자료구조22225,000
222자료구조33310,000
222자료구조44415,000
333컴퓨터구조11120,000
333컴퓨터구조22225,000
333컴퓨터구조33310,000
333컴퓨터구조44415,000

SELF JOIN(셀프 조인) :

셀프 조인은 자기 자신에게 별칭을 지정한 후 다시 조인하는 기법이다.

  • SELECT * FROM A AS parent JOIN A AS child;

<도서>

책번호책명선수과목_책번호
111운영체제222
222자료구조555
333컴퓨터구조NULL
SELECT 
	A.책번호, A.책명, B.책번호, B.책명
FROM 도서 A JOIN 도서 B;
ON A.선수과목_책번호 = B.책번호;
// '도서'테이블은 A, B라는 별칭으로 따로 설정
// 테이블 내의 다른 컬럼을 조건으로 두어 셀프 조인 수행

<결과>

A.책번호A.책명B.책번호B.책명
111운영체제222자료구조
222자료구조555컴퓨터구조

ANTI JOIN(안티 조인) :

안티 조인은 A 테이블에는 존재하지만, B 테이블에는 존재하지 않는 값만을 선택하는 연산이다.



참고,
길벗알앤디. 『정보처리기사 실기 단기완성』. 길벗. 2023
NCS 정보처리기사 연구회(윤영빈, 서용욱, 김학배, 박인상 공저). 『수제비 2023 정보치리기사 실기』. 건기원. 2023
https://youtu.be/61rPcPhh3Sk?si=Cxelj0s1EV6NZOVe

profile
사용자 경험 향상과 지속적인 성장을 추구하는 프론트엔드 개발자 ʚȉɞ

0개의 댓글