둘 이상의 테이블에서 데이터가 필요한 경우 테이블 조인이 필요
일반적으로 조인 조건을 포함하는 WHERE 절을 작성해야 한다
조인 조건은 일반적으로 각 테이블의 PK 및 FK로 구성된다
INNER JOIN
OUTER JOIN
Join 조건의 명시에 따른 구분
조인의 처리는 어느 테이블을 먼저 읽을지를 결정하는 것이 중요(처리할 작업량이 상당히 달라진다)
INNER JOIN: 어느 테이블을 먼저 읽어도 결과가 달라지지 않아 MySQL 옵티마이저가 조인의 순서를 조절해서 다양한 방법으로 최적화를 수행할 수 있다
OUTER JOIN: 반드시 OUTER가 되는 테이블을 먼저 읽어야 하므로 옵티마이저가 조인 순서를 선택 할 수 없다
employees와 departments는 겹치는 column이 2개라서 natural join을 쓰면 안 된다
LEFT OUTER JOIN, RIGHT OUTER JOIN, FULL OUTER JOIN으로 구분 됨
어느 한쪽 테이블에는 데이터가 존재하는데 다른 쪽 테이블에는 데이터가 존재하지 않을 경우 그 데이터가 검색되지 않는 문제점을 해결하기 위해 사용
PK는 Null 이면 안 되지만 FK는 Null이어도 된다. FK가 Null인 사원이 존재하므로 inner join에서 그 값은 출력되지 않음
서브 쿼리란 다른 쿼리 내부에 포함되어 있는 Select 문을 의미한다
서브 쿼리를 포함하고 있는 쿼리를 외부 쿼리 또는 메인 쿼리라 부르며, 서브 쿼리는 내부 쿼리라고 부른다
서브 쿼리는 비교 연산자의 오른쪽에 기술해야 하고 반드시 괄호 '()'로 감싸져 있어야만 한다.
서브 쿼리의 종류
단일 행
복수(다중)행
다중 컬럼
주의 사항
서브 쿼리가 사용이 가능한 곳
SELECT, FROM, WHERE, HAVING, ORDER BY, INSERT 문의 VALUES, UPDATE문의 SET
From절에 사용되는 서브 쿼리를 인라인 뷰(Inline View)라 한다
서브 쿼리가 From 절에 사용되면 뷰(view)처럼 결과가 동적으로 생성된 테이블로 사용 가능
임시적인 뷰이기 때문에 데이터베이스에는 저장되지 않는다
동적으로 생성된 테이블이기 때문에 column을 자유롭게 참조 가능