SQL JOIN의 모든 것

백엔드·2023년 9월 1일
0

들어가며

해당 강의를 보고 정리한 내용입니다.

join의 의미와 여러 종류의 join들을 예제와 함께 살펴보겠습니다.
해당 글은 mysql을 바탕으로 작성하였습니다.

Implicit join vs Explicit join

Implicit join

SELECT D.name
FROM employee AS E, department AS D
WHERE E.id=1 AND E.department_id = D.id;
  • Implicit join은 "FROM" 절에서 테이블들을 열거하고 "WHERE" 절에서 조인 조건을 명시하는 방식입니다.
  • 이것은 과거에 사용되던 오래된 스타일의 조인 구문입니다.
  • "WHERE" 절에서 선택 조건(selection condition)과 조인 조건(join condition)이 함께 존재하므로 가독성이 낮을 수 있습니다.
  • 복잡한 조인 쿼리를 작성할 때, 실수로 잘못된 쿼리를 작성할 가능성이 있습니다.

Explicit join

SELECT D.name
FROM employee AS E 
JOIN department AS D ON E.dept_id = D.id 
WHERE E.id = 1;
  • Explicit join은 "FROM" 절에서 "JOIN" 키워드와 함께 조인할 테이블을 명시하고, "ON" 절에서 조인 조건을 명시하는 방식입니다.
  • "FROM" 절에서 "JOIN"과 함께 테이블과 조인 조건을 나열하여 가독성이 높습니다.
  • 복잡한 조인 쿼리 작성 중에도 실수할 가능성이 적습니다.

Inner Join

SELECT *
FROM employee AS E 
INNER JOIN department AS D ON E.dept_id = D.id;

MySQL에서는 JOIN 키워드만 쓸 경우, 자동적으로 INNER JOIN이 된다.


  • Inner Join은 두 개의 테이블에서 조인 조건을 만족하는 튜플들로 구성된 결과 테이블을 생성하는 조인 연산입니다.

  • join condition에서 사용 가능한 연산자(operator): =, <, >, != 등 여러 연산자 사용 가능

  • Inner Join에서는 조인 조건을 만족하지 않는 행을 결과에서 제외합니다. 따라서 조인 조건에서 NULL 값을 가지는 튜플은 결과에 포함되지 않습니다.

Outer Join

두 테이블에서 join condition을 만족하지 않는 tuple들도 result table에 포함하는 join
join condition에서 사용 가능한 연산자(operator): =, <, >, != 등 여러 연산자 사용 가능

Left Outer Join

Left Outer Join은 첫 번째 (왼쪽) 테이블의 모든 행을 선택하고, 두 번째 (오른쪽) 테이블에서 조인 조건을 만족하는 경우에만 해당 행을 포함시킵니다. 오른쪽 테이블의 조인 조건을 만족하지 않는 경우에는 NULL 값을 가진 열로 결과에 나타납니다.

Right Outer Join

Right Outer Join 두 번째 (오른쪽) 테이블의 모든 행을 선택하고, 첫 번째 (왼쪽) 테이블에서 조인 조건을 만족하는 경우에만 해당 행을 포함시킵니다. 왼쪽 테이블의 조인 조건을 만족하지 않는 경우에는 NULL 값을 가진 열로 결과에 나타납니다.

Full Outer Join

Full Outer Join은 두 테이블 중 하나에서 조인 조건을 만족하는 모든 행을 선택합니다. 즉, 왼쪽과 오른쪽 테이블 모두에서 조인 조건을 만족하는 경우와, 한쪽 테이블에서만 조인 조건을 만족하는 경우를 모두 포함합니다.

MySQL에서는 Full Outer Join을 지원하지 않지만, 다른 데이터베이스 시스템에서는 지원하는 경우도 있습니다.

equi join

개념

Equi Join은 join 조건에서 등호(=) 연산자(equality comparator)를 사용하여 두 테이블을 연결하는 방식을 의미합니다.

equi join에 대한 두 가지 시각

  • inner, outer join 상관 없이 = (equality comparator)를 사용한 join이라면 equi join으로 보는 경우
  • inner join으로 한정해서 = (equality comparator)를 사용한 경우에 equi join으로 보는 경우

Using

Using은 두 개의 테이블에서 Equi Join을 수행할 때, 조인 조건으로 사용될 열(속성)의 이름이 동일한 경우 간단하게 조인을 수행하기 위한 SQL 키워드입니다.

Using을 사용하면 같은 이름을 가진 열에 대한 조인 조건을 명시할 필요 없이 SQL 쿼리를 작성할 수 있습니다. 또한 결과 테이블에서는 해당 열이 한 번만 나타납니다.

예시

sql

SELECT *
FROM employees
INNER JOIN departments USING (department_id);

결과

natural join

개념

Natural Join은 두 개의 테이블에서 동일한 이름을 가진 모든 열(속성) 쌍에 대해 Equi Join을 수행하는 조인 연산입니다.

Natural Join은 조인 조건을 명시적으로 지정하지 않고, 두 테이블에서 열 이름이 동일한 열을 찾아 자동으로 조인합니다.

case 1


case 2

해당 sql문을 USING 키워드를 사용하면 동일한 결과를 나타내는 쿼리를 작성하면 다음과 같이 나타낼 수 있습니다.

SELECT * 
FROM employee E INNER JOIN department D USINT(name, dept_id)

마찬가지로 ON 키워드를 사용하면 동일한 결과를 나타내는 쿼리를 작성하면 다음과 같이 나타낼 수 있습니다.

SELECT * 
FROM employee E INNER JOIN department D 
ON E.dept_id = D.dept_id AND E.name = D.name(name, dept_id)

따라서 해당 쿼리에 대한 결과값으로 아무것도 반환되지 않을 것입니다.

profile
백엔드 개발자

0개의 댓글

관련 채용 정보