블로그 이미지
bedbmsguru

Notice

Recent Post

Recent Comment

Recent Trackback

Archive

calendar

1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31
  • total
  • today
  • yesterday
2010. 11. 3. 00:12 SQL SERVER

Drived Tables
쿼리로 생성한 일종의 가상테이블 테이블처럼 From절 뒤에 오고 Drived table의 바깥에서만 사용가능하다.

결과에 Alias를 주고 싶을때.
SELECT OrderYear, COUNT(DISTINCT CustomerID) AS NumCusts
FROM (SELECT YEAR(OrderDate) AS OrderYear, CustomerID
FROM dbo.Orders) AS D
GROUP BY OrderYear; <--Group by가 Select 리스트 보다 먼저 실행되기 때문에 alias를 주려면 Derived Table을 사용해야함


1:중첩가능 drived table안에 중첩된 Drived Table을 사용가능하다.
2:여러번 참조하고 싶을때는 참조하고 싶을때마다 쿼리를 다시 만들어야 한다 즉 한번 작성된 Drived Table을 다시 이용하는

 것은 불가능하다.

CTE(Common Table Express)
Drived Table과 유사하지만 몇가지 장점이 있음
--------CTE형식------------
WITH cte_name
AS
(
cte_query
)
outer_query_referring to_cte_name;

CTE 는 중첩(nested)이 불가능 하지만 하나의 with문 안에서 multiple CTE가 가능하다.
WITH C1 AS
(
SELECT YEAR(OrderDate) AS OrderYear, CustomerID
FROM dbo.Orders
),
C2 AS
(
SELECT OrderYear, COUNT(DISTINCT CustomerID) AS NumCusts
FROM C1
GROUP BY OrderYear
)
SELECT OrderYear, NumCusts
FROM C2
WHERE NumCusts > 70;
-------------------------------------------------------------
※CTE는Drived Table 과 달리  한번 만들어둔 CTE를 여러번 참조가 가능하다.


 


'SQL SERVER' 카테고리의 다른 글

좋은 stored procedure 작성법  (0) 2010.11.03
SQL SERVER 트리거  (0) 2010.11.03
SQL 실행계획이 다시 컴파일 되는 경우  (0) 2010.11.03
SQL2005 랭킹 함수  (0) 2010.11.03
SQL SERVER TIP  (0) 2010.11.03
posted by bedbmsguru