JangGeonWu
janggeonwu97
JangGeonWu
전체 방문자
오늘
어제
  • 분류 전체보기 (78)
    • SQLD (21)
    • 개인 공부용 (17)
    • Django (9)
    • Tableau (6)
    • ElasticSearch (8)
    • 빅데이터 엔지니어 (5)
    • Spring 퀵 스타트 (0)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

  • 개인 공부 기록용 블로그

인기 글

최근 글

티스토리

hELLO · Designed By 정상우.
JangGeonWu

janggeonwu97

SQLD

2-1-8. 표준 조인

2022. 9. 20. 16:18

1. FROM 절 조인 형태

ANSI/ISO SQL에서 표시하는 FROM 절의 조인 형태는 다음과 같다.

  • INNER JOIN: DEFAULT 옵션, 조인 조건을 만족하는 행들만 반환한다.
  • NATURAL JOIN: INNER JOIN의 하위개념으로, 두 테이블 간 동일한 이름을 가지는 모든 칼럼에 대해 EQUI JOIN을 수행한다.
  • USING 조건절: NATURAL JOIN에서, 원하는 칼럼에 대해서만 선택적으로 EQUI JOIN을 할 수 있게 함
  • ON 조건절: JOIN 조건절과 데이터 제한 조건(WHERE 절)을 분리할 수 있다.
  • CROSS JOIN
  • OUTER JOIN

 2. INNER JOIN

 - "INNER JOIN"을 표시하기 위해서는, USING 조건절이나 ON 조건절을 필수적으로 사용해야 한다. 주로 ON 조건절을 이용한다.

더보기

SELECT A.EMPNO, A.ENAME, B.DEPTNO, B.DNAME

FROM EMP A JOIN DEPT B

     ON B.DEPTNO = A.DEPTNO;

 

3. NATURAL JOIN

 - NATURAL JOIN이 명시되면 추가로 "USING 조건절, ON 조건절, WHERE 절에서 조인 조건"을 정의할 수 없다.

 

더보기

SELECT A.EMPNO, A.ENAME, DEPTNO, B.DNAME

   FROM EMP A NATURAL JOIN DEPT B;

- 위에서 'B.DEPTNO'가 아닌 'DEPTNO'를 썼는데, NATURAL 조인에 사용된 열은 식별자를 가질 수 없기 때문에 반드시 위의 방식처럼 작성해야 한다.

 

4. USING 조건절

 - FROM 절의 USING 조건절을 이용하면 같은 이름을 가진 칼럼들 중 원하는 칼럼에 대해서만 선택적으로 EQUI JOIN을 할 수 있다. 단, SQL Server에서는 지원하지 않으니 유의할 것.

더보기

SELECT *

    FROM DEPT A JOIN DEPT_TEMP B

USING (DEPTNO);

칼럼 2개 사용해도 된다.

더보기

SELECT *

    FROM DEPT A JOIN DEPT_TEMP B

USING (DEPTNO, DNAME);

 

5. ON 조건절

 - 조인 서술부(ON 조건절)와 비 조인 서술부(WHERE 조건절)를 분리해 이해가 쉬우며, 칼럼명이 다르더라도 조인 조건을 사용할 수 있는 장점이 있다.

 

더보기

SELECT A.EMPNO, A.ENAME, B.DEPTNO, B.DNAME

   FROM EMP A JOIN DEPT B

        ON (B.DEPTNO = A.DEPTNO);

 

- JOIN을 여러번 해보자.

 

SELECT A.EMPNO, A.DEPTNO, B.DNAME, C.DNAME AS NEW_DNAME
FROM EMP A JOIN DEPT B
   ON B.DEPTNO = A.DEPTNO
      JOIN DEPT B
   ON C.DEPTNO = B.DEPTNO

 

6. CROSS JOIN

- CROSS JOIN은 CARTESIAN PRODUCT(CROSS PRODUCT)와 같은 표현으로, 양쪽 집합의 M*N 건의 데이터 조합이 발생한다.

더보기

SELECT A.ENAME, B.DNAME

FROM EMP A CROSS JOIN DEPT B

ORDER BY A.ENAME;

 

- 정상적인 데이터 모델이라면 CROSS JOIN이 필요가 없으나, 튜닝이나 리포트 작성, 혹은 큰 데이터 처리 테스트를 위해 사용되기도 한다.

 

7. OUTER JOIN

 - 조인 칼럼 위치에 따라 LEFT OUTER JOIN, RIGHT OUTER JOIN, 그리고 FULL JOIN으로 나뉜다. 

 

더보기

SELECT *

FROM DEPT A [LEFT OUTER| RIGHT OUTER| FULL] JOIN DEPT_TEMP B

ON B.DEPTNO = A.DEPTNO;

 

8. INNER vs OUTER vs CROSS JOIN 비교

아래의 두 테이블을 보도록 하자.

(TABLE1)   KEY1
bbb 123 B
ddd 222 C
eee 233 D
fff 143 E

 

KEY2   (TABLE2)
A 10 ㅁㅁㅇ
B 11 ㅈㅎ
C 12 ㄷㄴㅍ
  • INNER JOIN: 양쪽 테이블에 모두 존재하는 키 값이 B-B, C-C인 2건이 출력된다.
  • LEFT OUTER JOIN: TAB1을 기준으로 B-B, C-C, D-NULL, E-NULL인 4건이 출력된다.
  • RIGHT OUTER JOIN: TAB2을 기준으로 NULL-A, B-B, C-C인 3건이 출력된다.
  • FULL OUTER JOIN: 양쪽 테이블을 기준으로 키 값 조합이 NULL-A, B-B, C-C, D-NULL, E-NULL인 5건이 출력된다.
  • CROSS JOIN: 양쪽 테이블의 데이터를 곱한 개수인 4*3 = 12건이 추출된다. 키 값 조합이 B-A, B-B, B-C, C-A, C-B, C-C, D-A, D-B, D-C, E-A, E-B, E-C인 12건이 출력된다.

 

'SQLD' 카테고리의 다른 글

3-7-2. 트랜잭션  (1) 2022.10.03
3-7-1. Lock  (0) 2022.10.03
2-1-7. 조인  (1) 2022.09.20
2-1-6. ORDER BY 절  (1) 2022.09.20
2-1-5. GROUP BY, HAVING 절  (0) 2022.09.20
    'SQLD' 카테고리의 다른 글
    • 3-7-2. 트랜잭션
    • 3-7-1. Lock
    • 2-1-7. 조인
    • 2-1-6. ORDER BY 절
    JangGeonWu
    JangGeonWu

    티스토리툴바