SELECT(Entity SQL)
쿼리 결과로 반환될 요소를 지정합니다.
구문
SELECT [ ALL | DISTINCT ] [ topSubclause ] aliasedExpr
[{ , aliasedExpr }] FROM fromClause [ WHERE whereClause ] [ GROUP BY groupByClause [ HAVING havingClause ] ] [ ORDER BY orderByClause ]
-- or
SELECT VALUE [ ALL | DISTINCT ] [ topSubclause ] expr FROM fromClause [ WHERE whereClause ] [ GROUP BY groupByClause [ HAVING havingClause ] ] [ ORDER BY orderByClause
인수
ALL 결과 집합에 중복 항목이 나타날 수 있음을 지정합니다. 기본값은 ALL입니다.
DISTINCT 고유한 결과만 결과 집합에 나타날 수 있도록 지정합니다.
VALUE 항목 하나만 지정할 수 있으며 행 래퍼를 추가하지 않습니다.
topSubclause
쿼리에서 첫 번째로 반환되는 결과의 개수를 나타내며 top(expr)
형태로 표시되는 모든 유효한 식입니다.
ORDER BY 연산자의 LIMIT 매개 변수를 사용하면 결과 집합에서 처음 n개 항목을 선택할 수도 있습니다.
aliasedExpr
다음 형태의 식이 있다고 가정합니다.
expr
as identifier
| expr
expr
리터럴 또는 식입니다.
설명
SELECT 절은 FROM, GROUP BY 및 HAVING 절이 평가된 후에 평가됩니다. SELECT 절은 현재 범위 내에 있는 항목만 참조할 수 있으며, FROM 절 또는 외부 범위에서 참조할 수 있습니다. GROUP BY 절이 지정된 경우, SELECT 절에서는 GROUP BY 키의 별칭만 참조할 수 있습니다. FROM 절 항목에 대한 참조는 집계 함수에서만 허용됩니다.
SELECT 키워드 다음에 나오는 하나 이상의 쿼리 식을 나열한 목록은 선택 목록이라고 하고 공식적으로는 프로젝션이라고도 합니다. 가장 일반적인 형태의 프로젝션은 단일 쿼리 식입니다. member1
컬렉션에서 collection1
멤버를 선택하면 다음 예제와 같이 member1
의 각 개체에 대한 모든 collection1
값이 포함된 새로운 컬렉션이 생성됩니다.
SELECT collection1.member1 FROM collection1
예를 들어 customers
가 Customer
형식의 Name
속성이 포함된 string
형식의 컬렉션인 경우, Name
에서 customers
을 선택하면 다음 예제와 같이 문자열 컬렉션이 생성됩니다.
SELECT customers.Name FROM customers AS c
FULL, INNER, LEFT, OUTER, ON, RIGHT 등의 JOIN 구문을 사용할 수도 있습니다. ON은 내부 조인에 필수적이지만 크로스 조인에는 사용할 수 없습니다.
ROW 및 VALUE SELECT 절
Entity SQL은 SELECT 절의 두 가지 변형을 지원합니다. 첫 번째 변형인 행 선택은 SELECT 키워드로 식별되며 외부로 투영되어야 하는 하나 이상의 값을 지정하는 데 사용할 수 있습니다. 행 래퍼가 반환된 값 주위에 암시적으로 추가되기 때문에 쿼리 식의 결과는 항상 행의 다중 집합입니다.
행의 각 쿼리 식에서는 별칭이 지정되어야 합니다. 별칭을 지정하지 않으면 Entity SQL은 별칭 생성 규칙을 사용하여 별칭을 생성하려고 시도합니다.
SELECT 절의 다른 변형은 값 선택으로서, SELECT VALUE 키워드로 식별됩니다. 이 절은 항목 하나만 지정할 수 있으며 행 래퍼를 추가하지 않습니다.
행 선택은 다음 예제에서 보여 주는 것처럼 항상 VALUE SELECT로 표현할 수 있습니다.
SELECT 1 AS a, "abc" AS b FROM C
SELECT VALUE ROW(1 AS a, "abc" AS b) FROM C
ALL 및 DISTINCT 한정자
Entity SQL에서 SELECT의 두 변형 모두 ALL 또는 DISTINCT 한정자를 지정할 수 있습니다. DISTINCT 한정자가 지정된 경우, 쿼리 식에서 생성되는 컬렉션에서 중복 항목이 제거됩니다(SELECT 절까지 포함). ALL 한정자가 지정된 경우에는 중복 항목이 제거되지 않으며, ALL이 기본값입니다.
Transact-SQL과의 차이점
Transact-SQL과 달리 Entity SQL은 SELECT 절에서 * 인수 사용을 지원하지 않습니다. 대신 Entity SQL에서는 다음 예에서 보여 주는 것처럼 쿼리를 통해 FROM 절에서 컬렉션 별칭을 참조하여 전체 레코드를 프로젝션할 수 있습니다.
SELECT * FROM T1, T2
이전 Transact-SQL 쿼리 식은 Entity SQL에서 다음과 같이 표현됩니다.
SELECT a1, a2 FROM T1 AS a1, T2 AS a2
예시
다음 Entity SQL 쿼리에서는 SELECT 연산자를 사용하여 쿼리에서 반환될 요소를 지정합니다. 쿼리는 AdventureWorks Sales 모델을 기반으로 합니다. 이 쿼리를 컴파일하고 실행하려면 다음 단계를 수행하세요.
How to: Execute a Query that Returns StructuralType Results의 절차를 따릅니다.
다음 쿼리를
ExecuteStructuralTypeQuery
메서드에 인수로 전달합니다.
SELECT VALUE product FROM AdventureWorksEntities.Products
AS product WHERE product.ListPrice < @price