식별자(Entity SQL)
식별자는 Entity SQL에서 쿼리 식 별칭, 변수 참조, 개체 속성, 함수 등을 나타내는 데 사용됩니다. Entity 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 구문을 비롯하여 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 …
범위 지정 규칙
Entity SQL에서는 쿼리 언어에 특정 변수가 표시되는 시점을 결정하는 범위 지정 규칙을 정의합니다. 어떤 식이나 문에서는 새 이름을 제공합니다. 이러한 이름을 사용할 수 있는 위치 및 동일한 이름을 다른 이름으로 새로 선언하여 선행 이름을 숨길 수 있는 시점이나 위치 등을 결정하는 데 범위 지정 규칙이 적용됩니다.
Entity SQL 쿼리에서 이름이 정의되어 있는 경우 범위 내에서 정의되어 있다고 말합니다. 범위는 쿼리의 전체 영역을 포괄합니다. 특정 범위의 모든 식이나 이름 참조에서는 해당 범위에서 정의된 이름을 볼 수 있습니다. 범위 시작 이전과 끝난 후에는 그 범위에서 정의된 이름을 참조할 수 없습니다.
범위는 중첩할 수 있습니다. Entity SQL의 일부에서는 전체 영역을 포괄하는 새 영역을 제공하며, 이러한 영역 역시 범위를 제공하는 다른 Entity SQL 식을 포함할 수 있습니다. 범위가 중첩될 경우, 참조를 포함하는 가장 안쪽 범위에 정의된 이름을 참조할 수 있습니다. 또한 바깥쪽 범위에 정의된 임의의 이름을 참조할 수도 있습니다. 동일한 범위에서 정의된 두 범위는 형제 범위로 간주됩니다. 형제 범위에 정의된 이름은 참조할 수 없습니다.
안쪽 범위에서 선언된 이름이 바깥쪽 범위에서 선언된 이름과 일치하는 경우, 안쪽 범위 내 또는 그 범위에서 선언된 범위 내의 참조는 새로 선언된 이름만 참조합니다. 바깥쪽 범위의 이름은 숨겨집니다.
동일한 범위 내에 있더라도 이름을 정의하기 전에는 참조할 수 없습니다.
전역 이름은 실행 환경의 일부로 존재할 수 있으며, 여기에는 영구 컬렉션 또는 환경 변수의 이름이 포함될 수 있습니다. 이름이 전역 이름이 되려면 가장 바깥쪽 범위에서 선언되어야 합니다.
매개 변수는 범위에 속하지 않습니다. 매개 변수에 대한 참조에는 특수 구문이 포함되므로, 매개 변수의 이름은 쿼리의 다른 이름과 충돌하지 않습니다.
쿼리 식
Entity SQL 쿼리 식에서는 새로운 범위를 제공합니다. FROM 절에 정의된 이름이 나타나는 순서대로 왼쪽에서 오른쪽 순으로 시작 범위에 제공됩니다. 조인 목록에서 식은 목록에서 앞쪽에 정의된 이름을 참조할 수 있습니다. FROM 절에서 식별된 요소의 공용 속성(예: 필드)은 시작 범위에 추가되지 않으며 항상 정규화된 별칭 이름으로 참조해야 합니다. 일반적으로 SELECT 식의 모든 부분은 시작 범위 내에 있는 것으로 간주됩니다.
GROUP BY 절 역시 새로운 형제 범위를 제공합니다. 각 그룹은 그룹의 요소 컬렉션을 참조하는 그룹 이름을 가질 수 있습니다. 각 그룹화 식도 그룹 범위에 새 이름을 제공합니다. 또한 중첩 집계(또는 명명된 그룹)도 범위에 추가됩니다. 그룹화 식 자체는 시작 범위에 속합니다. 그러나 GROUP BY 절이 사용되는 경우 선택 목록(프로젝션), HAVING 절 및 ORDER BY 절은 시작 범위가 아니라 그룹 범위에 속하는 것으로 간주됩니다. 집계는 다음 글머리 기호 목록에서 설명하는 것처럼 특별하게 처리됩니다.
다음은 범위에 대한 추가적인 참고 사항입니다.
선택 목록은 새 이름을 순서대로 범위에 제공할 수 있습니다. 오른쪽의 프로젝션 식은 왼쪽의 프로젝션된 이름을 참조합니다.
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))