SELECT 함수

SELECT 함수는 복합 메시지 및 데이터베이스 데이터를 결합, 필터 및 변환합니다.

구문

주:
  1. SELECT 표현식에 더 이상의 대괄호가 필요하지 않습니다. 이것은 대괄호의 사용을 금지하지는 않지만, 있을 경우 필요한 경우에는 일반 표현식 범위의 대괄호입니다.
  2. COUNT 매개변수의 경우 다음 Expression의 값을 단일 별표(*)로 지정할 수 있습니다.

사용법

SELECT 함수는 메시지를 변환하는 일반적이고 가장 효율적인 방법입니다. SELECT를 사용하여 다음을 수행할 수 있습니다.
  • 메시지의 종합적 재형식화
  • 데이터베이스 테이블에 액세스
  • 입력 배열의 서브세트인 출력 배열 작성
  • 입력 배열의 값만 포함된 출력 배열 작성
  • 배열에 있는 항목의 수 계산
  • 배열에 있는 항목의 수에서 최소값 또는 최대값 선택
  • 배열에 있는 값의 합계 계산

SELECT 소개

SELECT 함수는 데이터베이스 테이블과 같은 많은 수의 "행""열"로 구성될 메시지 트리(또는 서브트리)를 고려합니다. FROM 절의 FieldReference는 메시지 트리에서 필드를 식별하고
  • 식별된 필드가 테이블에서 "행"으로 간주됩니다.
  • 필드의 형제는 동일한 "테이블"의 다른 "행"으로 간주됩니다.
  • 필드의 하위는 테이블의 "열"로 간주됩니다.
주: FROM 절의 FieldReference는 실제 데이터베이스 테이블을 직접 참조하는 테이블 참조일 수도 있습니다.

SELECT 함수의 리턴 값은 주로 구성 및 컨텐츠가 SelectClause에 의해 판별되는 "행"을 포함하는 다른 메시지 트리입니다. 결과의 행 수는 FROM절의 모든 필드 참조 및 테이블 참조에 의해 지시되고 WHERE절에 의해 필터링되는 모든 "행"의 총합이며 WHERE절이 TRUE로 평가되는 필드만 포함됩니다.

SELECT 함수의 리턴 값은 스칼라일 수도 있습니다(ITEM 선택사항 참조).

SelectClause를 몇 가지 방법으로 지정할 수 있습니다. 다음을 참조하십시오.

단순 선택

SELECT 함수를 자세히 이해하려면 우선 다음과 같은 간단한 경우를 고려하십시오.
  • SelectClause가 각각 AS Path 절을 포함하는 여러 표현식으로 구성됩니다.
  • FROM 절에는 단일 FieldReference 및 AS CorrelationName 절이 포함됩니다.
SELECT 함수는 이름이 AS CorrelationName 절에 의해 제공된 로컬, 참조, 상관 변수를 작성한 다음 FROM 절에서 도출된 행 목록의 각 "행"을 진행합니다. 각 "행":
  1. 상관 변수는 현재 "행"을 지시하도록 설정됩니다.
  2. WHERE 절(필요한 경우)이 평가됩니다. FALSE 또는 알 수 없음(널)으로 평가되는 경우 결과 트리에 아무 것도 추가되지 않으며 다음 입력 "행"으로 진행합니다. 그렇지 않으면 처리가 다음 단계로 진행됩니다.
  3. 새 구성원이 결과 목록에 추가됩니다.
  4. SELECT 절 표현식이 평가되고 AS Path 절에서 설명한 대로 이름 지정된 필드에 지정됩니다. 이 필드는 결과 목록의 새 구성원의 하위 필드입니다.

일반적으로 SelectClause와 WHERE 절 표현식은 모두 상관 변수를 사용하여 "열" 값(즉, 입력 메시지 트리의 필드)에 액세스한 다음 입력 메시지의 데이터를 포함하는 새 메시지 트리를 빌드합니다. 상관 변수는 AS CorrelationName 절에서 지정된 이름으로 참조되거나 AS 절이 지정되지 않은 경우 FROM FieldReference의 마지막 이름(즉, 마지막 점 뒤의 이름)으로 참조됩니다.

다음 내용에 유의하십시오.
  • 테이블과의 유사성에도 불구하고 플랫 테이블 모양의 구조로만 메시지에 액세스하거나 메시지를 작성하도록 제한되지 않습니다. 깊은 폴더 구조로 트리에 임의로 액세스하고 빌드할 수 있습니다.
  • 단일 값인 "열"에만 제한되지 않습니다. 열은 반복 목록 값이거나 구조일 수 있습니다.
