[Database] MySQL Join

게맛살맛게·2021년 12월 17일
0

DB

목록 보기
11/23
post-thumbnail
post-custom-banner

JOIN

두 개 이상의 테이블을 가로로 묶어서 하나의 결과 집합으로 만들어 내는 것
종류 : INNER JOIN, OUTER JOIN, CROSS JOIN, SELF JOIN

  • ❕ 데이터베이스의 테이블은 중복공간 낭비를 피하고 데이터의 무결성을 위해 여러 개의 테이블로 분리하여 저장 (정규화)
  • ❕ 분리된 테이블은 서로 관계(Relation)을 가짐
  • 1 : N 관계가 보편적



Inner Join

일치하는 행이 없을 경우 제외하고 두 테이블을 합침

-- emp의 deptno와 dept의 deptno가 일치 하는 행만 합쳐서 출력
SELECT * FROM emp JOIN dept ON emp.deptno = dept.deptno;
SELECT * FROM emp JOIN dept USING (deptno);

ON vs. USING

on : 비교조건(condition)을 통해 두 테이블의 관계 규명
using : 두 테이블에 모두 있는 해당 행을 사용하여 두 테이블의 관계 규명



Outer Join

일치하는 행이 없어도 null 값을 채워 테이블을 합침

  • Left Outer Join
    : 왼쪽 테이블을 기준으로 JOIN을 실시
    왼쪽의 모든 값을 출력하고 오른쪽에서 합쳐지는 값이 없을 경우 null로 채움

  • Right Outer Join
    : 오른쪽 테이블을 기준으로 JOIN을 실시
    오른쪽의 모든 값을 출력하고 왼쪽에서 합쳐지는 값이 없을 경우 null로 채움

  • Full Outer Join
    : 양쪽 모두 빈 값을 null로 채우고 사라지는 값 없이 모두 합침
    ❗ MySQL에서는 지원하지 않아 LEFT JOIN ⋃(UNION) RIGHT JOIN으로 해결 해야함



Cross Join

Product 연산(행렬곱)과 동일



Self Join

자기 자신과 자기 자신의 JOIN

  • 테이블 명이 중복되기 때문에 반드시 alias를 통해 각 테이블을 구분 해 주어야한다.
SELECT 
    e.empno '사원번호',
    e.ename '사원이름',
    IFNULL(m.empno, '없음') '관리자번호',
    IFNULL(m.ename, '없음') '관리자이름'
FROM
    emp e
        LEFT JOIN
    emp m ON e.mgr = m.empno;
profile
IT 기술블로그
post-custom-banner

0개의 댓글