SELECT 함수는 복합 메시지 및 데이터베이스 데이터를 결합, 필터 및 변환합니다.
SELECT 함수의 리턴 값은 주로 구성 및 컨텐츠가 SelectClause에 의해 판별되는 "행"을 포함하는 다른 메시지 트리입니다. 결과의 행 수는 FROM절의 모든 필드 참조 및 테이블 참조에 의해 지시되고 WHERE절에 의해 필터링되는 모든 "행"의 총합이며 WHERE절이 TRUE로 평가되는 필드만 포함됩니다.
SELECT 함수의 리턴 값은 스칼라일 수도 있습니다(ITEM 선택사항 참조).
일반적으로 SelectClause와 WHERE 절 표현식은 모두 상관 변수를 사용하여 "열" 값(즉, 입력 메시지 트리의 필드)에 액세스한 다음 입력 메시지의 데이터를 포함하는 새 메시지 트리를 빌드합니다. 상관 변수는 AS CorrelationName 절에서 지정된 이름으로 참조되거나 AS 절이 지정되지 않은 경우 FROM FieldReference의 마지막 이름(즉, 마지막 점 뒤의 이름)으로 참조됩니다.
필드 참조가 실제로 TableReference인 경우 조작은 매우 유사합니다. 이 경우 입력은 실제 데이터베이스 테이블이므로 데이터베이스에서 지원하는 플랫 구조로 제한됩니다. 그러나 결과 트리는 제한되지 않습니다.
FROM 절에 둘 이상의 필드 참조가 있는 경우 가장 오른쪽 참조는 각 행을 통해 가장 오른쪽에서 두 번째 참조로 진행합니다. 따라서 결과의 총 행 수는 각 테이블의 행 수의 결과입니다. 이러한 선택을 조인이라고 하며 주로 결과에서 대부분의 행을 제외하는 WHERE 절을 사용합니다. 조인은 주로 메시지에 데이터베이스 데이터를 추가하는 데 사용됩니다.
다음 예는 "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 절은 AS 절의 대안입니다. SelectClause 표현식의 결과(행이어야 함)를 현재 새 행의 하위가 아니라 행 자체에 지정합니다. 그러면 표현식의 행 결과가 SELECT에서 생성되는 행으로 병합됩니다. 이는 AS절과 다릅니다. AS절은 결과를 추가하기 전에 항상 하나 이상의 하위 요소를 생성하는 반면 INSERT는 아무것도 생성하지 않습니다. 추가 폴더 없이 데이터를 병합할 수 있기 때문에 INSERT는 다른 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를 포함하여 선언된 상관 이름 및 선언된 변수나 상수를 나타낼 수 있습니다.
FROM 절 FieldReference는 임의의 표현식을 포함할 수 있습니다(예: Database.{DataSource}.{Schema}.Table1).
필드, 데이터 소스, 스키마 또는 테이블 이름을 런타임에서 계산할 수 있습니다.
WHERE 절 표현식은 임의 결합으로 브로커의 연산자와 기능 중 하나를 사용할 수 있습니다. 표현식은 테이블의 열, 메시지 필드 및 선언된 변수나 상수를 나타낼 수 있습니다.
그러나 브로커는 표현식을 조사하고 데이터베이스에서 전체 표현식을 평가할 수 있는지 여부를 결정하여 WHERE 절 표현식을 처리합니다. 전체 표현식을 평가할 수 있는 경우, 데이터베이스에 제공됩니다. 데이터베이스에서 평가할 수 있으려면, 데이터베이스에서 지원하는 함수와 연산자만을 사용해야 합니다.
그러나 WHERE 절은 SELECT를 포함하여 선언된 메시지 필드, 상관 이름 및 기타 선언된 변수나 범위 안의 상수를 나타낼 수 있습니다.
SELECT와 함께 THE 함수(목록의 첫 번째 요소를 리턴함)를 사용하여 목록이 아닌 결과를 생성할 수 있습니다. 예를 들면, SELECT 쿼리가 하나의 항목만 리턴해야 하는 경우에 유용합니다. 특히 ITEM과 함께 유용합니다(ITEM 선택사항 참조).