[DB] JOIN, 서브쿼리
목차
JOIN이란?
- 둘 이상의 테이블에서 데이터가 필요한 경우 테이블 조인이 필요하다.
- 일반적으로 조인 조건을 포함하는
WHERE절을 작성해야 한다. - 조인 조건은 일반적으로 각 테이블의 PK(기본키) 및 FK(외래키)로 구성된다.
JOIN 종류
- INNER JOIN
- OUTER JOIN
- LEFT OUTER JOIN
- RIGHT OUTER JOIN
조인 조건 명시에 따른 구분
- NATURAL JOIN
- CROSS JOIN (FULL JOIN, cartesian join)
JOIN 시 주의할 점
- 조인 처리는 어느 테이블을 먼저 읽을지 결정하는 것이 중요하다. (처리할 작업량이 상당히 달라진다.)
- INNER JOIN: 어느 테이블을 먼저 읽어도 결과가 달라지지 않으므로, MySQL 옵티마이저가 조인 순서를 조절해 다양한 방법으로 최적화를 수행할 수 있다.
- OUTER JOIN: 반드시 OUTER가 되는 테이블을 먼저 읽어야 하므로 옵티마이저가 조인 순서를 선택할 수 없다.


JOIN의 종류

INNER JOIN은 기본 디폴트 조인이다.






서브쿼리
- 서브쿼리는 다른 쿼리 내부에 포함되어 있는
select문을 의미한다. - 서브쿼리를 포함하고 있는 쿼리를 외부쿼리(메인쿼리), 서브쿼리를 내부쿼리라고 부른다.
- 서브쿼리는 비교 연산자의 오른쪽에 기술해야 하며, 반드시 괄호로 감싸져 있어야 한다.
서브쿼리의 종류
- 중첩 서브쿼리:
WHERE문 안에 작성하는 서브쿼리- 단일행
- 복수(다중)행
- 다중컬럼
- 인라인 뷰:
FROM문 안에 작성하는 서브쿼리 - 스칼라 서브쿼리:
SELECT문 안에 작성하는 서브쿼리

물음표(
?)에 해당하는 치환변수는 값에만 쓸 수 있으며, 연산을 하는 컬럼에는 쓸 수 없다.



JOIN의 경우 쿼리가 복잡해지거나 카테시안(cartesian)으로 인한 속도 저하가 올 수 있다. 조인이 무조건 빠른 것은 아니다.
참고: https://jojoldu.tistory.com/520









서브쿼리 종류 상세
인라인 뷰(Inline View)
FROM절에 사용되는 서브쿼리를 인라인 뷰라 한다.- 서브쿼리가
FROM절에 사용되면 뷰처럼 결과가 동적으로 생성된 테이블로 사용 가능하다. - 임시적인 뷰이기 때문에 데이터베이스에는 저장되지 않는다.
- 동적으로 생성된 테이블이기 때문에 컬럼을 자유롭게 참조할 수 있다.









