T-SQL의 파생표와 CTE에 대해 간단히 이야기하다
인용문
표 표현식은 유효한 관계표를 대표하는 명명된 조회 표현식이다.MSSQL은 파생표, 공용표 표현식(CTE), 보기 및 내연표 값 함수 등 4가지 종류의 표 표현식을 지원한다.표 표현식은 물리적으로 진실하게 존재하는 대상이 아니라 가상적이다.표 표현식에 대한 조회는 데이터베이스 엔진 내부에서 밑바닥 대상의 조회로 바뀐다.표 표현식을 사용하는 것은 일반적으로 코드의 논리적인 측면에 나타나는 것이지 성능적인 측면에 나타나는 것이 아니다.다음은 우리 엄마가 유형별로 자세히 소개해 드릴게요.
파생표
파생표도 표자 조회라고 하는데 외부 조회의FROM 자구에서 정의된 것이다.파생표의 존재 범위는 외부 조회를 정의하는 것이다. 외부 조회가 끝나면 파생표도 존재하지 않는다.다음은 파생표를 사용하는 예를 살펴보자.
모든 미국 고객에게 돌아가야 한다고 가정하면 파생표를 사용하면 우리는 이렇게 사용할 수 있다.
1 select custid,companyname from
2 (select custid,companyname from
3 Sales.Customers
4 where country=N'USA') as USACusts
우리는 파생표의 간단한 예를 보았다.모든 종류의 표 표현식을 효과적으로 정의하려면 아래의 세 가지 조건을 만족시켜야 한다.
일정한 순서가 있다는 보장은 없다
표 표현식은 하나의 표를 대표하는데 관계표의 줄은 고정된 순서가 없다.따라서 표 표현식은 ORDER BY 자구를 사용할 수 없습니다.유일한 예외는 T-SQL에서 TOP 옵션을 사용한 것이다. TOP 옵션이 있는 검색어에서 ORDER BY 자구는 단 한 가지 목적이 있다. 바로 TOP 옵션을 위해 어떤 줄을 선별하고 일반적인 데이터 표시에 사용하지 않는지 정의하는 것이다.표 표현식도 이 법칙에 부합된다.
모든 열에는 이름이 있어야 합니다
모든 열명은 유일해야 한다
파생표의 다중 인용
파생표는 외부 조회의FROM 자구에서 정의된 것으로 논리적 처리 순서가 외부 조회보다 우선적이지 않다는 것을 알고 있습니다.외부 조회의 FROM 자문을 처리할 때 파생표는 존재하지 않습니다.따라서 파생표의 여러 실례를 인용하려면 같은 조회를 바탕으로 여러 파생표를 정의해야 한다.
만약 우리가 위의 예에 대해 자체 연결을 해야 한다고 가정하면 파생표를 사용하면 코드가 불필요하게 보일 것이다. 다음과 같다.
1 use insidetsql2008
2 select * from
3 (select custid,companyname from
4 Sales.Customers
5 where country=N'USA') as USACusts
6 inner join (select custid,companyname from
7 Sales.Customers
8 where country=N'USA') as USACusts1
9 on USACusts.custid=USACusts1.custid
우리는 사실 우리가 같은 표를 연결하는 것을 보았지만, 코드를 여러 번 정의해야 하기 때문에, 이것은 의심할 여지없이 코드의 혼란과 군더더기를 야기한다.
공통 테이블 표현식(CTE)
공용 표 표현식은 파생표와 매우 비슷한 표 표현식으로 파생표에 비해 CTE가 중요한 장점을 가진다.다음은 간단한 예를 통해 CTE를 배워보도록 하겠습니다.
아니면 맨 위에서 모든 미국 고객을 조회한 예입니까?
1 with USACusts as (
2 select custid,companyname from
3 Sales.Customers
4 where country=N'USA'
5 )select * from USACusts
파생표와 마찬가지로 외부 조회가 끝나면 CTE의 생명주기도 끝난다.
우리는 파생표가 여러 인용을 하는 상황에서 코드가 불필요하다는 것을 알고 있다. 공용 표 표현식을 사용하면 이 방면의 문제를 완화시킬 수 있다. 우리는 하나의 예(또는 위의 파생표의 그 예)를 보겠다.
1 with USACusts as (
2 select custid,companyname from
3 Sales.Customers
4 where country=N'USA'
5 )
6 select * from USACusts
7 inner join USACusts as USACusts1
8 on USACusts.custid=USACusts1.custid
우리는 파생표처럼 같은 검색어를 정의할 필요가 없고, 검색어를 한쪽으로 정의한 다음에 인용할 수 있는 공용표 표현식을 사용하는 것을 보았다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.