[데이터베이스]JOIN이란?

James·2023년 7월 5일
0
post-thumbnail

조인(Join)이란?


개념 :두 개 이상의 테이블이나 데이터베이스를 연결하여 데이터를 검색하는 방법

테이블을 연결하려면, 적어도 하나의 칼럼을 서로 공유하고 있어야 하므로 이를 이용하여 데이터 검색에 활용한다.


조인(Join)의 필요성

필요성 : 각 테이블에 저장된 데이터를 효과적으로 검색하기 위해 조인이 필요하다.

  • 관계형 데이터베이스의 구조적 특징으로 정규화를 수행하면 의미 있는 데이터의 집합으로 테이블이 구성되고, 각 테이블끼리는 관계(Relationship)를 갖게 된다.
  • 이와 같은 특징으로 관계형 데이터베이스는 저장 공간의 효율성확장성이 향상되게 된다.
  • 다른 한편으로는 서로 관계있는 데이터가 여러 테이블로 나뉘어 저장되므로, 각 테이블에 저장된 데이터를 효과적으로 검색하기 위해 조인이 필요하다.

조인(Join)의 종류


내부조인(동등 조인, 자연 조인), 외부조인(Left Outer,Right Outer, Full Outer), 크로스조인

1. 내부 조인(INNER JOIN)

개념 : 교집합으로, 기준 테이블과 join 테이블의 중복된 값을 보여준다.

[특징]

  • 가장 흔한 결합 방식이며, 기본 조인 형식으로 간주된다.
  • 내부 조인은 조인 구문에 기반한 2개의 테이블(A, B)의 컬럼 값을 결합함으로써 새로운 결과 테이블을 생성한다.
  • 명시적 조인 표현(explicit)암시적 조인 표현(implicit) 2개의 다른 조인식 구문이 있다.

명시적 조인 표현

테이블에 조인을 하라는 것을 지정하기 위해 JOIN 키워드를 사용하며, 그리고 나서 다음의 예제와 같이 ON 키워드를 조인에 대한 구문을 지정하는데 사용한다.
SQL

SELECT *
FROM employee INNER JOIN department
ON employee.DepartmentID = department.DepartmentID;

암시적 조인 표현

SELECT 구문의 FROM 절에서 그것들을 분리하는 컴마를 사용해서 단순히 조인을 위한 여러 테이블을 나열하기만 한다.
SQL

SELECT *
FROM employee, department
WHERE employee.DepartmentID = department.DepartmentID;

조인 전 테이블 :

내부 조인 결과 :

동등 조인(EQUI JOIN)

개념 :비교자 기반의 조인이며, 조인 구문에서 동등비교만을 사용한다.

즉, 다른 비교 연산자(<와 같은)를 사용하는 것은 동등 조인으로서의 조인의 자격을 박탈하는 것이다.
(일반적으로 내부조인과 같은 말로 간주한다.)

SQL

SELECT *
FROM 주문
INNER JOIN 고객
ON 주문.고객ID = 고객.고객ID

조인 전 테이블 :

동등 조인 결과 :

USING

두 테이블이 Equi Join을 할 때 속성의 이름이 같다면 USING 키워드를 사용해 간단하게 작성할 수 있습니다.

  • 이때 같은 이름이 속성은 결과 테이블에서 한번만 표시됩니다.
  • USING은 Outer Join에서도 사용이 가능합니다.
  • 특이한 점은 테이블을 조인하는데 사용된 열이 반환된 테이블의 가장 왼쪽에 위치하는 것을 볼 수 있습니다.

자연 조인(NATURAL JOIN)

개념 :
동등 조인의 한 유형으로 조인 구문이 조인된 테이블에서 동일한 컬럼명을 가진 2개의 테이블에서 모든 컬럼들을 비교함으로써, 암시적으로 일어나는 구문이다.
결과적으로 나온 조인된 테이블은 동일한 이름을 가진 컬럼의 각 쌍에 대한 단 하나의 컬럼만 포함하고 있다.

조인 전 테이블 :
SQL

SELECT * 
FROM employee 
NATURAL JOIN department;

자연 조인 결과 :

  • 명시하지 않아도 동일한 이름을 가진 DepartmentID를 기준으로 자동으로 조인합니다.

2. 교차 조인(CROSS JOIN)

개념 : 조인되는 두 테이블에서 곱집합을 반환한다.

즉, 두 번째 테이블로부터 각 행과 첫 번째 테이블에서 각 행이 한번씩 결합된 열을 만듭니다.
예를 들어 m행을 가진 테이블과 n행을 가진 테이블이 교차 조인되면 m x n 개의 행을 생성한다.

명시적 조인 표현

SQL

SELECT * 
FROM employee 
CROSS JOIN department;

암시적 조인 표현

SQL

SELECT * 
FROM employee, department;

조인 전 테이블 :

