상세 컨텐츠

본문 제목

[개미의 걸음 SQLD 2과목] JOIN(외부조인, 내부조인, 등가조인 , 비등가조인 , 셀프조인, 네츄럴조인, 크로스 조인)

자격증/SQLD

by IT개미 데이터 2020. 12. 29. 07:07

본문

728x90

들어가기 전...

1. FROM절

  • FROM절에 두 개 이상의 테이블명을 입력하게 되면 FROM절만으로도 테이블 연결 가능
  • ANSI/ISO SQL에서 표시하는 FROM절의 JOIN 형태
        → INNER JOIN, NATURAL JOIN, USING 조건절, ON조건절, CROSS JOIN, OUTER JOIN
        → 기존에 WHERE절을 사용하던 JOIN방식과 약간의 차이 존재

# FROM과 EQUI JOIN의 차이

더보기
  • FROM을 통해 테이블을 연결할 경우, 12개의 자료에 4개의 자료가 각각 들어감
    [4*12=48개]
  • JOIN을 통해 테이블을 연결할 경우, 12개의 자료들에 4개의 자료 중 DEPTNO가 일치하는 자료들을 연결해줌[12개]

 

2. USING 조건절

  • 동일한 이름을 가진 칼럼 중 원하는 칼럼에 대해서만 선택적으로 EQUI JOIN을 수행
        → NATURAL JOIN은 동일한 이름을 갖는 모든 칼럼에 대해 EQUI JOIN을 수행하는 방법
  • USING조건절을 이용한 EQUI JOIN에서 Alias나 테이블명과 같은 접두사 사용 불가
        → NATURAL JOIN과 동일

 

2. ON 조건절

  • 칼럼명이 다르더라도 JOIN 조건을 수행
  • WHERE절과 충돌 없이 함께 사용 가능
  • ON 조건절에 JOIN조건 외에도 데이터 검색 조건을 추가할 수 있음
        → 검색 조건 목적인 경우, WHERE절 사용을 권고
        → OUTER JOIN에서 조인의 대상을 제한하기 위한 목적으로 사용되는 추가조건 경우, ON절 사용

 

JOIN

출처 : DBGUIDE.NET

두 개 이상의 테이블과 연결 또는 결합하여 데이터를 출력할 때 사용

  • JOIN은 관계형 데이터베이스의 가장 큰 장점
  • 보통 Primary Key[PK]나 Foreign Key[FK] 값의 연관에 의해 행들이 JOIN됨
        → 가끔 PK, FK의 관계가 없어도 논리적인 값들의 연관만으로 JOIN이 성립되기도 함
  • FROM절에 여러 테이블이 나열되더라도 2개의 테이블씩만 조인 가능
        ex1> A,B,C테이블 JOIN 
    →  ((A JOIN B) JOIN C)
        ex2> A,B,C,D테이블 JOIN →  ( ( (A JOIN D) JOIN C) JOIN B)
  • 조인은 가로 연결[칼럼들을 연결]
    집합연산자는 세로 연결[같은 칼럼에 데이터 추가]
  • JOIN의 종류에는 외부조인, 내부조인, 등가조인 , 비등가조인 , 셀프조인, 네츄럴조인 등이 있다.

 

1. 외부조인[Outer Join]

출처 : DBGUIDE.NET

한쪽에만 데이터가 있는 경우 데이터가 있는 쪽 테이블의 내용을 모두 출력하는 것

  • 즉, 데이터가 존재하지 않더라도 NULL로 출력됨
  • OUTER JOIN은 JOIN 조건을 FROM 절에서 정의하겠다는 의미
        → USING 조건절이나 ON 조건절을 필수적으로 사용
Left Outer Join JOIN문의 왼쪽에 있는 칼럼을 기준으로 오른쪽 칼럼의 데이터를 데이터 존재여부와 관계없이 출력
   * 오른쪽 칼럼에 데이터가 없는 경우 NULL로 출력
   * 왼쪽 칼럼과 오른쪽 칼럼의 동일한 데이터는 데이터 값 표시
   * 왼쪽 칼럼과 오른쪽 칼럼의 동일하지 않은 데이터는 오른쪽 칼럼에 NULL로 표시
Right Outer Join JOIN문의 오른쪽에 있는 칼럼을 기준으로 왼쪽 칼럼의 데이터를 데이터 존재여부와 관계없이 출력
   * 왼쪽 칼럼에 데이터가 없는 경우 NULL로 출력
   * 오른쪽 칼럼과 왼쪽 칼럼의 동일한 데이터는 데이터 값 표시
   * 오른쪽 칼럼과 왼쪽 칼럼의 동일하지 않은 데이터는 왼쪽 칼럼에 NULL로 표시
Full Outer Join JOIN문의 왼쪽과 오른쪽 칼럼의 모든 데이터를 조인하여 결과를 출력
중복되는 데이터는 삭제된다.[UNION과 유사한 기능, UNION ALL과는 다름]

 

