SQLD - 조인(JOIN)

헨도·2024년 2월 26일
0

SQLD

목록 보기
25/28
post-thumbnail

EQUI JOIN (등가 교집합)

  • 조인은 여러 개의 릴레이션을 사용해서 새로운 릴레이션을 만드는 과정
  • 조인의 가장 기본은 교집합을 만드는 것이다.
  • 두 개의 테이블 간에 일치하는 것을 조인한다.

교차 조인

  • EMP 테이블
사원번호이름나이급여부서코드
1000임베스트2010,000001
1001문재인2221,000002
1002안철수3232,000002
  • DEPT 테이블
부서코드부서명
001인사팀
002총무팀
003IT팀
  • 위의 예를 보면 EMP 테이블의 부서코드 와 DEPT 테이블의 부서코드가 같은 것을 사용하여 조인한다.
SELECT *
FROM EMP, DEPT
WHERE
	EMP.DEPTNO = DEPT.DEPTNO;
  • "=" 로 두 개의 테이블을 연결한다.

INNER JOIN

  • EQUI JOIN 과 마찬가지로 ISO 표준 SQL 로 INNER JOIN 이 있다.
    INNER JOIN 은 ON 문을 사용해서 테이블을 연결한다.
SELECT *
FROM EMP
INNER JOIN DEPT
	ON EMP.DEPTNO = DEPT.DEPTNO;
  • 위의 쿼리 예시를 보면 INNER JOIN 구에 두 개의 테이블명을 서술하고 ON 문 조인 조건을 서술한다.

HASH JOIN

  • 해시 조인은 먼저 선행 테이블을 결정하고 선행 테이블에서 주어진 조건(Where 구)에 해당하는 행을 선택한다.
  • 해당 행이 선택되면 조인 키(Join Key)를 기준으로 해시 함수를 사용해서 해시 테이블을 메인 메모리(Main Memory)에 생성하고 후행 테이블에서 주어진 조건에 만족하는 행을 찾는다.
  • 후행 테이블의 조인 키를 사용해서 해시 함수를 적용하여 해당 버킷을 검색한다.

INTERSECT 연산

  • INTERSECT 연산은 두 개의 테이블에서 교집합을 조회한다.
  • 즉, 두 개 테이블에서 공통된 값을 조회한다.
SELECT
	DEPTNO
FROM EMP

INTERSECT

SELECT
	DEPTNO
FROM DEPT;

Non-EQUI JOIN

  • Non-EQUI 는 두 개의 테이블 간에 조인하는 경우 "="을 사용하지 않고 ">", "<", ">=", "<=" 등을 사용한다.
  • 즉, Non-EQUI JOIN 은 정확하게 일치하지 않는 것을 조인하는 것이다.

OUTER JOIN

  • OUTER JOIN 은 두 개의 테이블 간에 교집합(EQUI JOIN)을 조회하고 한쪽 테이블에만 있는 데이터도 포함시켜서 조회한다.
  • 예를 들어 DEPT 테이블과 EMP 테이블을 OUTER JOIN 하면 DEPTNO 가 같은 것을 조회하고 DEPT 테이블에만 있는 DEPTNO 도 포함시킨다.
  • 이때 왼쪽 테이블에만 있는 행도 포함하면 LEFT OUTER JOIN 이라고 하고 오른쪽 테이블의 행만 포함시키면 RIGHT OUTER JOIN 이라고 한다.
  • FULL OUTER JOIN 은 LEFT OUTER JOIN 과 RIGHT OUTER JOIN 모두를 하는 것이다.
  • Oracle DB 에서는 OUTER JOIN 을 사용할 때 "(+)" 기호를 사용해서 할 수 있다.
SELECT *
FROM DEPT, EMP
WHERE
	EMP.DEPTNO (+)= DEPT.DEPTNO;

LEFT OUTER JOIN

  • LEFT OUTER JOIN 은 두 개의 테이블에서 같은 것을 조회하고 왼쪾 테이블에만 있는 것을 포함해서 조회된다.
SELECT *
FROM DEPT
LEFT OUTER JOIN EMP
	ON EMP.DEPTNO = DEPT.DEPTNO;

RIGHT OUTER JOIN

  • RIGHT OUTER JOIN 은 두 개의 테이블에서 같은 것을 조회하고 오른쪽 테이블에만 있는 것을 포함해서 조회된다.
SELECT *
FROM DEPT
RIGHT OUTER JOIN EMP
	ON EMP.DEPTNO = DEPT.DEPTNO;

CROSS JOIN

  • CROSS JOIN 은 조인 조건구 없이 2개의 테이블을 하나로 조인한다.
  • 조인구가 없기 때문에 카테시안 곱이 발생한다.
  • 예를 들어 행이 14개 있는 테이블과 행이 4개 있는 테이블을 조인하면 56개의 행이 조회된다.
  • CROSS JOIN은 FROM 절에 "CROSS JOIN" 구를 사용하면 된다.

UNION 을 사용한 합집합 구현

UNION

  • UNION 연산은 두 개의 테이블을 하나로 만드는 연산이다.
  • 즉, 2개의 테이블을 하나로 합치는 것이다.
    주의사항은 두 개의 테이블의 컬럼 수, 컬럼의 데이터 형식 모두가 일치해야 한다.
    만약 두 개의 테이블에 UNION 연산이 사용될 때 컬럼 수 혹은 데이터 형식이 다르면 오류가 발생한다.
  • UNION 연산은 두 개의 테이블을 하나로 합치면서 중복된 데이터를 제거한다.
  • 그래서 UNION 정렬(Sort) 과정을 발생시킨다.

UNION ALL

  • UNION ALL 은 두 개의 테이블을 하나로 합치는 것이다.
    UNION 처럼 중복을 제거하거나 정렬을 유발하지 않는다.
SELECT
	DEPTNO
FROM EMP

UNION ALL

SELECT
	DEPTNO
FROM EMP;

차집합을 만드는 MINUS

  • MINUS 연산은 두 개의 테이블에서 차집합을 조회한다.
    즉, 먼저 쓴 SELECT 문에는 있고 뒤에 쓰는 SELECT 문에는 없는 집합을 조회하는 것이다.
  • MS-SQL 에서는 MINUS 와 동일한 연산이 EXCEPT 이다.
SELECT
	DEPTNO
FROM DEPT  -- 10, 20, 30, 40

MINUS

SELECT
	DEPTNO
FROM EMP; -- 10, 20, 30


결과 값 : 40
- DEPT 테이블의 DEPTNO 중 40만 조회되었다. 즉, EMP 테이블에는 DEPTNO 40이 없다.
profile
Junior Backend Developer

0개의 댓글