SQL JOIN 종류 제대로 이해하기 (Left, Right, Inner, Full)
- Database
- 2023. 6. 28.
SQL에서 JOIN 연산은 두 개 이상의 테이블에서 관련 있는 데이터를 결합하여 조회하기 위해 사용합니다. JOIN은 여러 종류가 있습니다. LEFT JOIN, RIGHT JOIN, INNER JOIN이 가장 많이 언급되고, 그 외 FULL OUTER JOIN, CROSS JOIN 등도 있습니다.
결론부터 말씀드리면 LEFT JOIN과 INNER JOIN만 기억하셔도 문제없다고 봅니다. 두 JOIN이 실제로 유효하게 사용되는 구문이기 때문입니다. 그중에서도 INNER JOIN이 가장 활용도가 높지 않나 싶습니다.
JOIN
1. INNER JOIN
INNER JOIN 또는 JOIN은 두 테이블에서 공통되는 부분을 합쳐서 조회하는 구문입니다. 아래의 그림처럼 두 원이 품고 있는 값 중 겹치는 부분입니다. 겹치는 부분을 어떻게 알까요? 두 테이블이 공통으로 가지고 있는 기본키 외래키가 있기 때문에 알 수 있습니다.
예를 들어, 아래와 같이 Table_A와 Table_B가 있습니다. 공통 컬럼으로 id가 있습니다.
이때 두 테이블을 조인해서 이름과 직업을 함께 조회하려고 합니다. INNER JOIN을 사용하면 아래와 같습니다. JOIN을 사용할 땐 ON 뒤에 두 테이블이 공통으로 가지고 있는 컬럼을 기준으로 묶습니다. 테이블이 두 개 이상 표현되기 때문에 편의를 위해 별칭(alias)을 사용합니다(Table_A는 a, Table_B는 b).
SELECT * FROM Table_A a inner join Table_B b on a.id = b.id;
이처럼 Bob의 직업이 Engineer인 것을 하나의 테이블에서 확인할 수 있는 것이 JOIN의 효과입니다.
2. LEFT JOIN
LEFT JOIN은 쿼리의 왼쪽에 적은 테이블의 모든 부분과 오른쪽 테이블과의 공통분모를 포함해서 조회합니다.
예를 들어, 위와 동일한 테이블 두 개를 LEFT JOIN을 하면 아래와 같이 사용합니다.
SELECT * FROM Table_A a left join Table_B b on a.id = b.id;
왼편에 있는 테이블의 행은 모두 출력해야하기 때문에 테이블 A의 id 1, 2, 3은 반드시 출력됩니다. 그리고 테이블 B에도 공통으로 존재하는 id 2, 3의 행도 출력됩니다. 그러나 테이블 A에 있는 id 1이 테이블 B는 없기 때문에 테이블 B의 id와 job이 모두 NULL로 출력됐습니다.
3. RIGHT JOIN
RIGHT JOIN은 사실 LEFT JOIN과 기능이 동일합니다. 쿼리에서 JOIN 구문을 기준으로 오른쪽에 있다는 점만 다릅니다.
예를 들어 이렇습니다.
SELECT * FROM Table_A a right join Table_B b on a.id = b.id;
그런데 이 결과는 LEFT JOIN을 사용하고 Table_B를 앞에 쓰는 것과 똑같습니다. 굳이 RIGHT JOIN을 쓸 필요가 없습니다. 때문에 RIGHT JOIN은 거의 쓰이지 않습니다.
4. FULL JOIN
FULL JOIN은 양쪽 테이블을 모두 합쳐서 조회합니다.
내용 정리
실무에서 JOIN이 필요한 이유는 두 개 이상의 테이블을 연결해서 보고 싶기 때문입니다. 단순히 두 테이블을 합치는 건 의미가 없습니다. 예를 들어, 회원 테이블에 있는 회원 정보와 주문 테이블에 있는 주문 정보를 합치는 건 별 의미가 없습니다. 다만 회원별로 어떤 주문을 했는지를 조회하는 건 의미가 있습니다. 그 말은 두 테이블의 키 값이 일치하는 경우를 JOIN 한다는 의미입니다. INNER JOIN이 많이 쓰일 수밖에 없습니다.
'Database' 카테고리의 다른 글
MongoDB 데이터 CSV 파일로 저장하는 방법 (0) | 2023.07.13 |
---|---|
데이터베이스 Table Lock이란? (0) | 2023.07.05 |
리눅스 PostgreSQL 윈도우에서 pgAdmin 연결 방법 (0) | 2023.06.28 |
MYSQL CONCAT 사용법 (문자열 합치기) (0) | 2023.06.27 |
SQL, 날짜 추출해서 월별 데이터 구하기 (0) | 2023.06.15 |