다음을 통해 공유


식별자(Entity SQL)

식별자는 엔터티 SQL에서 쿼리 식 별칭, 변수 참조, 개체의 속성, 함수 등을 나타내는 데 사용됩니다. 엔터티 SQL은 간단한 식별자와 따옴표 붙은 식별자라는 두 가지 종류의 식별자를 제공합니다.

단순 식별자

Entity SQL의 단순 식별자는 영숫자 및 밑줄 문자 시퀀스입니다. 식별자의 첫 번째 문자는 사전순 문자(a-z 또는 A-Z)여야 합니다.

따옴표 붙은 식별자

따옴표 붙은 식별자는 대괄호([])로 묶인 문자 시퀀스입니다. 따옴표 붙은 식별자를 사용하면 식별자에서 유효하지 않은 문자로 식별자를 지정할 수 있습니다. 대괄호 사이의 모든 문자는 모든 공백을 포함하여 식별자의 일부가 됩니다.

따옴표 붙은 식별자는 다음 문자를 포함할 수 없습니다.

  • 줄 바꿈.

  • 캐리지 리턴

  • 탭.

  • 백스페이스.

  • 추가 대괄호(즉, 식별자를 나타내는 대괄호 내의 대괄호).

따옴표 붙은 식별자는 유니코드 문자를 포함할 수 있습니다.

따옴표 붙은 식별자를 사용하면 다음 예제와 같이 식별자에서 유효하지 않은 속성 이름 문자를 만들 수 있습니다.

SELECT c.ContactName AS [Contact Name] FROM customers AS c

따옴표 붙은 식별자를 사용하여 Entity SQL의 예약된 키워드인 식별자를 지정할 수도 있습니다. 예를 들어 형식 Email 에 "From"이라는 속성이 있는 경우 다음과 같이 대괄호를 사용하여 예약된 키워드 FROM에서 구분할 수 있습니다.

SELECT e.[From] FROM emails AS e

점(.) 연산자의 오른쪽에 따옴표 붙은 식별자를 사용할 수 있습니다.

SELECT t FROM ts as t WHERE t.[property] == 2

식별자에서 대괄호를 사용하려면 대괄호를 더 추가합니다. 다음 예제에서 "abc]"는 식별자입니다.

SELECT t from ts as t WHERE t.[abc]]] == 2

따옴표 붙은 식별자 비교 의미 체계는 입력 문자 집합을 참조하세요.

별칭 지정 규칙

필요한 경우 다음 Entity SQL 구문을 포함하여 Entity SQL 쿼리에서 별칭을 지정하는 것이 좋습니다.

  • 행 생성자의 필드입니다.

  • 쿼리 식의 FROM 절에 있는 항목입니다.

  • 쿼리 식의 SELECT 절에 있는 항목입니다.

  • 쿼리 식의 GROUP BY 절에 있는 항목입니다.

유효한 별칭

Entity SQL의 유효한 별칭은 간단한 식별자 또는 따옴표 붙은 식별자입니다.

별칭 생성

Entity SQL 쿼리 식에 별칭이 지정되지 않은 경우 Entity SQL은 다음 간단한 규칙에 따라 별칭을 생성하려고 합니다.

  • 별칭이 지정되지 않은 쿼리 식이 단순 또는 따옴표 붙은 식별자인 경우 해당 식별자가 별칭으로 사용됩니다. 예를 들어 ROW(a, [b])ROW(a AS a, [b] AS [b])이 됩니다.

  • 쿼리 식이 더 복잡한 식이지만 해당 쿼리 식의 마지막 구성 요소가 단순 식별자인 경우 해당 식별자는 별칭으로 사용됩니다. 예를 들어 ROW(a.a1, b.[b1])ROW(a.a1 AS a1, b.[b1] AS [b1])이 됩니다.

나중에 별칭 이름을 사용하려는 경우 암시적 별칭을 사용하지 않는 것이 좋습니다. 별칭(암시적 또는 명시적)이 충돌하거나 동일한 범위에서 반복될 때마다 컴파일 오류가 발생합니다. 동일한 이름의 명시적 또는 암시적 별칭이 있더라도 암시적 별칭은 컴파일을 전달합니다.

암시적 별칭은 사용자 입력에 따라 자동으로 생성됩니다. 예를 들어 다음 코드 줄은 NAME을 두 열에 대한 별칭으로 생성하므로 충돌합니다.

SELECT product.NAME, person.NAME

명시적 별칭을 사용하는 다음 코드 줄도 실패합니다. 그러나 코드를 읽으면 오류가 더 명백해집니다.

SELECT 1 AS X, 2 AS X …

범위 지정 규칙

