Notice
Recent Posts
Recent Comments
Link
«   2025/05   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
Tags
more
Archives
Today
Total
관리 메뉴

스터디

[DB] Join 본문

백엔드

[DB] Join

_민영 2023. 5. 20. 16:02

< Join >

  • 한 데이터베이스 내의 여러 테이블의 레코드를 조합하여 하나의 열로 표현한 것이다.
  • 둘 이상의 데이터가 필요한 경우 테이블 조인이 필요하다.
  • 즉, 둘 이상의 테이블을 연결해서 데이터를 검색하는 방법이다.
  • 테이블로서 저장되거나, 그 자체로 이용할 수 있는 결과 셋을 만들어낸다.
  • 연결하려면 테이블들이 적어도 하나의 컬럼을 공유하고 있어야 한다.
  • 공유하고 있는 컬럼을 PK 또는 FK 값으로 사용한다.

 

 

 

 

 

 

< Join의 종류 >

A 테이블

ID NAME
1 AAA
2 BBB
3 CCC

B 테이블

ID AGE
1 10
2 20
3 30
4 40

 

 

> INNER JOIN

  • 내부 조인 -> 교집합
  • 공통적인 부분만 SELECT
  • on을 이용한 join 조건 지정 (join 조건: on, 일반 조건: where)
  • using을 이용한 join 조건 지정: using 절에서는 table 이름이나 alias를 명시하면 error

 

ID NAME AGE
1 AAA 10
2 BBB 20
SELECT A.ID, A.NAME, A.AGE
FROM A INNER JOIN B
ON A.ID = B.ID;

 

 

 

> LEFT JOIN

  • 부분집합
  • 조인 기준 왼쪽에 있는 거 모두 SELECT
    (공통적인 부분 + LEFT에 있는 것만)

ID NAME AGE
1 AAA 10
2 BBB 20
3 CCC NULL
SELECT A.ID, A.NAME, A.AGE
FROM A LEFT OUTER JOIN B
ON A.ID = B.ID;

 

 

 

> 조인 기준 왼쪽에 있는 것'만' SELECT

(LEFT에 있는 것만: A-B)

  • LEFT가 가지고 있는 것 중, 공통적인 부분을 제외한 값
  • LEFT JOIN 값 중에서 WHERE 조건으로 NULL인 값을 조회
  • B가 NULL 값을 가지고 있는 것은 A만 가지고 있는 값

ID NAME AGE
3 CCC NULL
SELECT A.ID, A.NAME, A.AGE
FROM A LEFT OUTER JOIN B
ON A.ID = B.ID;
WHERE B.ID IS NULL

 

 

 

> RIGHT JOIN

  • 부분 집합
  • 조인 기준 오른쪽에 있는 것 모두 SELECT
    (공통적인 부분 + RIGHT에 있는 것만)

ID NAME AGE
1 AAA 10
2 BBB 20
4 NULL 30
5 NULL 40
SELECT A.ID, A.NAME, A.AGE
FROM A RIGHT OUTER JOIN B
ON A.ID = B.ID;

 

 

 

> 조인 기준 오른쪽에 있는 것만 SELECT

(RIGHT에 있는 것만: B-A)

  • RIGHT가 가지고 있는 것 중, 공통적인 부분을 제외한 값
  • RIGHT JOIN 값 중에서 WHERE 조건으로 NULL인 값을 조회

ID NAME AGE
4 NULL 30
5 NULL 40
SELECT A.ID, A.NAME, A.AGE
FROM A RIGHT OUTER JOIN B
ON A.ID = B.ID;
WHERE A.ID IS NULL

 

 

 

> OUTER JOIN

  • 외부 조인 -> 합집합
  • A 테이블, B 테이블 모두 SELECT

ID NAME AGE
1 AAA 10
2 BBB 20
3 CCC NULL
4 NULL 30
5 NULL 40
SELECT A.ID, A.NAME, A.AGE
FROM A FULL OUTER JOIN B
ON A.ID = B.ID;

 

 

 

> 오른쪽에 있는 것만 + 왼쪽에 있는 것만 SELECT

  • FULL OUTER가 가지고 있는 것 중, 공통적인 부분을 제외한 값

ID NAME AGE
3 CCC NULL
4 NULL 30
5 NULL 40
SELECT A.ID, A.NAME, A.AGE
FROM A FULL OUTER JOIN B
ON A.ID = B.ID;
WHERE A.ID IS NULL OR B.ID IS NULL

 

 

 

 

 

< DB에서 Join의 필요성 >

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

 

 

 

 

 

< Join 사용 시 주의 사항 >

  • SQL 문장의 의미를 제대로 파악할 필요가 있다.
    • SQL을 작성하는 방법에 따라 성능이 크게 좌우된다.
    • 어떤 질의를 수행할 것인지를 명확하게 정의한 후, 비효율을 제거하여 최적의 SQL을 작성한다.
  • 명확한 Join 조건을 제공해야 한다.
    • Join 조건을 명확하게 제공하지 않을 경우, 의도치 않게 CROSS JOIN(Cartesian Product)이 수행될 수 있다.

 

 

 

 

< Join 사용시 고려 사항 >

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

 

 

 

 

 

https://pearlluck.tistory.com/46

 

DB JOIN 정리(INNER/LEFT/RIGHT/OUTER)

join(조인) 둘 이상의 테이블을 연결해서 데이터를 검색하는 방법 연결하려면 테이블들이 적어도 하나의 컬럼을 공유하고 있어야함 이 공유하고 있는 컬럼을 PK 또는 FK값으로 사용 ​ 종류 1. INNER

pearlluck.tistory.com

https://dev-jwblog.tistory.com/94?category=1004261 

 

[DB] Join(조인) 정리하기

1. Join(조인) 이란? - 한 데이터베이스 내의 여러 테이블의 레코드를 조합하여 하나의 열로 표현한 것 - 즉, 둘 이상의 테이블을 연결해서 데이터를 검색하는 방법 - 테이블로서 저장되거나, 그 자

dev-jwblog.tistory.com

 

'백엔드' 카테고리의 다른 글

[DB] 샤딩(Sharding)  (0) 2024.12.17
[DB] Redis vs MySQL  (2) 2024.12.17
CORS  (0) 2023.04.13
[JavaScript] 프로토타입과 클래스  (3) 2023.04.10
[JavaScript] 싱글톤 패턴과 정적 클래스  (0) 2023.04.07