SQL - JOIN 이란?

JOIN이란?

두개 이상의 테이블이나 데이터베이스를 연결하여 데이터를 검색하는 방법
각각 검색 할 필요없이 한번에 묶어서 검색가능

검색하고 싶은 컬럼이 다른 테이블에 있을때 여러개를 마치 하나의 테이블인 것 처럼 활용해서 나타냄
보통 Primary Key나 Foreign Key로 두 테이블 연결함

INNER JOIN

교집합 , 기준 테이블과 Join한 테이블의 중복된 값을 보여줌(모두 데이터가 존재해야함)
결과값은 중복된 값만 나타남 (일반적인 Join)

SELECT a.name,         ( 테이블 a의 name : 테이블명.속성명)
       b.age           ( 테이블 b의 age : 테이블명.속성명)...
FROM a INNER JOIN b
ON a.userId(기준테이블명.기준키) = b.userId(조인테이블명.기준키);

SELECT a.name, b.age FROM a INNER JOIN b ON a.userId=b.userId;

암묵적으로 이렇게 씀 (Equi Join)

SELECT a.name, b.age
FROM a, b
WHERE a.userId=b.userId;

Inner Join 하는 방법은 다양함...

OUTER JOIN

  • Join 조건을 만족하지 않는 데이터를 처리하기 위한 Join으로 어느 한쪽의 데이터를 모두 가져옴
  • Join 조건에 일치 하지 않는 값 추가시 사용

LEFT OUTER JOIN

Join문 왼쪽에 있는 테이블의 모든 결과를 가져와서 오른쪽 테이블의 데이터에 매칭하고 매칭되는 데이터가 없는 경우 Null 표시

SELECT a.name,         ( 테이블 a의 name : 테이블명.속성명)...
       b.age           ( 테이블 b의 age : 테이블명.속성명)...
FROM a LEFT OUTER JOIN b    
ON a.userId=b.userId

-- 다른 방법 
SELECT [테이블명1.]속성명, [테이블명2.]속성명 ....
FROM 테이블명1, 테이블명2
WHERE 테이블명1.속성명 = 테이블명2.속성명(+)

RIGHT OUTER JOIN

Join문 오른쪽에 있는 테이블의 모든 결과를 가져와서 왼쪽의 테이블의 데이터에 매칭하고 매칭되는 데이터가 없는 경우 Null 표시

SELECT a.name,         ( 테이블 a의 name : 테이블명.속성명)...
       b.age           ( 테이블 b의 age : 테이블명.속성명)...
FROM a RIGHT OUTER JOIN b    
ON a.userId=b.userId

-- 다른 방법
SELECT [테이블명1.]속성명, [테이블명2.]속성명 ....
FROM 테이블명1, 테이블명2
WHERE 테이블명1.속성명(+) = 테이블명2.속성명

FULL OUTER JOIN

  • 왼쪽, 오른쪽 테이블의 모든 값을 읽어 JOIN함
  • 합집합, 전체라고 생각 하면 됨
SELECT a.name,         ( 테이블 a의 name : 테이블명.속성명)...
       b.age           ( 테이블 b의 age : 테이블명.속성명)...
FROM a FULL OUTER JOIN b    
ON a.userId=b.userId

CROSS JOIN

  • 두 테이블의 곱집합
    예를들어 각 에피소드 10까지 있는 미드가 시즌3까지 있다 할때, 시즌 1-1, 시즌 1-2, 시즌 1-3 .... 시즌 3-8, 시즌 3-9, 시즌 3-10 이런 느낌
  • 교차 조인되면 mxn개의 열을 생성함(경우의 수 전부 표현)
SELECT a.name,         ( 테이블 a의 name : 테이블명.속성명)...
       b.age           ( 테이블 b의 age : 테이블명.속성명)...
FROM a 
CROSS JOIN b    
-- 다른 방법
SELECT [테이블명1.]속성명, [테이블명2.]속성명 ....
FROM 테이블명1, 테이블명2

SELF JOIN

  • 자기자신과 자기자신을 조인한다는 의미
  • 하나의 테이블을 여러번 복사해서 조인
    (주로 테이블에 Hierarchical structure가 있을 때 flat structure로 바꾸는 역할을 해준다)
SELECT a.name,         ( 테이블 a의 name : 테이블명.속성명)...
       b.age           ( 테이블 b의 age : 테이블명.속성명)...
FROM a 
LEFT OUTER JOIN a2 
ON a.userId=b.userId;  
아니면 INNER JOIN 사용하면 됨

📌
INNER JOIN : 교집합 - 두 테이블 사이 공통된 데이터만 나타냄
OUTER JOIN : 합집합 (LEFT OUTER JOIN 왼쪽테이블이 기준이고 왼쪽테이블 전체 + 두 테이블교집합/ RIGHT OUTER JOIN 오른쪽 테이블이 기준이고 오른쪽 테이블 전체+ 교집합 / FULL OUTER JOIN 전체 테이블)
SELF JOIN : 나자신을 한번 더 쓴다고 생각하면 됨 (직원이름 리스트에 상사와 사원이있을때 구분하고자 함, 그래서 한번더 써서 상사가 관리하는 사원을 나타낸다고 생각하면 됨)
CROSS JOIN : 전체테이블을 곱합 (미드 시즌1~3 에피소드 1~10 일때 1-1, 1-2...3-8, 3-9, 3-10)

참고 https://all-record.tistory.com/160
https://clairdelunes.tistory.com/22

좋은 웹페이지 즐겨찾기