Akashic Records

DataBase Join의 종류와 그 구조 본문

Database Learning Guide

DataBase Join의 종류와 그 구조

Andrew's Akashic Records 2023. 5. 18. 13:32
728x90

데이터베이스에서 Join은 두 개 이상의 테이블에서 열을 결합하여 결과를 생성하는 방법입니다. 이는 두 테이블 사이의 관계를 기반으로 합니다. 주요 Join 유형은 다음과 같습니다: INNER JOIN, LEFT OUTER JOIN, RIGHT OUTER JOIN, FULL OUTER JOIN, CROSS JOIN 등입니다.

  1. INNER JOIN: 두 테이블에서 조건이 일치하는 행만 반환합니다. 즉, 두 테이블의 교집합을 반환합니다.
     SELECT Orders.OrderID, Customers.CustomerName
     FROM Orders
     INNER JOIN Customers ON Orders.CustomerID = Customers.CustomerID;
    이 쿼리는 Orders 테이블과 Customers 테이블에서 CustomerID가 일치하는 행만을 반환합니다.

  2. LEFT OUTER JOIN (또는 LEFT JOIN): 왼쪽 테이블의 모든 행과 오른쪽 테이블에서 일치하는 행을 반환합니다. 오른쪽 테이블에 일치하는 행이 없는 경우, 결과는 NULL 값을 포함합니다.
     SELECT Orders.OrderID, Customers.CustomerName
     FROM Orders
     LEFT JOIN Customers ON Orders.CustomerID = Customers.CustomerID;
    이 쿼리는 Orders 테이블의 모든 행과 Customers 테이블에서 일치하는 행을 반환합니다. Customers 테이블에 일치하는 행이 없는 경우, 결과는 NULL 값을 포함합니다.

  3. RIGHT OUTER JOIN (또는 RIGHT JOIN): 오른쪽 테이블의 모든 행과 왼쪽 테이블에서 일치하는 행을 반환합니다. 왼쪽 테이블에 일치하는 행이 없는 경우, 결과는 NULL 값을 포함합니다.
     SELECT Orders.OrderID, Customers.CustomerName
     FROM Orders
     RIGHT JOIN Customers ON Orders.CustomerID = Customers.CustomerID;
    이 쿼리는 Customers 테이블의 모든 행과 Orders 테이블에서 일치하는 행을 반환합니다. Orders 테이블에 일치하는 행이 없는 경우, 결과는 NULL 값을 포함합니다.

  4. FULL OUTER JOIN (또는 FULL JOIN): 두 테이블의 모든 행을 반환합니다. 한 테이블에 일치하는 행이 없는 경우, 결과는 다른 테이블의 열에 대해 NULL 값을 포함합니다.
     SELECT Orders.OrderID, Customers.CustomerName
     FROM Orders
     FULL JOIN Customers ON Orders.CustomerID = Customers.CustomerID;
    이 쿼리는 Orders 테이블과 Customers 테이블의 모든 행을 반환합니다. 한 테이블에 일치하는 행이 없는 경우, 결과는 다른 테이블의 열에 대해 NULL 값을 포함합니다.

  5. CROSS JOIN (또는 CARTESIAN JOIN): 두 테이블의 모든 가능한 조합을 생성합니다. 즉, 첫 번째 테이블의 모든 행은 두 번째 테이블의 모든 행과 결합됩니다. 이는 WHERE 절에 특정 조건을 지정하지 않고 두 테이블을 JOIN 했을 때와 같습니다.
     SELECT Orders.OrderID, Customers.CustomerName
     FROM Orders
     CROSS JOIN Customers;
    이 쿼리는 Orders 테이블의 각 행을 Customers 테이블의 모든 행과 결합하여, 가능한 모든 조합을 생성합니다.

  6. SELF JOIN: SELF JOIN은 테이블을 자기 자신과 JOIN하는 방법입니다. 이는 동일한 테이블 내에서 행 간의 관계를 비교하거나 결합할 때 유용합니다.
     SELECT A.CustomerName AS CustomerName1, B.CustomerName AS CustomerName2, A.City
     FROM Customers A, Customers B
     WHERE A.CustomerID <> B.CustomerID
     AND A.City = B.City;
    이 쿼리는 Customers 테이블을 자기 자신과 JOIN하여 동일한 도시에 사는 다른 고객을 찾습니다.

 

이런 식으로, SQL에서 JOIN은 테이블 간의 관계를 활용하여 필요한 데이터를 효과적으로 검색하고 결합하는 데 중요한 도구입니다. 이를 통해 여러 테이블의 데이터를 하나의 쿼리로 결합하고 검색할 수 있습니다.

데이터베이스에서 JOIN 연산의 성능은 여러 요인에 의해 결정됩니다. 이 요인들은 데이터의 분포와 크기, 사용하는 DBMS의 최적화 기능, 인덱스의 유무와 종류, 디스크 I/O 성능 등을 포함합니다.

 

일반적으로, 두 테이블 간의 JOIN 작업에서 하나의 테이블 크기가 다른 테이블보다 훨씬 큰 경우, 성능에 문제가 발생할 수 있습니다. 이 경우, 작은 테이블에 대한 인덱스를 사용하여 JOIN을 수행하는 것이 일반적으로 더 효율적입니다.

각 JOIN 유형에 대한 성능은 다음과 같습니다:

 

  1. INNER JOIN: 일반적으로 가장 빠르며 효율적인 JOIN 유형입니다. 이는 INNER JOIN이 두 테이블 간의 교집합만을 반환하기 때문에 결과의 크기가 상대적으로 작기 때문입니다.

  2. LEFT OUTER JOIN 및 RIGHT OUTER JOIN: OUTER JOIN은 INNER JOIN보다 일반적으로 더 많은 처리를 필요로 합니다. 이는 OUTER JOIN이 NULL 값을 포함하는 행도 결과로 반환하기 때문입니다.

  3. FULL OUTER JOIN: FULL OUTER JOIN은 모든 행을 반환하므로 가장 많은 처리를 필요로 할 수 있습니다. 또한, 이는 DBMS가 두 테이블의 모든 행을 스캔해야 하기 때문에 다른 JOIN 유형보다 더 많은 디스크 I/O를 필요로 할 수 있습니다.

  4. CROSS JOIN: CROSS JOIN은 두 테이블의 모든 가능한 조합을 반환합니다. 따라서 결과의 크기가 매우 크고, 이에 따라 성능에 부담이 될 수 있습니다.

그러나 위의 모든 규칙은 일반적인 경우를 다루며, 실제 성능은 데이터의 특성과 DBMS의 최적화 기능에 따라 다를 수 있습니다. 따라서 항상 실제 데이터와 쿼리에 대한 성능 테스트를 수행하여 최적의 성능을 달성하는 것이 중요합니다.

728x90

'Database Learning Guide' 카테고리의 다른 글

SQL CASE 문장  (0) 2023.05.23
Database 그룹함수  (0) 2023.05.18
CBO(Cost-Based Optimizer)  (0) 2023.05.18
서브쿼리(Subquery)의 종류  (1) 2023.05.17
노-아카이브와 아카이브 모드 변환  (0) 2023.05.17
Comments