[ CTE : Common Table Expression ]
> 서브쿼리로 쓰이는 파생 테이블과 비슷한 개념으로 사용된다.
- CTE는 만들기 위한 권한이 필요없고, 하나의 쿼리문이 끝날 때까지만 지속되는 일회성 테이블이다.
> 주로 복잡한 쿼리문에서 코드의 가독성과 재사용성을 위해 파생테이블 대신 사용하기에 유용하다.
*참고_MySQL은 8.0 버전부터 지원
> CTE 활용 예시 _ WITH 테이블명 AS ( 쿼리문 )
WITH TABLE1 AS(
SELECT ~~
FROM ~~
WHERE ~~
),
TABLE2 AS(
SLSECT ~~
FROM ~~
WEHER ~~
)
SELECT T1.ID, T1.NAME, ~~
FROM TABLE1 T1
JOIN TABLE2 T2
ON T1.ID = T2.ID
> '주의할 점'은 CTE를 무분별하게 사용할 경우, Query Performance가 오히려 떨어질 수 있다.
- MySQL8에서는 CTE는 임시테이블을 만드는 것(Materialization)이기 때문이다.
- 그럴 땐 서브쿼리 형태로 사용하는 것이 좋다.
참고_ Oracle은 기본적으로 Materialization을 하지 않음.
[ VIEW ]
> 데이터베이스에 존재하는 일종의 가상 테이블을 말한다.
- 실제 테이블처럼 행과 열을 가지고 있지만, 실제로 데이터를 저장하고 있지는 않는다.
- 다시 말해, 데이터를 보여주는 역할만 수행.
- 만들기 위한 권한이 필요하며 사전에 정의를 해야 한다.
> 여러 테이블을 들리면서 생기는 번거로움을 줄이거나 반복해서 쓰는 쿼리문을 재사용할 때 사용
- 즉 복잡한 쿼리를 단순화 시켜준다.
> 참고
- 한 번 정의된 뷰는 변경이 불가능하다.
- 삽입 삭제 갱신 작업에 많은 제한 사항을 가진다.
- 뷰는 자신만의 인덱스를 가질 수 없다.
> 뷰 활용 예시 _ CREATE VIEW viewName AS ~ 쿼리문 ~
# 뷰 생성
CREATE VIEW viewNAME AS
SELECT ~~
FROM ~~
WHERE ~~
# 뷰 수정
ALTER VIEW viewNAME AS
SELECT ~~
FROM ~~
WHERE ~~
# 뷰 삭제
DROP VIEW viewNAME
'[스파르타코딩클럽]데이터분석 과정 > SQL' 카테고리의 다른 글
[SQL 코드카타] 158 ~ 164번 (HackerRank) (0) | 2024.01.09 |
---|---|
[SQL 코드카타] 95 ~ 98번 (LeetCode) (0) | 2024.01.08 |
[SQL 코드카타] 150 ~ 157번 (HackerRank) (0) | 2024.01.05 |
[SQL 코드카타] 92~94번 (LeetCode) (0) | 2024.01.04 |
[SQL 코드카다] 89~92번 (LeetCode) (0) | 2024.01.03 |