with는 임시테이블 또는 가상테이블의 개념이며, 반복되는 서브쿼리 블록을 하나의 with절 블록으로 만들어서 사용할 수 있다.
이름이 부여된 서브쿼리
임시테이블을 만든다는 관점에서 본다면 view와 쓰임새가 비슷한데 차이점이 있다면 view는 한번 만들어 놓으면 drop할때까지 없어지지 않지만, with절 같은 경우 한번 실행할 쿼리문 내에 정의 되어 있을 경우 그 쿼리문 안에서만 실행된다.
with로 사용한 임시 테이블은 해당 sql내에서 재사용이 가능하기 때문에, 한번만 사용하는 sql문에서는 굳이 with 절을 사용할 필요가 없지만, 재사용을 필요한 상황에서는 with절을 사용하는 것이 편리하다.
서브쿼리가 from 절의 안에서 사용되는 경우, 해당 서브쿼리를 '인라인뷰'라고 한다. from 절에서 사용된 서브쿼리의 결과가 하나의 테이블에 대한 뷰(view)처럼 사용된다.
서브쿼리
뷰
뷰는 저장장치 내에 물리적으로 존재하지 않지만 사용자에게 있는 것처럼 보여지는 가상의 테이블이다.
sql 문장 안에서 보조로 사용되는 또 다른 select문을 의미하는데, 최종 결과를 출력하는 쿼리를 메인 쿼리라고 한다면, 이를 위한 중간 단계 혹은 보조 역할을 하는 select문을 서브 쿼리라 한다.