dalgorithm
달공의 개발기
dalgorithm
전체 방문자
오늘
어제
  • 분류 전체보기 (170)
    • Back-end (0)
    • Java (11)
    • 자료구조 (7)
    • Network (31)
    • Database (9)
    • Baekjoon Online (24)
    • 클라우드 (6)
    • Android (15)
      • Kotlin (14)
    • AI (27)
      • Machine Learning&Deep Learn.. (27)
    • Web (23)
      • Webhacking (17)
      • WebProgramming (6)
    • 기술면접 (1)
      • JAVA&자료구조 (0)
      • Spring (0)
      • 컴퓨터구조&운영체제 (0)
      • 네트워크 (0)
      • 데이터베이스 (0)
    • CTF 스터디 (15)
    • 대외활동 (1)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 딥러닝
  • Guacamole
  • 포너블
  • python #백준
  • 코드리뷰
  • 인공지능
  • kotlin
  • 네트워크
  • CTF
  • 자바
  • gcp
  • 클라우드
  • java
  • 침입탐지
  • cs
  • db
  • 웹해킹
  • 자료구조
  • 데이터베이스
  • 머신러닝

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
dalgorithm

달공의 개발기

[DB] 조인(JOIN) 정리
Database

[DB] 조인(JOIN) 정리

2022. 9. 28. 13:35
728x90


조인 ( JOIN )

두 개 이상의 테이블을 결합하여 데이터를 검색하는 방법이다.

 

자신이 검색하고 싶은 데이터가 한 개의 테이블이 아니라 여러 개의 테이블에 나누어져 있다면

각 테이블 컬럼을 한 개씩 가져와서 그 컬럼을 접점으로 이용하여 여러 테이블에 나누어져 있는데

데이터를 한번에 검색한다.

 

조인은 관계형 데이터베이스의 가장 큰 장점이면서 대표적인 핵심 기능이다.

유형은 크게 아래와 같다.

 

  • 논리적 조인 : 사용자 SQL문에 표현되는 테이블 결합 방식
  • 물리적 조인 : 데이터베이스 옵티마이저에 의해 내부적으로 발생하는 테이블 결합 방식

 

https://t1.daumcdn.net/cfile/tistory/99473C435C0D1ECD07

[ 논리적 조인 ]

- 내부 조인(Inner Join) : 공통 존재 컬럼의 값이 같은 경우를 추출

- 외부조인(Outer Join) : Left Outer Join, Right Outer Join, Full Outer Join

- 교차 조인(Cross Join) : 조인 조건이 없는 모든 데이터 조합 추출

- 셀프 조인(Self Join) : 자기 자신에게 별칭을 지정한 후 다시 조인

[ 물리적 조인 ]

- 중첩반복 조인(Nested-Loop Join)

2개 이상의 테이블에서 하나의 집합을 기준으로 순차적으로 상대방 row를 결합하여 조인

 

- 정렬 합병 조인(Sort-Merge Join)

대상 범위가 넓을 경우 발생하는 임의의 접근을 줄이기 위한 경우나 
연결고리에 마땅한 인덱스가 존재하지 않을 경우 해결하기 위한 조인 방식

 

- 해시 조인(Hash Join)

해싱 함수를 활용하여 테이블 간 조인을 수행하는 방식. 
직접적인 연결을 담당하는 것이 아니라 연결될 대상을 특정 지역에 모아두는 역할만을 담당한다.

 

 

 내부 조인 (Inner Join)

 

SELECT column_name(s)
FROM table1
INNER JOIN table2
ON table1.column_name = table2.column_name;

https://codingsight.com/wp-content/uploads/2021/10/image-32.png

 

- 같은 이름의 컬럼이 여러 테이블에 있는 경우, '별칭.컬럼명' 형태로 명시

- INNER라는 키워드는 생략해도 내부 조인이 됨

- 검색조건을 추가할 경우 조인된 값에서 해당 조건에 맞는 결과만 출력되도록 설정

 

 

 외부 조인 (Outer Join)

 

[ Left Join ]

SELECT column_name(s)
FROM table1
LEFT JOIN table2
ON table1.column_name = table2.column_name;

 

 

- 왼쪽 테이블의모든 데이터와 오른쪽 테이블의 동일 데이터 출력

- 우측 테이블에 조인할 컬럼의 값이 없는 경우 사용

- 좌측 테이블의 모든 데이터를 포함하는 결과 집합을 생성

 

[ Right Join ]

SELECT column_name(s)
FROM table1
RIGHT JOIN table2
ON table1.column_name = table2.column_name;

 

 

- 오른쪽 테이블의 모든 데이터와 오른쪽 테이블의 동일 데이터 출력

- 오른쪽 테이블이 기준이 되어 결과를 보여줌

 

[ Full Join ]

SELECT column_name(s)
FROM table1
FULL OUTER JOIN table2
ON table1.column_name = table2.column_name
WHERE condition;

 

 

- 양쪽의 모든 데이터를 추출

- table1에 존재하고 table2에 존재하지 않는 컬럼값, 그 반대의 컬럼값 모두 NULL로 표현

- 중복된 데이터는 삭제한 결과를 보여줌

 

 

 교차 조인 (Cross Join)

 

SELECT A.책번호, A.책명, B.책번호, B.가격
FROM 도서 A
CROSS JOIN 도서가격 B

'도서'테이블은 A라는 별칭으로, '도서가격'은 B라는 별칭으로 설정 후 조건 설정 없이 교차 조인

 

  • 조인 조건이 없는 모든 데이터 조합을 추출하기 때문에 ON 절이 없다.
  • 조인되는 두 테이블의 곱집합을 반환한다.
  • 두 번째 테이블로부터 각 행과 첫 번째 테이블에서 각 행이 한번씩 결한된 열을 만든다.

 

 

 셀프 조인 (Self 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
ORDER BY A.City;

- 자신이 자신과 조인한다는 의미로 1개의 테이블을 사용한다.

- 같은 테이블명을 쓰고 별칭만 A, B와 같이 다르게 한다.

- 검색조건을 추가할 경우 조인된 값에서 해당 조건에 맞는 결과만 출력되도록 설정

 


참고

| https://haenny.tistory.com/34

| https://admm.tistory.com/40

| https://velog.io/@ragnarok_code/DataBase-%EC%A1%B0%EC%9D%B8Join%EC%9D%B4%EB%9E%80

| https://hongong.hanbit.co.kr/sql-%EA%B8%B0%EB%B3%B8-%EB%AC%B8%EB%B2%95-joininner-outer-cross-self-join/

728x90

'Database' 카테고리의 다른 글

[DB] 정규화 & 비정규화  (0) 2022.10.07
[DB] Index & B-Tree  (2) 2022.10.05
[DB] SQL vs NoSQL  (4) 2022.10.03
[DB] SQL Injection  (2) 2022.09.30
[DB] 키(KEY) 정리  (2) 2022.09.27
    'Database' 카테고리의 다른 글
    • [DB] Index & B-Tree
    • [DB] SQL vs NoSQL
    • [DB] SQL Injection
    • [DB] 키(KEY) 정리
    dalgorithm
    dalgorithm

    티스토리툴바