다음을 통해 공유


FROM(Entity SQL)

SELECT 문에 사용되는 컬렉션을 지정합니다.

문법

FROM expression [ ,...n ] AS C

주장들

expression
문에서 소스로 사용할 컬렉션을 생성하는 유효한 쿼리 식입니다 SELECT .

비고

FROM 절은 하나 이상의 FROM 절 항목에 대한 쉼표로 구분된 목록입니다. 이 절은 FROM 문에 대한 SELECT 하나 이상의 원본을 지정하는 데 사용할 수 있습니다. 절의 FROM 가장 간단한 형태는 다음 예제와 같이 문에서 SELECT 소스로 사용되는 컬렉션 및 별칭을 식별하는 단일 쿼리 식입니다.

FROM C as c

FROM 절 항목

FROM 절 항목은 Entity SQL 쿼리의 원본 컬렉션을 참조합니다. Entity SQL은 단순 FROM 절 항목, JOIN FROM 절 항목 및 절 항목과 APPLY FROM 같은 절 항목 클래스 FROM 를 지원합니다. 이러한 FROM 각 절 항목은 다음 섹션에서 자세히 설명합니다.

Simple FROM 절 항목

가장 FROM 간단한 절 항목은 컬렉션과 별칭을 식별하는 단일 식입니다. 식은 단순히 엔터티 집합 또는 하위 쿼리 또는 컬렉션 형식인 다른 식일 수 있습니다. 다음은 이에 대한 예입니다.

LOB.Customers as c

별칭 사양은 선택 사항입니다. 위 절 항목의 대체 사양은 다음과 같습니다.

LOB.Customers

별칭이 지정되지 않은 경우 Entity SQL은 컬렉션 식에 따라 별칭을 생성하려고 시도합니다.

JOIN FROM 절 항목

JOIN FROM 절 항목은 두 FROM 절 항목 간의 조인을 나타냅니다. Entity SQL은 교차 조인, 내부 조인, 왼쪽 및 오른쪽 외부 조인 및 전체 외부 조인을 지원합니다. 이러한 모든 조인은 Transact-SQL에서 지원되는 방식과 유사하게 지원됩니다. Transact-SQL에서와 같이 해당 항목과 관련된 두 FROM 절 항목은 JOIN 독립적이어야 합니다. 즉, 상관 관계를 지정할 수 없습니다. A CROSS APPLY 또는 OUTER APPLY 이러한 경우에 사용할 수 있습니다.

교차 조인

CROSS JOIN 쿼리 식은 다음 예제와 같이 두 컬렉션의 Cartesian 곱을 생성합니다.

FROM C AS c CROSS JOIN D as d

내부 조인

다음 INNER JOIN 예제와 같이 두 컬렉션의 제한된 카티시안 곱을 생성합니다.

FROM C AS c [INNER] JOIN D AS d ON e

이전 쿼리 식은 조건이 true인 오른쪽에 있는 컬렉션의 모든 요소와 쌍을 이루는 왼쪽에 있는 ON 컬렉션의 모든 요소 조합을 처리합니다. 조건을 지정 INNER JOIN 하지 ON 않으면 퇴화됩니다CROSS JOIN.

왼쪽 외부 조인 및 오른쪽 외부 조인

OUTER JOIN 쿼리 식은 다음 예제와 같이 두 컬렉션의 제한된 Cartesian 곱을 생성합니다.

FROM C AS c LEFT OUTER JOIN D AS d ON e

이전 쿼리 식은 조건이 true인 오른쪽에 있는 컬렉션의 모든 요소와 쌍을 이루는 왼쪽에 있는 ON 컬렉션의 모든 요소 조합을 처리합니다. ON 조건이 false이면 식은 여전히 오른쪽에 있는 요소와 쌍을 이루는 왼쪽에 있는 요소의 단일 인스턴스를 null 값으로 처리합니다.

A RIGHT OUTER JOIN 는 비슷한 방식으로 표현될 수 있습니다.

전체 외부 조인

명시적 FULL OUTER JOIN 은 다음 예제와 같이 두 컬렉션의 제한된 카티시안 곱을 생성합니다.

FROM C AS c FULL OUTER JOIN D AS d ON e

이전 쿼리 식은 조건이 true인 오른쪽에 있는 컬렉션의 모든 요소와 쌍을 이루는 왼쪽에 있는 ON 컬렉션의 모든 요소 조합을 처리합니다. ON 조건이 false이면 식은 여전히 오른쪽의 요소와 쌍을 이루는 왼쪽에 있는 요소의 인스턴스를 null 값으로 처리합니다. 또한 오른쪽에 있는 요소의 인스턴스를 왼쪽의 요소와 쌍으로 처리하고 값은 null입니다.

비고

SQL-92와의 호환성을 유지하려면 Transact-SQL OUTER 키워드는 선택 사항입니다. 따라서 LEFT JOIN, , RIGHT JOINFULL JOIN .의 동의어LEFT OUTER JOINRIGHT OUTER JOINFULL OUTER JOIN입니다.

APPLY 절 항목

