본문 바로가기
Study

[SQLD] JOIN 종류 : OUTER/INNER/NATURAL/CROSS/SELF

by 셀린Celinee 2023. 11. 21.
728x90
  • JOIN : 2개 이상의 테이블을 연결 / 여러 테이블에서 정보를 가져옴
    • 공통의 칼럼을 기준으로 여러 테이블을 합쳐줌

1. OUTER JOIN

            • 외부 조인 : 1개 테이블에만 데이터가 있어도 결과 나옴
            • 데이터가 없는 부분 ⇒ NULL로 가져옴
            • A테이블 : 방문자 정보 / B테이블 : 구매자 정보
              • (매장에 방문 + 구매O 한 사람) & (방문 + 구매X 한 사람) 알아내기
                • B테이블에 구매자 정보는 없더라도 → 값을 표출해야 하는 상황 ⇒ 문제를 해결할 수 있는 조인기법 = OUTER JOIN

1) LEFT OUTER JOIN

            • SELECT * FROM A
              • ‘LEFT OUTER JOIN’ 양옆에 테이블명 기입 → ON 절에 공통컬럼 입력
            • LEFT OUTER JOIN B ON A.NO = B.NO;
              • 두 개의 테이블에서 같은 것(일치/포함되는 정보)을 조회하고 + 왼쪽 테이블에 있는 것을 모두 포함해서 조회 ⇒ 왼쪽을 기준으로 오른쪽 테이블이 편입된다고 생각하면 편함

2) RIGHT OUTER JOIN

            • 두 개의 테이블에서 같은 것(일치/포함되는 정보)을 조회하고 + 오른쪽 테이블에 있는 것을 모두 포함해서 조회
            • SELECT * FROM A
              • ‘RIGHT OUTER JOIN’ 양옆에 테이블명 기입 → ON 절에 공통컬럼 입력
            • RIGHT OUTER JOIN B ON A.NO = B.NO;

3) FULL OUTER JOIN

            • 양쪽 테이블에 있는 데이터를 모두 보여줌 ⇒ 둘을 무지성 합쳐버림 → 해당되지 않는 값들은 NULL 처리 (아직 정해지지 않은 값)
            • SELECT * FROM A FULL OUTER JOIN B ON A.NO = B.NO;
              • ‘FULL OUTER JOIN’ 양옆에 테이블명 기입 → ON 절에 공통컬럼 입력
            • A와 B 테이블의 모든 정보가 조회
              • 1A, 2A : 방문O + 구매O
              • 3A, 4A : 방문O + 구매X
              • 7B, 8B : 방문X + 구매O

2. INNER JOIN

  • 내부 조인 : 두 테이블에 모두 지정한 컬럼에 대한 데이터 존재해야함
  • = JOIN 조건에서 동일한 값이 있는 행만 반환 = 교집합
  • JOIN 하려는 모든 테이블에 동시에 존재하는 데이터
SELECT *
FROM 기준테이블
INNER JOIN 붙일테이블 **ON join_기준열**

3. NATURAL JOIN

  • 두 테이블 간 동일한 이름을 갖는 모든 컬럼들에 대해 등가조인 수행
    • 공통된 속성을 찾아 같은 값을 갖는 항목끼리 결합 ⇒ 같은 값을 갖는 항목이 없을 경우 → 제외 // 불안정함
    • INNER JOIN 과 차이점 : 교집합 여부

4. CROSS JOIN

  • 상호 조인 : 한쪽 테이블의 모든 행 + 다른 테이블의 모든 행을 조인
    • CROSS JOIN 결과 — 전체 행 개수 = 두 테이블의 각 행의 개수를 곱한 수 (=카티션 곱 CARTESIAN PRODUCT)
  • 상호 적절한 JOIN 조건이 없을 경우 사용 (겹치는 컬럼이 없는 경우)
SELECT *
FROM <첫 번째 테이블>
    CROSS JOIN <두 번째 테이블>

5. SELF JOIN

  • 자체 조인 : 자기 자신과 조인 ⇒ 한개 테이블 사용
      •  
728x90