이러한 개념은 예제를 참조하여 가장 잘 이해할 수 있습니다.

필드 참조가 실제로 TableReference인 경우 조작은 매우 유사합니다. 이 경우 입력은 실제 데이터베이스 테이블이므로 데이터베이스에서 지원하는 플랫 구조로 제한됩니다. 그러나 결과 트리는 제한되지 않습니다.

FROM 절에 둘 이상의 필드 참조가 있는 경우 가장 오른쪽 참조는 각 행을 통해 가장 오른쪽에서 두 번째 참조로 진행합니다. 따라서 결과의 총 행 수는 각 테이블의 행 수의 결과입니다. 이러한 선택을 조인이라고 하며 주로 결과에서 대부분의 행을 제외하는 WHERE 절을 사용합니다. 조인은 주로 메시지에 데이터베이스 데이터를 추가하는 데 사용됩니다.

AS Path 절은 선택적입니다. 지정되지 않는 경우 브로커가 다음 규칙에 따라 디폴트 이름을 생성합니다.
  1. SelectClause 표현식이 필드에 대한 참조 또는 필드에 대한 참조의 캐스트인 경우 필드 이름이 사용됩니다.
  2. 그렇지 않으면 브로커가 디폴트 이름 "Column1", "Column2" 등을 사용합니다.

다음 예는 "DSN1" 데이터베이스 "Shop" 스키마의 "Parts" 테이블에서 SELECT를 수행합니다. WHERE절이 없기 때문에 모든 행이 선택됩니다. select절 표현식에는(예를 들면, P.PartNumber) AS절이 포함되지 않기 때문에 결과 필드는 동일한 이름을 채택합니다.

SET PartsTable.Part[] = SELECT
  P.PartNumber,
  P.Description,
  P.Price
 FROM Database.DSN1.Shop.Parts AS P;

SET 명령문("PartsTable")의 대상이 ROW 유형의 변수인 경우 명령문을 실행한 후에 PartsTable은 루트 요소의 하위로 테이블의 각 행에 대해 "Part"라는 필드를 포함하게 됩니다. 각 "Part" 필드는 "PartNumber", "Description""Price"라는 하위 필드를 포함하게 됩니다. 하위 필드는 테이블 컨텐츠에서 지시된 값을 포함하게 됩니다. ("PartsTable"은 메시지 트리의 참조일 수 있음).

다음 예에서는 비슷한 SELECT를 수행합니다. 이 경우는 SELECT가 첫번째 예(실제 데이터베이스 테이블이 아닌)에서 작성된 메시지 트리에서 수행된다는 점에서 마지막과 다릅니다. 결과는 "OutputRoot"의 서브 폴더에 지정됩니다.

SET OutputRoot.XML.Data.TableData.Part[] = SELECT
  P.PartNumber,
  P.Description,
  P.Price
 FROM PartsTable.Part[] AS P;

INSERT 선택사항

INSERT 절은 AS 절의 대안입니다. SelectClause 표현식의 결과(행이어야 함)를 현재 새 행의 하위가 아니라 행 자체에 지정합니다. 그러면 표현식의 행 결과가 SELECT에서 생성되는 행으로 병합됩니다. 이는 AS절과 다릅니다. AS절은 결과를 추가하기 전에 항상 하나 이상의 하위 요소를 생성하는 반면 INSERT는 아무것도 생성하지 않습니다. 추가 폴더 없이 데이터를 병합할 수 있기 때문에 INSERT는 다른 SELECT 조작에서 데이터를 삽입할 때 유용합니다.

ITEM 선택사항

SelectClause는 키워드 ITEM 및 단일 표현식으로 구성될 수 있습니다. 그러면 결과의 이름이 없어지게 됩니다. 즉, 결과는 행이 아니라 표현식에서 리턴한 유형의 값 목록입니다. 이 옵션에는 몇 가지 사용이 있습니다.
  • 스칼라 표현식 및 THE 함수와 함께 단일 스칼라 값(예: 테이블로부터의 특정 항목의 가격)을 리턴하는 SELECT 쿼리를 작성하는 데 사용될 수 있습니다.
  • CASE 표현식 및 ROW 구성자와 함께 일부 "행"(즉, 메시지에서 반복)의 구조가 다른 행과 다른 메시지를 작성하거나 핸들링하는 SELECT 쿼리를 작성하는 데 사용될 수 있습니다. 반복 구조가 있지만 반복 내용이 모두 동일한 구조를 갖지는 않는 메시지를 핸들링하는 데 유용합니다.
  • ROW 구성자와 함께 입력 메시지에서 반복 레벨을 축약하는 SELECT 쿼리를 작성하는 데 사용될 수 있습니다.