교차 조인 결과 :

3. 외부 조인(OUTER JOIN)

개념 : 내부 조인은 두 테이블에 모두 데이터가 있어야만 결과가 나오지만, 외부 조인은 한쪽에만 데이터가 있어도 결과가 나옵니다.

왼쪽 외부 조인(LEFT OUTER JOIN)

개념 : 왼쪽 테이블의 모든 값이 출력되는 조인

우측 테이블에 조인할 컬럼의 값이 없는 경우 사용한다.
즉, 좌측 테이블의 모든 데이터를 포함하는 결과 집합을 생성한다.

조인 전 테이블 :

SQL

SELECT *
FROM employee 
LEFT OUTER JOIN department
ON employee.DepartmentID = department.DepartmentID;

왼쪽 외부 조인 결과

오른쪽 외부 조인(RIGHT OUTER JOIN)

개념 : 오른쪽 테이블의 모든 값이 출력되는 조인

좌측 테이블에 조인할 컬럼의 값이 없는 경우 사용한다.
즉, 우측 테이블의 모든 데이터를 포함하는 결과 집합을 생성한다.
조인 전 테이블 :

SQL

SELECT *
FROM employee RIGHT OUTER JOIN department
ON employee.DepartmentID = department.DepartmentID;

오른쪽 외부 조인 결과

완전 외부 조인(FULL OUTER JOIN)

개념 : 완전 외부 조인은 두 테이블 간의 모든 행을 결합하는 조인 방식입니다. 즉, 왼쪽 테이블과 오른쪽 테이블 모두의 모든 행을 포함하는 결과를 반환합니다. 공통된 값이 없는 행들은 NULL 값으로 채워지게 됩니다.

양쪽 테이블 모두 OUTER JOIN이 필요할 때 사용한다.
조인 전 테이블 :

SQL

SELECT *
FROM employee FULL OUTER JOIN department
ON employee.DepartmentID = department.DepartmentID;

완전 외부 조인 결과

셀프 조인(SELF JOIN)

개념 : 한 테이블에서 자기 자신에 조인을 시키는 것이다.

자체 조인은 자기 자신과 조인하므로 1개의 테이블을 사용합니다. 별도의 문법이 있는 것은 아니고 1개로 조인하면 자체 조인이 됩니다.
SQL

SELECT <열 목록>
FROM <테이블> 별칭A
    INNER JOIN <테이블> 별칭B
[WHERE 검색 조건]

조인을 사용할 때 주의사항

성능 비교

# 필요한 부분만 정확하게 불러올 경우

ex) EMPLOYEE NAME이 영수인 사람의 관리자를 알고싶다
    where이라는 조건문을 사용하여 EMPLOYEE_NAME이 영수라는 사람만을 조회 하여 원하는 값만을 알 수있다
  1. join문을 사용하고 난후 데이터를 찾아오는 경우
        SELECT 
        E1.name AS employee_name, E2.name AS manager_name
        FROM emple E1
        INNER JOIN emple E2 ON E1.manager_id = E2.employee_id
        where E1.name='영수';

  1. join문을 사용하기전 데이터를 검색한 후 join하는경우
         SELECT 
         E1.name AS employee_name, E2.name AS manager_name
         FROM (SELECT * FROM emple WHERE name = '영수') E1
         INNER JOIN emple E2 ON E1.manager_id = E2.employee_id;
     

but 인덱스를 사용시 서브쿼리를 인식하지 못하기 때문에 서브쿼리를 사용하지 않는 것이 좋다.

  • 여러개의 데이터를 조인한 후 한개의 데이터를 검색해 오는 것보다는
  • 데이터가 방대하다면, 먼저 데이터를 검색한 후 한가지의 결과값의 데이터를 조인하는것이 성능적으로 훨씬 향상된다
    • SQL 문장의 의미를 제대로 파악해야 함
      : SQL을 어떻게 작성하느냐에 따라 성능이 크게 좌우된다. 어떤 질의를 수행할 것인지를 명확하게 정의한 후, 비효율을 제거하여 최적의 SQL을 작성해야 한다.
    • 명확한 조인 조건을 제공해야 함
      : 조인 조건을 명확하게 제공하지 않을 경우, 의도치 않게 CROSS JOIN(Cartesian Product)이 수행될 수 있다.

조인을 사용할 때 고려사항

  • 조인할 대상의 집합을 최소화
    : 집합을 최소화할 방법이 있으면, 조건을 먼저 적용하여 관계를 맺을 집합을 최소화한 후, 조인을 맺는 것이 효율적이다.
  • 효과적인 인덱스의 활용
    : 인덱스(index)를 활용하면, 조인 연산의 비용을 극적으로 낮출 수 있다.

Reference & Additional Resources

profile
의미있는 성장의 태도, 긍정적인 사고를 지닌 Deveolper

0개의 댓글