018. 기능적 관점으로 구분하는 조인의 종류 - llighter/database GitHub Wiki

SQL 레벨업

110.-SQL-Joins 참고

SQL에서 제공하는 조인

  • 크로스 조인
  • 내부 조인
  • 외부 조인
  • 자기 조인
  • 등가 조인/비등가 조인
  • 자연 조인

기능적 관점으로 분류한 조인

  • 크로스 조인, 내부 조인, 외부 조인
  • 이 세가지는 베타적인 분류

MECE Wikipedia

1. 크로스 조인 - 모든 조인의 모체

크로스 조인은 조인이라는 연산의 모체이다.

- 크로스 조인의 작동

- 크로스 조인이 실무에서 사용되지 않는 이유

  • 이러한 결과가 필요한 경우가 없다.
  • 비용이 매우 많이 드는 연산이다.

- 실수로 사용한 크로스 조인

-- 실수로 사용한 크로스 조인: WHERE 구로 조인 조건을 지정하지 않음
SELECT *
   FROM Employees, Departments;

2. 내부 조인 - 왜 '내부'라는 말을 사용할까?

- 내부 조인의 작동

SELECT Orders.OrderID, Customers.CustomerName
FROM Orders
INNER JOIN Customers ON Orders.CustomerID = Customers.CustomerID;
  • 내부 조인의 결과는 모두 크로스 조인 결과의 일부(부분 집합)이다.

- 내부 조인과 같은 기능을 하는 상관 서브쿼리

-- 내부 조인을 상관 서브쿼리로 작성
SELECT Orders.OrderID,
   (SELECT Customers.CustomerName
      FROM Customers
      WHERE Orders.OrderID = Customers.CustomerID) AS CustomerName
FROM Orders;
  • 기본 키를 사용하면 상관 서브쿼리를 스칼라 서브쿼리로 사용할 수 있다.
  • 내부 조인 > 상관 서브쿼리
    • 상관 서브쿼리를 스칼라 서브쿼리로 사용하면 결과 레코드 수만큼 상관 서브쿼리를 실행해 비용이 높아진다.

스칼라 서브쿼리 : 리턴값이 하나의 단일값(스칼라값)인 쿼리

3. 외부 조인 - 왜 '외부'라는 말을 사용할까?

- 외부 조인의 작동

외부 조인의 종류 3가지

  • 왼쪽 외부 조인
  • 오른쪽 외부 조인
  • 완전 외부 조인

  • 마스터 테이블의 위치에 따라 왼쪽, 오른쪽 외부 조인으로 구분한다.
  • 마스터 테이블 쪽에만 존재하는 키가 있을 때는 해당 키를 제거하지 않고 결과에 보존한다.

4. 외부 조인과 내부 조인의 차이

  • 외부 조인 결과가 크로스 조인의 결가의 부분 집합이 아닌 이유는, 외부 결합이 마스터 테이블의 정보를 모두 보존하고자 NULL을 생성하기 떄문이다.
  • 반면 크로스 조인과 내부 조인은 NULL을 생성하지 않는다.

크로스 조인, 내부 조인, 외부 조인의 관계 벤다이어그램 추가할 것!

5. 자기 조인 - '자기'란 누구일까?

  • 자기 조인은 생성되는 결과를 기준으로분류하는 것이 아니라 연산의 대상으로 무엇을 사용하는지에 대한 분류이다.
  • 따라서 '자기 조인 + 크로스 조인', '자기 조인 + 외부 조인'과 같은 조합이 가능하다.

- 자기 조인의 작동

0~9 까지 레코드를 갖는 테이블을 '자기 조인 + 크로스 조인'을 해보는 예제 추가하기

- 자기 조인의 사고방식

  • 우연히 같은 데이터를 저장하고 있는 두 개의 서로 다른 테이블이라고 생각