열 함수 선택사항

SelectClause는 표현식에서 작동하는 COUNT, MAX, MIN 및 SUM 함수 중 하나로 구성될 수 있습니다. 이 함수를 열 함수라고 합니다. 이 함수는 FROM 절의 행을 통해 진행할 때 Expression이 평가되는 값의 수, 최대값, 최소값 또는 총합을 제공하는 단일 스칼라 값(목록이 아님)을 리턴합니다. Expression이 특정 행에 대해 널(null)로 평가되는 경우 이 값이 무시되므로 함수는 나머지 행의 수, 최대값, 최소값 또는 총합을 리턴합니다.

COUNT 함수의 경우에만 Expression이 단일 별표(*)로 구성될 수 있습니다. 이 형식은 널값에 상관 없이 행을 계산합니다.

결과가 입력 메시지를 유용하게 반영하도록 Expression은 주로 상관 변수를 포함합니다.

주로 Expression은 각 행에 대해 동일한 데이터 유형으로 평가됩니다. 이 경우 MAX, MIN 및 SUM 함수의 결과는 피연산자와 동일한 데이터 유형이 됩니다. 그러나 리턴된 값이 모두 동일한 유형일 필요는 없으며, 동일한 유형이 아니면 산술 적용의 정상 규칙이 됩니다. 예를 들면, 반복 메시지 구조의 필드가 일부 행에 대해서는 정수 값을 포함하고 다른 행에 대해서는 Float 값을 포함하는 경우 총합은 더하기의 정상 규칙을 따릅니다. 조작이 많은 정수 값 및 Float 값을 추가하는 것에 해당하므로 Float 유형이 됩니다.

COUNT 함수의 결과는 항상 정수입니다.

메시지와 데이터베이스 선택의 차이

상관 변수가 메시지의 행에 표시하는 FROM 표현식은 상관 변수가 실제 데이터베이스 테이블에 행을 표시하는 표현식과 약간 다르게 작동합니다.

메시지의 경우 별표(*)가 포함된 경로는 정상적인 의미를 갖고 필드의 이름을 무시하고 다른 기준(필요한 경우)과 일치하는 첫 번째 필드를 찾습니다.

데이터베이스의 경우 별표(*)는 기록상의 이유에서 "모든 필드"의 특수한 의미를 갖습니다. 이 특수 의미에는 데이터베이스 테이블의 정의에 대한 고급 지식이 필요하고 디폴트 데이터베이스를 쿼리할 때만 지원됩니다(즉, 노드의 데이터 소스 속성에 의해서만 지시된 데이터베이스). 예를 들면, 다음 쿼리는 디폴트 데이터베이스를 쿼리할 때 열 이름/값 쌍만 리턴합니다.
SELECT * FROM Database.Datasource.SchemaName.Table As A
SELECT A.* FROM Database.Datasource.SchemaName.Table As A
SELECT A FROM Database.Datasource.SchemaName.Table AS A

SELECT 표현식 지정

SelectClause
SelectClause 표현식은 브로커의 연산자와 함수를 결합하여 사용할 수 있습니다. 이 표현식은 테이블의 열, 메시지 필드, SELECT를 포함하여 선언된 상관 이름 및 기타 선언된 변수나 범위 안의 상수를 나타낼 수 있습니다.
AS Path
AS Path 표현식은 상대 경로이지만(즉, 상관 이름이 없음) 어떤 방식으로도 제한되지 않습니다. 예를 들면, 다음을 포함할 수 있습니다.
  • 색인(예: A.B.C[i])
  • 필드 유형 지정자(예: A.B.(XML.Attribute)C )
  • 멀티파트 경로(예: A.B.C )
  • 이름 표현식(예: A.B.{var})

이 경로의 모든 표현식은 임의 결합으로 브로커의 연산자와 기능을 사용할 수도 있습니다. 표현식은 테이블의 열, 메시지, 필드, SELECT를 포함하여 선언된 상관 이름 및 선언된 변수나 상수를 나타낼 수 있습니다.