엔터티 SQL은 특정 변수가 쿼리 언어로 표시되는 시기를 결정하는 범위 지정 규칙을 정의합니다. 일부 식 또는 문에는 새 이름이 도입됩니다. 범위 지정 규칙은 해당 이름을 사용할 수 있는 위치와 이름이 같은 새 선언이 선행 파일을 숨길 수 있는 시기 또는 위치를 결정합니다.

이름이 Entity SQL 쿼리에 정의되면 범위 내에서 정의됩니다. 범위는 쿼리의 전체 영역을 포함합니다. 특정 범위 내의 모든 식 또는 이름 참조는 해당 범위 내에 정의된 이름을 볼 수 있습니다. 범위가 시작되기 전과 종료 후에는 범위 내에서 정의된 이름을 참조할 수 없습니다.

범위를 중첩할 수 있습니다. Entity SQL의 일부에는 전체 지역을 포함하는 새 범위가 도입되며, 이러한 지역에는 범위를 도입하는 다른 Entity SQL 식도 포함될 수 있습니다. 범위가 중첩되면 참조를 포함하는 가장 안쪽 범위에 정의된 이름에 대한 참조를 만들 수 있습니다. 외부 범위에 정의된 모든 이름에 대한 참조를 만들 수도 있습니다. 동일한 범위 내에 정의된 두 범위는 형제 범위로 간주됩니다. 형제 범위 내에 정의된 이름에 대한 참조는 수행할 수 없습니다.

내부 범위에 선언된 이름이 외부 범위에 선언된 이름과 일치하는 경우 내부 범위 내 또는 해당 범위 내에서 선언된 범위 내에서 참조는 새로 선언된 이름만 참조합니다. 외부 범위의 이름이 숨겨집니다.

동일한 범위 내에서도 이름을 정의하기 전에 참조할 수 없습니다.

전역 이름은 실행 환경의 일부로 존재할 수 있습니다. 여기에는 영구 컬렉션 또는 환경 변수의 이름이 포함될 수 있습니다. 전역 이름이 되려면 가장 바깥쪽 범위에서 선언해야 합니다.

매개 변수가 범위에 없습니다. 매개 변수에 대한 참조에는 특수 구문이 포함되므로 매개 변수 이름은 쿼리의 다른 이름과 충돌하지 않습니다.

쿼리 식

Entity SQL 쿼리 식에는 새 범위가 도입됩니다. FROM 절에 정의된 이름은 왼쪽에서 오른쪽으로 모양 순서대로 from 범위에 도입됩니다. 조인 목록에서 식은 목록의 앞부분에서 정의된 이름을 참조할 수 있습니다. FROM 절에서 식별된 요소의 공용 속성(필드 등)은 범위에서 추가되지 않습니다. 항상 별칭으로 한정된 이름으로 참조해야 합니다. 일반적으로 SELECT 식의 모든 부분은 범위 내의 것으로 간주됩니다.

GROUP BY 절에는 새 형제 범위도 도입됩니다. 각 그룹에는 그룹의 요소 컬렉션을 참조하는 그룹 이름이 있을 수 있습니다. 또한 각 그룹화 식은 그룹 범위에 새 이름을 도입합니다. 또한 중첩 집계(또는 명명된 그룹)도 범위에 추가됩니다. 그룹화 식 자체는 범위 내입니다. 그러나 GROUP BY 절을 사용하는 경우 select-list(프로젝션), HAVING 절 및 ORDER BY 절은 범위가 아닌 그룹 범위 내에 있는 것으로 간주됩니다. 집계는 다음 글머리 기호 목록에 설명된 대로 특별한 처리를 받습니다.

다음은 범위에 대한 추가 정보입니다.

  • select-list는 순서대로 범위에 새 이름을 도입할 수 있습니다. 오른쪽의 프로젝션 식은 왼쪽에 프로젝션된 이름을 참조할 수 있습니다.

  • ORDER BY 절은 선택 목록에 지정된 이름(별칭)을 참조할 수 있습니다.

  • SELECT 식 내의 절 평가 순서에 따라 이름이 범위에 도입되는 순서가 결정됩니다. FROM 절이 먼저 평가되고 WHERE 절, GROUP BY 절, HAVING 절, SELECT 절 및 ORDER BY 절이 뒤따릅니다.

집계 처리

Entity SQL은 컬렉션 기반 집계 및 그룹 기반 집계의 두 가지 형태의 집계를 지원합니다. 컬렉션 기반 집계는 Entity SQL에서 기본 설정 구문이며 그룹 기반 집계는 SQL 호환성을 위해 지원됩니다.

집계를 확인할 때 Entity SQL은 먼저 이를 컬렉션 기반 집계로 처리하려고 시도합니다. 실패하면 Entity SQL은 집계 입력을 중첩 집계에 대한 참조로 변환하고 다음 예제와 같이 이 새 식을 해결하려고 시도합니다.

AVG(t.c) becomes AVG(group..(t.c))

참고하십시오