Database

[DB] SQL JOIN

2023. 1. 6. 12:06
목차
  1. JOIN이란
  2. INNER JOIN
  3. OUTER JOIN
  4. CROSS JOIN
  5. SELF JOIN

JOIN이란

두 테이블을 묶어서 하나의 결과 집합을 만드는 것이다. 서브 쿼리를 통해 두 개 이상의 테이블도 조인 가능하다.

INNER JOIN

일반적으로 JOIN을 이야기 하면 INNER JOIN이다. 교집합을 생각하면 된다.

SELECT <선택 열>
FROM <기준 테이블>
        [INNER] JOIN <참조 테이블>
        ON <조인 조건>
[WHERE <검색 조건>];
  • 기준 테이블의 row와 참조 테이블의 row 중 조인 조건이 맞는 row끼리 묶는다.
  • 선택 열은 테이블 간 동일한 이름의 열을 가지고 있을 수 있어 테이블명.속성명으로 명시해줘야한다.
    • 테이블 명에 Alias(별칭)을 사용하면 좀 더 간결하게 작성 가능하다.
  • 조인 조건은 기준 테이블의 row가 참조 테이블의 어떤 row와 병합되어야 하는지 속성의 기준으로 명시한다.
    • 테이블A.fkey = 테이블B.pkey

예시

SELECT o.OrderID, c.CustomerName
FROM Orders o
        INNER JOIN Customers c
        ON o.CustomerID = c.CustomerID;

OUTER JOIN

INNER JOIN은 양 테이블 모두 내용이 있는 경우만 검색이 된다. 하지만 OUTER JOIN은 한 쪽에만 내용이 존재해도 결과가 검색된다.

SELECT <열 목록>
FROM <기준 테이블(LEFT)>
    <LEFT | RIGHT | FULL> [OUTER] JOIN <참조 테이블(RIGHT)>
    ON <조인 조건>
[WHERE 검색조건];
  • LEFT JOIN: 기준 테이블의 데이터 손실 없이 JOIN이 가능하다.
  • RIGHT JOIN: 참조 테이블의 데이터 손실 없이 JOIN이 가능하다.
  • FULL JOIN: 두 테이블의 데이터 손실 없이 JOIN이 가능하다.

CROSS JOIN

한 쪽 테이블의 row 하나 당 다른 쪽 테이블의 모든 행을 하나씩 JOIN하는 것이다.

  • 결과는 [A 테이블의 행 개수 X B 테이블의 행 개수]가 된다. 이를 카티션 곱이라 한다.
  • 두 테이블의 행 간의 모든 조합을 검색한다.
SELECT * 
FROM ATable
        CROSS JOIN BTable;
  • 조인 조건이 없는데 이는 CROSS JOIN이 조인 조건 없이 모든 행을 합치기 때문이다.

SELF JOIN

자기 자신과 자기 자신과 JOIN을 하는 것이다. 보통 속성 간 데이터 처리가 필요한 경우 사용한다.

  • 같은 테이블을 사용하므로 별칭을 사용해야 함.
SELECT <열 목록>
FROM <테이블 별칭1, 테이블 별칭2>
[WHERE 검색조건];
EmpId   Name    Direct_Supervisor_Id
1       홍대표   0
2       유과장   1
3       하대리   2
4       노대리   2
SELECT A.EMPID, A.NAME AS '직원명',B.NAME AS '직속상관'
FROM EMP A, EMP B
WHERE A.Direct_Supervisor_Id = B.EmpId
---------------------------------------------------------
EMPID 직원명 직속상관
2     유과장 홍대표
3     하대리 유과장
4     노대리 유과장

SELECT A.EMPID, A.NAME AS '직원명',B.NAME AS '직속상관'
FROM EMP A
        INNER JOIN EMP B
        ON A.Direct_Supervisor_Id = B.EmpId

'Database' 카테고리의 다른 글

[MySQL] InnoDB 스토리지 엔진 아키텍처 - 3  (0) 2023.02.08
[MySQL] InnoDB 스토리지 엔진 아키텍처 - 2  (2) 2023.02.01
[MySQL] InnoDB 스토리지 엔진 아키텍처 - 1  (0) 2023.01.11
[MySQL] MySQL 쿼리 실행 구조  (0) 2023.01.10
[MySQL] MySQL 아키텍처  (0) 2023.01.06
  1. JOIN이란
  2. INNER JOIN
  3. OUTER JOIN
  4. CROSS JOIN
  5. SELF JOIN
'Database' 카테고리의 다른 글
  • [MySQL] InnoDB 스토리지 엔진 아키텍처 - 2
  • [MySQL] InnoDB 스토리지 엔진 아키텍처 - 1
  • [MySQL] MySQL 쿼리 실행 구조
  • [MySQL] MySQL 아키텍처
acisliver
acisliver
acisliver
와당탕탕 개발놀이터
acisliver
전체
오늘
어제
  • 분류 전체보기 (65)
    • 회고 (11)
    • Spring (3)
    • 알고리즘 (21)
    • Java (2)
    • DevOps (2)
    • Shell (2)
    • Nginx (1)
    • Database (22)
    • Project (1)

블로그 메뉴

  • 태그
  • 방명록
  • GitHub
  • Notion

공지사항

인기 글

태그

  • Java
  • mysql
  • 풀 인덱스 스캔
  • binarySearch
  • 우아한테크코스
  • FuntionalInterface
  • spring boot
  • dp
  • 풀 테이블 스캔
  • Leetcode
  • 오픈소스
  • FOSSLight
  • 자바
  • 알고리즘
  • 이분탐색
  • 카카오
  • 구름톤 트레이닝
  • 백준
  • 코딩테스트
  • 오픈소스 컨트리뷰톤
  • 인덱스
  • innodb
  • DevOps
  • 프리코스
  • Bash
  • 프로그래머스
  • 이진탐색
  • Shell
  • Spring
  • 풀스택

최근 댓글

최근 글

hELLO · Designed By 정상우.
acisliver
[DB] SQL JOIN
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.