2. 내부조인[Iner Join]

기준테이블과 연결한 테이블의 중복된 값을 보여주는 JOIN

  • WHERE절에서 사용하던 JOIN조건을 FROM절에서 사용
  • 등가조인의 FROM절에서 두 테이블명을 연결할 때 ,대신 INNER JOIN사용
  • WHERE절 대신에 USING조건절이나 ON 조건절을 필수적으로 사용

 

3. 등가조인[Equi Join]

SELECT * FROM 테이블1, 테이블2
	WHERE 테이블명1.컬럼명1=테이블명2.컬럼명2;
  • 테이블간의 공통 컬럼을 활용하여 각 테이블의 특정 컬럼에 일치한 데이터를 기준으로 연결하는 방법.
        → 두 개의 테이블 간의 일치하는 것을 조인 [교집합]
  • 대부분 PK와 FK와의 관계를 기반으로 Equi Join이 만들어짐
  • 조인시 사용하는 테이블의 공통 컬럼은 '(테이블명이나 별칭).컬럼명' 형태로 입력
  • '='을 사용하여 표현
  • 등가조인(Equi Join)=내부조인(Inner Join)=단순조인(Simple Join)

# 해시조인[Hash Join]

더보기

테이블을 해시 메모리에 적재한 후에 해시 함수로써 연결하는 방법

  • 해시조인은 EQUI조인만 사용 가능한 방법
  • 먼저 선행 테이블을 연결하고 선행 테이블에서 주어진 조건[WHERE구]에 해당하는 행을 선택
        → 해당 행이 선택되면 Join Key를 기준으로 해시 함수를 사용해 해시 테이블을 메인메모리에 생성하고 후행 테이블에서 주어진 조건을 만족하는 행을 찾음
        → 후행 테이블의 Join Key를 사용해 해시 함수를 적용해 해당 버킷을 검색

# INTERSECT 연산자

더보기

두 개의 테이블에서 교집합을 조회

SELECT DEPTNO FROM EMP
INTERSECT
SELECT DEPTNO FROM DEPT;
  • EMP테이블의 DEPTNO칼럼과 DEPT테이블의 DEPTNO칼럼의 공통된 값을 조회

2020/12/17 - [자격증/SQLD] - [개미의 걸음 SQLD 2과목] SQL기초 ① 연산자

 

 

4. 비등가 조인[Non-Equi Join]

SELECT * FROM 테이블명1, 테이블명2
	WHERE 테이블명1.컬럼명
    BETWEEN (테이블명2.컬럼명2-1) AND (테이블명2.컬럼명2-2);
  • 테이블간의 컬럼 값들이 정확하게 일치하지 않을 경우 사용하는 방법
  • 'BETWEEN, >, >=, <, <= 등의 연산자'들을 사용하여 표현
        → "="를 사용하지 않음

# 조건이 여러 개인 비등가 조인

더보기

조건이 여러 개인 경우 WHERE 안에 AND를 사용

 

5. 셀프 조인[Self Join]

SELECT 출력할 컬럼명1, 컬럼명2,..
	FROM 테이블명1 별칭1, 테이블명1 별칭2
    WHERE 별칭1.컬럼명2=별칭2.컬럼명2;
  • 한 테이블 내 데이터를 활용하여 자체적으로 조인하는 방법
        → 하나의 테이블에서 두 개의 칼럼이 연관 관계를 가지고 있는 경우 사용
  • 테이블과 칼럼명이 모두 동일하므로 식별을 위해 반드시 Alias[별칭] 사용

 

6. 네츄럴 조인[NATURAL JOIN]

SELECT 출력할 칼럼명1, 칼럼명2,..
	FROM 테이블명1 NATURAL JOIN 테이블명2;
  • 두 테이블 간 동일한 이름을 갖는 모든 칼럼에 대해 EQUI JOIN을 수행하는 방법
  • USING 조건절, ON조건절, WHERE절에서의 JOIN조건을 함께 정의 불가
  • SQL Server에서는 지원하지 않는 기능
  • NATURAL JOIN에 사용된 칼럼들은 같은 데이터 유형이어야 함
  • NATURAL JOIN은 Alias[별칭]이나 테이블명과 같은 접두사(ex> EMP.DEPTNO)를 붙일 수 없음

 

7. 크로스 조인[CROSS JOIN]

SELECT *(혹은 출력할 컬럼명들)
	FROM 테이블1
    CROSS JOIN 테이블2;
  • 조인되는 컬럼의 각각의 행들이 모두 매칭되어 출력되는 방법[Product연산을 수행]
  • 카티젼 곱[Cartesian Product]이라고도 함
  • FROM을 이용한 테이블 연결과 동일한 결과
  • 적절한 JOIN조건이 없을 때 발생

 

 

 

 

 

 

 

728x90

관련글 더보기

댓글 영역