JOIN

김현송·2023년 3월 15일
0

두 개 이상의 테이블들을 연결 또는 결합하여 데이터를 출력하는 것

일반적으로 사용되는 SQL 문장의 상당수가 JOIN이고, RDBS의 가장 큰 장점이자 핵심 기능이다.

주의할 점은 FROM절에 여러 테이블이 나열되더라도 SQL에서 데이터를 처리할 때는 단 두 개의 집합 간에만 조인이 일어나는 것이다.

EQUI JOIN

EQUI(등가) JOIN

  • 두 개의 테이블 간에 칼럼 값들이 서로 정확하게 일치하는 경우에 사용되는 방법

    SELECT 테이블1.칼럼명, 테이블2.칼럼명 FROM 테이블1, 테이블 2 INNER JOIN 테이블1.칼럼명1 ON 테이블2.칼럼명2
  • 조건에 맞는 데이터를 출력하기 위한 JOIN문에는 테이블 N개당 N-1개(컬럼)의 JOIN 조건이 필요하다

Non EQUI JOIN

Between, >, >=, <, <= 등의 연산자들을 사용하여 조회하는 것

Standard SQL

1. 일반 집합 연산자

  • UNION : 수학적 합집합을 제공하기 위해 공통 교집합의 중복을 없애기 위해 사전 작업으로 시스템에 부하를 주는 정렬 작업이 발생함.
  • UNION ALL : 특별한 요구사항이 없다면 공통집합을 중복해서 그대로 보여주므로 자원 효율화 측면에서 UNION ALL을 권고한다
  • INTERSECTION : 교집합, 대다수 벤더는 EXCEPT를 ORACLE은 MINUS 용어를 사용한다.
  • PRODUCT: 곱집합, JOIN 조건이 없는 경우 생길 수 있는 모든 데이터의 조합

NATURAL JOIN

두 테이블 간 동일한 이름을 갖는 모든 컬럼들에 대해 EQUI JOIN을 수행하기 때문에 추가로 USING, ON, WHERE JOIN 조건을 정의할 수 없다.

USING 조건절

FROM USING 조건절을 이용하면 같은 이름을 가진 칼럼들 중에서 원하는 칼럼에 대해서만 선택적으로 EQUI JOIN을 할 수 있다.

(SQL Server는 지원하지 않는다.)

# 예제
SELECT * FROM STU JOIN STU_TEMP USING (STU_ID);

CROSS JOIN

PRODUCT의 개념이다.

OUTER JOIN

JOIN 조건에서 동이랗ㄴ 값이 없는 행도 반환할 때 사용할 수 있다.

테이블 A와 B를 비교해서 B의 JOIN 칼럼에서 같은 값이 있을 때 그 해당 데이터를 가져오고 B의 JOIN 칼럼에서 같은 값이 없는 경우 NULL 로 채우는 형태를 LEFT OUTER JOIN 테이블이 역전되면 RIGHT OUTER JOIN이라 한다.

FULL OUTER JOIN : 합집합, 단 UNION ALL이 아닌 UNION과 같은 기능이므로 중복되는 데이터는 삭제한다.

계층형 질의와 셀프 조인

계층형 질의

in ORACLE

계층형 질의를 사용할 때 다음과 같은 가상 칼럼을 제공한다.

  • LEVEL : 노드의 재귀 깊이에 따라 나뉜다. 루트 데이터는 1
  • CONNECT_BY_ISLEAF : 리프데이터 여부를 표시한다. (리프데이터일경우 : 1, 아닌경우 : 0)
  • CONNECT_BY_ISCYCLE : CYCLE 옵션을 사용했을 때만 사용 가능하고, 조상으로서 존재하면 1 그렇지 않으면 0
# ORACLE
SELECT CONNECT_BY_ROOT 사원, 루트 사원, SYS_CONNECT_BY_PATH(사원,'/') 경로, 사원, 관리자 FROM 사원 START WITH 관리자 is NULL CONNECT BY PRIOR 사원 = 관리자

셀프조인

동일 테이블 사이의 조인, FROM 절에 동일 테이블이 두번 이상 등장함

SELECT AS1.칼럼명, AS2.칼럼명 WHERE FROM 테이블1 AS1, 테이블2 AS2 where ...

서브 쿼리

  • 서브 쿼리를 괄호로 감싸서 사용한다.
  • 서브쿼리는 단일 행 또는 복수 행 비교 연산자와 함께 사용 가능하다, 단일 행 비교 연산자는 서브쿼리의 결과가 반드시 1건 이하이어야 하고, 복수 행 비교 연산자는 서브쿼리의 결과 건수와 상관없다.
  • 서브쿼리에서는 ORDER BY를 사용하지 못한다.

서브쿼리가 사용 가능한 곳

  • SELECT
  • FROM
  • WHERE
  • HAVING
  • ORDER BY
  • INSERT 문의 VALUES
  • UPDATE 문의 SET

View

실제 데이터는 가지고 있지 않지만 테이블이 수행하는 역할을 수행하기 때문에 가상 테이블이라고도 함.

CREATE VIEW V_PLAYER_TEAM AS SELCET P.PLAYER_NAME, P.POSITION ... FROM PLAYER P
profile
안녕하세요

0개의 댓글