SELECT(Entity SQL)
쿼리 결과로 반환될 요소를 지정합니다.
SELECT [ ALL | DISTINCT ] [ topSubclause ] aliasedExpr
[{ , aliasedExpr }]
or
SELECT VALUE [ ALL | DISTINCT ] [ topSubclause ] expr
인수
- ALL
결과 집합에 중복 항목이 나타날 수 있음을 지정합니다. ALL이 기본값입니다.
- DISTINCT
결과 집합에 고유한 결과만 나타날 수 있음을 지정합니다.
- VALUE
항목 하나만 지정할 수 있으며 행 래퍼를 추가하지 않습니다.
topSubclause
쿼리에서 첫 번째로 반환되는 결과의 개수를 나타내며 top (expr) 형태로 표시되는 모든 유효한 식입니다.ORDER BY(Entity SQL) 연산자의 LIMIT 매개 변수를 사용해도 결과 집합에서 처음 n개의 항목을 선택할 수 있습니다.
aliasedExpr
다음 형태의 식입니다.expr(예: identifier | expr)
- expr
리터럴 또는 식입니다.
설명
SELECT 절은 FROM(Entity SQL), GROUP BY(Entity SQL)및 HAVING(Entity SQL) 절이 계산된 후에 계산됩니다. SELECT 절은 현재 범위 내에 있는 항목만 참조할 수 있으며, FROM 절 또는 외부 범위에서 참조할 수 있습니다. GROUP BY 절이 지정된 경우, SELECT 절에서는 GROUP BY 키의 별칭만 참조할 수 있습니다. FROM 절 항목에 대한 참조는 집계 함수에서만 허용됩니다.
SELECT 키워드 다음에 나오는 하나 이상의 쿼리 식을 나열한 목록은 선택 목록이라고 하고 공식적으로는 프로젝션이라고도 합니다. 가장 일반적인 형태의 프로젝션은 단일 쿼리 식입니다. collection1
컬렉션에서 member1
멤버를 선택하면 다음 예제에서 보여 주는 것처럼 collection1
의 각 개체에 대한 모든 member1
값이 포함된 새로운 컬렉션이 생성됩니다.
SELECT collection1.member1 FROM collection1
예를 들어 customers
가 string 형식의 Name
속성이 포함된 Customer 형식의 컬렉션인 경우, customers
에서 Name
을 선택하면 다음 예제에서 보여 주는 것처럼 문자열 컬렉션이 생성됩니다.
SELECT customers.Name FROM customers AS c
FULL, INNER, LEFT, OUTER, ON, RIGHT 등의 JOIN 구문을 사용할 수도 있습니다. ON은 내부 조인에 필수적이지만 크로스 조인에는 사용할 수 없습니다.
ROW 및 VALUE SELECT 절
Entity SQL에서는 두 가지 변형의 SELECT 절을 지원합니다. 하나는 행 선택으로서, SELECT 키워드로 식별됩니다. 이 절은 프로젝션될 값을 하나 이상 지정하는 데 사용됩니다. 반환되는 값 주위에 행 래퍼가 암시적으로 추가되므로, 쿼리 식의 결과는 항상 행의 multiset입니다.
행의 각 쿼리 식에서는 별칭이 지정되어야 합니다. 별칭이 지정되지 않은 경우 Entity SQL에서는 별칭 생성 규칙에 따라 별칭을 생성합니다.
SELECT 절의 다른 변형은 값 선택으로서, SELECT VALUE 키워드로 식별됩니다. 이 절은 항목 하나만 지정할 수 있으며 행 래퍼를 추가하지 않습니다.
행 선택은 다음 예제에서 보여 주는 것처럼 항상 VALUE SELECT로 표현할 수 있습니다.
SELECT 1 AS a, "abc" AS b, a+34 AS c
SELECT VALUE ROW(1 AS a, "abc" AS b, a+34 AS 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 모델을 기반으로 합니다. 이 쿼리를 컴파일하고 실행하려면 다음 단계를 수행하십시오.
방법: StructuralType 결과를 반환하는 쿼리 실행(EntityClient)의 절차를 수행합니다.
다음 쿼리를
ExecuteStructuralTypeQuery
메서드에 인수로 전달합니다.
SELECT VALUE product FROM AdventureWorksEntities.Product AS product
출력되는 결과는 다음과 같습니다.
ProductID: 1
Name: Adjustable Race
ProductNumber: AR-5381
MakeFlag: False
ProductID: 2
Name: Bearing Ball
ProductNumber: BA-8327
MakeFlag: False
ProductID: 3
Name: BB Ball Bearing
ProductNumber: BE-2349
MakeFlag: True
ProductID: 4
Name: Headset Ball Bearings
ProductNumber: BE-2908
MakeFlag: False
ProductID: 316
Name: Blade
ProductNumber: BL-2036
MakeFlag: True
...