[SQL] JOIN, 서브쿼리
JOIN?
- 둘 이상의 테이블에서 데이터가 필요한 경우 테이블 조인이 필요.
- 일반적으로 조인조건을 포함하는 WHERE 절을 작성해야함
- 조인 조건은 일반적으로 각 테이블의 PK 및 FK로 구성됨.
JOIN 종류
- INNER join
- OUTER join
- left outer join
- right outer join
JOIN 조건의 명시에 따른 구분
- NATURAL join
- Cross Join(FULL join, cartesian join)
JOIN 시 주의
- 조인의 처리는 어느 테이블을 먼저 읽을 지를 결정한느 것이 중요(처리할 작업량이 상당히 달라진다.)
- INNER JOIN : 어느 테이블을 먼저 읽어도 결과가 달라지지 않아 Mysql 옵티마이저가 조인의 순서를 조절해서 다양한 방법으로 최적화를 수행할 수 있다.
- OUTER JOIN : 반드시 OUTER 가 되는 테이블을 먼저 읽어야하므로 옵티마이저가 조인순서를 선택할 수 없다.
JOIN의 종류
inner join은 기본 디폴트 조인
서브쿼리
- 서브쿼리는 다른쿼리 내부에 포함되어있는 select문을 의미한다.
- 서브쿼리를 포함하고 있는 쿼리를 외부쿼리 또는 메인쿼리라 부르며 서브쿼리는 내부쿼리라고도 부른다.
- 서브쿼리는 비교 연산자의 오른쪽에 기술해야 하고 반드시 괄호로 감싸져있어야만 한다.
서브쿼리의 종류
- 중첩 서브쿼리 where 문 안에 작성하는 서브쿼리
- 단일행
- 복수(다중)행
- 다중컬럼
- 인라인 뷰: from 문 안에 작성하는 서브쿼리
- 스칼라 서브쿼리 : select 문안에 작성하는 서브쿼리.
물음표에 해당하는 치환변수는 값에다만 쓸 수 있지 연산자 하는 컬럼에는 못 씀.
join의 경우 쿼리가 복잡해지거나 카테시안으로 인한 속도 저하가 올 수 있다.
https://jojoldu.tistory.com/520 이 페이지 참고
조인이 무조건 빠른건 아님.
서브쿼리 종류
인라인 뷰(Inline View)
- From 절에 사용되는 서브쿼리를 인라인뷰라 한다.
- 서브쿼리가 From 절에 사용되면 뷰처럼 결과가 동적으로 생성된 테이블로 사용 가능
- 임시적인 뷰이기 때문에 데이터베이스에는 저장되지 않는다.
- 동적으로 생성된 테이블이기 때문에 컬럼을 자유롭게 참조 가능.