WITH 구문
- 서브 쿼리를 사용해 임시 테이블이나 뷰처럼 사용 가능하다.
- 별칭을 지정할 수 있다.
- DB는 WITH 구문을 인라인 뷰나 임시 테이블로 여긴다.
WITH TableName AS (
SELECT *
FROM C_INFO
WHERE NAME LIKE '%a%'
)
서브쿼리
SELECT문 내에 SELECT 문이 또 쓰인 쿼리
인라인 뷰
서브 쿼리가 FROM 절 내에 쓰인 쿼리
SELECT *
FROM (SELECT * FROM C_INFO WHERE name LIKE '%A%');
뷰 테이블
일종의 가상 테이블로, 실제 데이터가 하드웨어에 저장 되지는 않으며 실제 데이터를 갖고 있지도 않다. 또한, 테이블의 구조가 변경되어도 독립적으로 존재한다.
- 사용상의 편의를 위해 사용한다.
- 수행 속도의 향상을 위해 사용한다.
- 임시 저장을 미리 해 놓고 수행 속도를 향상 시킨다.
- SQL 성능 향상을 위해 사용한다.
- 임시 작업을 위해 사용한다.
- 보안 관리를 위해 사용한다.
ROWID
- INSERT를 하면 DB 상에는 보이지 않는 ROWID가 생성 된다.
- 해당 데이터가 어떤 데이터 파일 상에서 어느 블록에 저장되어 있는지 알려준다.
- ROWID의 번호는 데이터 블록에 데이터가 저장된 순서이다.
- 테이블에 데이터를 입력하면 자동 생성 된다.
- 데이터베이스에 저장되어 있는, 데이터를 구분할 수 있는 유일한 값이다.
Group 함수
ROLLUP
- 부분 합계와 전체 합계 값을 보여준다.
- 인수의 순서에 영향을 받는다.
- 앞의 인수만 집계 결과를 리턴한다.
- 아래와 같이 성별과 연령대에 대해 rollup 함수를 실행해 group by를 하면 성별 - 연령대 가능한 케이스들에 대해 sum 집계를 하고 마지막 행에 성별에 대한 전체 합을 리턴한다.
- 즉, 성별 x 연령 별 합계 & 성별 별 합계 & 전체 합계를 리턴한다.
SELECT 성별, 연령, SUM(성별, 연령대)
FROM 결제
GROUP BY ROLLUP(성별, 연령대)
ORDER BY 성별, 연령;
CUBE
- 그룹화 될 수 있는 모든 경우에 대해 집계 한다.
- 즉, 성별 x 연령 별 합계 & 성별 별 합계 & 연령 별 합계 & 전체 합계를 리턴한다.
SELECT 성별, 연령, SUM(성별, 연령대)
FROM 결제
GROUP BY CUBE(성별, 연령대)
GROUPING SETS
<
성별, 거주지 >
SELECT 성별, 연령, SUM(성별, 연령대)
FROM 결제
GROUP BY GROUPING SETS(성별, 연령대)
<(성별, 연령대), 거주지 >
SELECT 성별, 연령, SUM(성별, 연령대)
FROM 결제
GROUP BY GROUPING SETS((성별, 연령대), 거주지)
쿼리가 실행되는 순서
from -> group by -> select -> order by