FROM 절
FROM 절 표현식은 다중 데이터베이스 참조, 다중 메시지 참조 또는 두 가지 혼합을 포함할 수 있습니다. 그러므로 테이블과 테이블, 메시지와 메시지 또는 테이블과 메시지를 조인할 수 있습니다.

FROM 절 FieldReference는 임의의 표현식을 포함할 수 있습니다(예: Database.{DataSource}.{Schema}.Table1).

필드, 데이터 소스, 스키마 또는 테이블 이름을 런타임에서 계산할 수 있습니다.

WHERE 절

WHERE 절 표현식은 임의 결합으로 브로커의 연산자와 기능 중 하나를 사용할 수 있습니다. 표현식은 테이블의 열, 메시지 필드 및 선언된 변수나 상수를 나타낼 수 있습니다.

그러나 브로커는 표현식을 조사하고 데이터베이스에서 전체 표현식을 평가할 수 있는지 여부를 결정하여 WHERE 절 표현식을 처리합니다. 전체 표현식을 평가할 수 있는 경우, 데이터베이스에 제공됩니다. 데이터베이스에서 평가할 수 있으려면, 데이터베이스에서 지원하는 함수와 연산자만을 사용해야 합니다.

그러나 WHERE 절은 SELECT를 포함하여 선언된 메시지 필드, 상관 이름 및 기타 선언된 변수나 범위 안의 상수를 나타낼 수 있습니다.

전체 표현식을 데이터베이스에서 평가할 수 없는 경우, 브로커는 맨 위 레벨 AND 연산자를 찾아 각 부속 표현식을 조사합니다. 그런 다음 평가할 수 있는 서브 표현식을 데이터베이스에 제공하려고 시도하며, 브로커가 나머지를 평가하도록 둡니다. 다음 두 가지 이유로 이러한 상황을 인식해야 합니다.
  1. 외관상 WHERE절 표현식에 대한 사소한 변경사항은 성능에 많은 영향을 미칠 수 있습니다. 사용자 추적을 조사하여 데이터베이스에 제공된 표현식의 정보를 판별할 수 있습니다.
  2. 일부 데이터베이스의 기능은 브로커의 기능과는 다른 미묘한 작동 차이를 나타냅니다.

THE 함수와 관련됨

SELECT와 함께 THE 함수(목록의 첫 번째 요소를 리턴함)를 사용하여 목록이 아닌 결과를 생성할 수 있습니다. 예를 들면, SELECT 쿼리가 하나의 항목만 리턴해야 하는 경우에 유용합니다. 특히 ITEM과 함께 유용합니다(ITEM 선택사항 참조).

SQL 표준과의 차이

ESQL SELECT는 다음과 같은 면에서 데이터베이스 SQL SELECT와 차이가 있습니다.
  • ESQL은 트리 구조 결과 데이터를 생성할 수 있습니다.
  • ESQL은 SELECT절에서 배열을 승인할 수 있습니다.
  • ESQL에는 THE 함수 및 ITEM 및 INSERT 매개변수가 있습니다.
  • 이 릴리스에서 ESQL에는 SELECT ALL 함수가 없습니다.
  • 이 릴리스에서 ESQL에는 ORDER BY 함수가 없습니다.
  • 이 릴리스에서 ESQL에는 SELECT DISTINCT 함수가 없습니다.
  • 이 릴리스에서 ESQL에는 GROUP BY 또는 HAVING 매개변수가 없습니다.
  • 이 릴리스에서 ESQL에는 AVG 열 함수가 없습니다.

제한사항

다음 제한사항이 현재 릴리스에 적용됩니다.
  • SELECT 명령이 둘 이상의 데이터베이스 테이블에서 작동할 때 모든 테이블이 동일한 데이터베이스 인스턴스에 있어야 합니다. (즉, TableReference는 다른 데이터 소스 이름을 지정할 수 없습니다.)
  • FROM 절이 메시지 및 테이블 둘다를 나타내는 경우 테이블이 반드시 목록에서 메시지 앞에 와야 합니다.
관련 개념
ESQL 개요
관련 태스크
ESQL 개발
단순 XML 메시지 변환
복합 XML 메시지 변환
XML 메시지에서 스칼라 값 리턴
ESQL에서 데이터베이스에 액세스
관련 참조
구문 다이어그램: 사용 가능한 유형
복합 ESQL 함수
주의사항 | 등록상표 | 다운로드 | 라이브러리 | 지원 | 피드백
Copyright IBM Corporation 1999, 2006 마지막 갱신 날짜: 2006/08/21
ak05620_