엔터티 SQL은 두 가지 종류의 APPLY다음 CROSS APPLYOUTER APPLY을 지원합니다.

A CROSS APPLY 는 왼쪽에 있는 컬렉션의 각 요소와 오른쪽의 식을 계산하여 생성된 컬렉션의 요소에 대한 고유한 페어링을 생성합니다. CROSS APPLY다음 연결된 컬렉션 예제와 같이 오른쪽의 식은 왼쪽의 요소에 따라 기능적으로 달라집니다.

SELECT c, f FROM C AS c CROSS APPLY c.Assoc AS f

동작 CROSS APPLY 은 조인 목록과 유사합니다. 오른쪽의 식이 빈 컬렉션 CROSS APPLY 으로 계산되면 왼쪽에 있는 요소의 해당 인스턴스에 대한 페어링이 생성되지 않습니다.

OUTER APPLY 오른쪽의 CROSS APPLY식이 빈 컬렉션으로 계산되는 경우에도 페어링이 계속 생성되는 것을 제외하고 는 유사합니다. 다음은 다음 예제입니다.OUTER APPLY

SELECT c, f FROM C AS c OUTER APPLY c.Assoc AS f

비고

Transact-SQL과 달리 Entity SQL에는 명시적 unnest 단계가 필요하지 않습니다.

비고

CROSSOUTER APPLY 연산자는 SQL Server 2005에서 도입되었습니다. 경우에 따라 쿼리 파이프라인은 및/또는 OUTER APPLY 연산자를 CROSS APPLY 포함하는 Transact-SQL 생성할 수 있습니다. SQL Server 2005 이전 버전의 SQL Server를 포함한 일부 백 엔드 공급자는 이러한 연산자를 지원하지 않으므로 이러한 백 엔드 공급자에서 이러한 쿼리를 실행할 수 없습니다.

출력 쿼리에 연산자 및/또는 OUTER APPLY 연산자가 있을 CROSS APPLY 수 있는 몇 가지 일반적인 시나리오는 다음과 같습니다. 페이징과 상관 관계가 있는 하위 쿼리; 상호 관련된 하위 쿼리 또는 탐색에 의해 생성된 컬렉션에 대한 AnyElement; 요소 선택기를 허용하는 그룹화 메서드를 사용하는 LINQ 쿼리 명시적으로 지정된 쿼리CROSS APPLY, OUTER APPLY 구문에 대한 구문이 있는 DEREF 쿼리입니다REF.

FROM 절의 여러 컬렉션

절에는 FROM 쉼표로 구분된 컬렉션이 둘 이상 포함될 수 있습니다. 이러한 경우 컬렉션은 함께 조인된 것으로 간주됩니다. N-way CROSS JOIN으로 간주합니다.

다음 예제 CD 에서는 독립 컬렉션이지만 c.NamesC속됩니다.

FROM C AS c, D AS d, c.Names AS e

이전 예제는 다음 예제와 논리적으로 동일합니다.

FROM (C AS c JOIN D AS d) CROSS APPLY c.Names AS e

왼쪽 상관 관계

절의 항목은 FROM 이전 절에 지정된 항목을 참조할 수 있습니다. 다음 예제 CD 에서는 독립 컬렉션이지만 c.Names 다음에 종속 C됩니다.

from C as c, D as d, c.Names as e

논리적으로 다음과 같습니다.

from (C as c join D as d) cross apply c.Names as e

의미론

논리적으로 절의 컬렉션 FROM 은 -way 교차 조인 n의 일부로 간주됩니다(1방향 교차 조인의 경우 제외). 절의 FROM 별칭은 왼쪽에서 오른쪽으로 처리되며 이후 참조를 위해 현재 범위에 추가됩니다. 절은 FROM 여러 행 집합을 생성하는 것으로 간주됩니다. 해당 컬렉션 항목의 단일 요소를 나타내는 절의 FROM 각 항목에 대해 하나의 필드가 있습니다.

이 절은 FROM 논리적으로 Row(c, d, e) 형식의 여러 행 집합을 생성합니다. 여기서 필드 c, d 및 e는 , Dc.Names.C의 요소 형식으로 간주됩니다.

Entity SQL은 범위의 각 단순 FROM 절 항목에 대한 별칭을 도입합니다. 예를 들어 다음 FROM 절 코드 조각에서 범위에 도입된 이름은 c, d 및 e입니다.

from (C as c join D as d) cross apply c.Names as e

엔터티 SQL에서(Transact-SQL달리) 절은 FROM 별칭만 범위에 도입합니다. 이러한 컬렉션의 열(속성)에 대한 모든 참조는 별칭으로 한정되어야 합니다.

중첩된 쿼리에서 키 끌어올리기

중첩된 쿼리에서 키를 끌어와야 하는 특정 유형의 쿼리는 지원되지 않습니다. 예를 들어 다음 쿼리는 유효합니다.

select c.Orders from Customers as c

그러나 중첩된 쿼리에 키가 없으므로 다음 쿼리는 유효하지 않습니다.

select {1} from {2, 3}

참고하십시오