SQL에서 기본 표현식 사용

예제와 함께 따르려면 쿼리를 실행할 샘플 데이터를 참조하여 샘플 데이터를 보고 OCI 콘솔을 사용하여 예제 테이블을 생성하고 JSON 파일을 사용하여 데이터를 로드하는 방법을 알아봅니다.

괄호로 묶인 표현식

괄호로 묶인 표현식은 주로 연산자 간의 기본 우선 순위를 변경하는 데 사용됩니다. 또한 구문 모호성을 유발하는 방식으로 표현식을 혼합하는 구문 보조 수단으로도 사용됩니다.

예: JFK에 탑승하고 JFK를 통과하며 목적지가 MAD 또는 VIE인 승객의 성명, 태그 번호 및 경로 상세내역을 가져옵니다.
SELECT fullName, bag.bagInfo.tagNum, 
bag.bagInfo.routing, 
bag.bagInfo[].flightLegs[].fltRouteDest 
FROM BaggageInfo bag 
WHERE bag.bagInfo.flightLegs[].fltRouteSrc=any "JFK" AND 
(bag.bagInfo[].flightLegs[].fltRouteDest=any "MAD" OR
bag.bagInfo[].flightLegs[].fltRouteDest=any "VIE" )

설명: 여객의 전체 이름, 태그 번호 및 경로 지정 세부정보를 인출하려고 합니다. 첫 번째 필터 조건은 탑승 지점 / 이동이 JFK라는 것입니다. 이 조건이 충족되면 두번째 필터 조건은 대상이 MAD 또는 VIE라는 것입니다. OR 조건을 사용하여 대상 값을 필터링합니다.

출력:
{"fullName":"Dierdre Amador","tagNum":"17657806240229","routing":"JFK/MAD","fltRouteDest":"MAD"}
{"fullName":"Rosalia Triplett","tagNum":"17657806215913","routing":"JFK/IST/VIE","fltRouteDest":["IST","VIE"]}
{"fullName":"Kendal Biddle","tagNum":"17657806296887","routing":"JFK/IST/VIE","fltRouteDest":["IST","VIE"]}

Case 표현식

검색된 CASE 식은 기존 프로그래밍 언어의 if-then-else 문과 유사합니다. 이 절은 여러 WHEN-THEN 쌍으로 구성되며 그 뒤에 끝에 선택적인 ELSE 절이 옵니다. 각 WHEN 표현식은 조건입니다. 즉, BOOLEAN을 반환해야 합니다. THEN 표현식과 ELSE 표현식은 임의의 항목 시퀀스를 반환할 수 있습니다. CASE 식은 먼저 WHEN 표현식을 위에서 아래로 평가하여 true를 반환하는 첫번째 표현식까지 평가합니다. true를 반환하는 i-th WHEN 표현식인 경우 i-th THEN 표현식이 평가되고 그 결과는 전체 CASE 표현식의 결과입니다. WHEN 표현식이 true를 반환하지 않으면 ELSE가 있으면 표현식이 평가되고 결과는 전체 CASE 표현식의 결과이고, 그렇지 않으면 CASE 표현식의 결과가 빈 시퀀스입니다.

예:
SELECT
    fullName,
    CASE
        WHEN NOT exists bag.bagInfo.flightLegs[0]
        THEN "you have no bag info"
        WHEN NOT exists bag.bagInfo.flightLegs[1]
        THEN "you have one hop"
        WHEN NOT exists bag.bagInfo.flightLegs[2]
        THEN "you have two hops."
        ELSE "you have three hops."
    END AS NUMBER_HOPS
FROM BaggageInfo bag WHERE ticketNo=1762340683564

설명: CASE 문을 사용하여 승객 bagInfo에 대한 이동 수를 확인하려고 합니다. flightLegs 배열에 요소가 없으면 승객에게 가방 데이터가 없습니다. flightLegs 배열에 요소가 하나만 있는 경우 전송 지점이 하나만 있습니다. 마찬가지로 flightLegs 배열에 두 개의 요소가 있는 경우 두 개의 홉이 있습니다. 그렇지 않으면 세 가지 전송 지점이 있습니다. 여기서는 가방이 최대 세 개의 전송 지점/홉을 가질 수 있다고 가정합니다.

출력:
{"fullName":"Mary Watson","NUMBER_HOPS":"you have two hops."}
예 2: 기존 값이 문자열이 아닌 경우 승객의 tagNum를 업데이트하도록 시스템에 알리는 질의를 작성합니다.
SELECT bag.bagInfo[].tagNum,
CASE
   WHEN bag.bagInfo[0].tagNum is of type (NUMBER)
   THEN "Tagnumber is not a STRING. Update the data"
   ELSE "Tagnumber has correct datatype"
   END AS tag_NUM_TYPE
FROM BaggageInfo bag 

설명: bagInfo 스키마에 있는 승객의 tagNum은 STRING 데이터 유형입니다. 그러나 응용 프로그램이 실수로 NUMBER 값을 tagNum 값으로 사용할 수도 있습니다. 질의는 "is of type" 연산자를 사용하여 이를 캡처하고 기존 값이 문자열이 아닌 경우 시스템에 tagNum를 업데이트하라는 메시지를 표시합니다.

출력(간단히 표시할 행은 거의 없습니다.)
{"tagNum":"17657806240001","tag_NUM_TYPE":"Tagnumber has correct datatype"}
{"tagNum":"17657806224224","tag_NUM_TYPE":"Tagnumber has correct datatype"}
{"tagNum":17657806243578,"tag_NUM_TYPE":"Tagnumber is not a STRING. Update the data"}
{"tagNum":"1765780623244","tag_NUM_TYPE":"Tagnumber has correct datatype"}

Cast Expression

캐스트 표현식은 가능한 경우 입력 시퀀스의 항목에서 지정된 대상 유형의 새 항목을 생성합니다. 예를 들어, CAST 표현식을 사용하여 STRING을 TIMESTAMP(0)로 변환할 수 있습니다.

CAST 표현식에 이어지는 규칙:
  • 입력 항목의 유형이 대상 항목 유형과 같으면 데이터형 변환은 no-op입니다. 입력 항목 자체가 반환됩니다.
  • 대상 유형이 JSON 이외의 와일드카드 유형이고 입력 항목의 유형이 와일드카드 유형의 하위 유형인 경우 데이터형 변환은 no-op입니다.
  • 대상 유형이 JSON인 경우 입력 항목이 비JSON 기본 유형인 경우 오류가 발생합니다.
  • 대상 유형이 배열 유형인 경우 입력 항목이 배열이 아니면 오류가 발생합니다.
  • 대상 유형이 문자열인 경우 입력 항목의 유형이 임의일 수 있습니다. 즉, 모든 항목을 문자열로 변환할 수 있습니다. 시간 기록의 경우 문자열 값은 UTC이고 형식은 uuuu-MM-dd['T'HH:mm:ss]입니다.
  • 대상 유형이 문자열이 아닌 원자 유형인 경우 입력 항목도 원자여야 합니다.
      • 정수와 길이는 시간 기록으로 변환할 수 있습니다. 입력 값은 1970년 1월 1일, 00:00:00 GMT 이후(밀리초) 수로 해석됩니다.
      • 문자열 항목은 다른 모든 원자 유형으로 변환할 수 있습니다. 데이터형 변환 성공 여부는 실제 문자열 값을 대상 유형의 도메인에 속하는 값으로 구문 분석할 수 있는지 여부에 따라 달라집니다.
      • 시간 기록 항목은 모든 시간 기록 유형으로 변환할 수 있습니다. 대상 유형의 전체 자릿수가 입력 항목보다 작으면 결과 시간 기록은 대상 전체 자릿수의 입력 시간 기록에 가장 가까운 시간 기록입니다.
  • STRING을 TIMESTAMP로 변환하려면 입력에 ISO-8601 형식의 STRING 값이 있으면 SQL 런타임에 의해 TIMESTAMP 데이터 유형으로 자동으로 변환됩니다.

    주:

    ISO8601에서는 날짜, 시간 및 기간을 나타내는 국제적으로 허용되는 방법을 설명합니다.

    Syntax: Date with time: YYYY-MM-DDThh:mm:ss[.s[s[s[s[s[s]]]]][Z|(+|-)hh:mm]

    설명
    • YYYY는 연도를 소수점 네 자리로 지정합니다.
    • MM은 월을 소수점 이하 2자리(00~12)로 지정합니다.
    • DD는 00~31의 소수점 두 자리 숫자로 일을 지정합니다.
    • hh는 00 ~ 23의 소수점 두 자리 숫자로 시를 지정합니다.
    • mm은 분을 소수점 이하 2자리(00~59)로 지정합니다.
    • ss[.s[s[s[s]]]]]는 초를 소수점 2자리(00~59자리)로 지정하며, 선택적으로 그 뒤에 소수점과 소수점 1~6자리(초의 소수 부분을 나타냄)가 옵니다.
    • Z는 UTC 시간(시간대 0)을 지정합니다. +00:00으로 지정할 수도 있지만 -00:00으로 지정할 수는 없습니다.
    • (+|-)hh:mm은 시간대를 UTC와의 차이로 지정합니다. + 또는 - 중 하나가 필요합니다.
예 1: 예약 코드가 DN3I4Q인 승객에 대한 부대 도착 일자를 TIMESTAMP(3) 형식으로 가져옵니다.
SELECT CAST (bag.bagInfo.bagArrivalDate AS Timestamp(3))
AS BAG_ARRIVING_DATE 
FROM BaggageInfo bag WHERE bag.confNo=DN3I4Q

설명: bagArrivalDate이 STRING입니다. CAST를 사용하여 이 필드를 TIMESTAMP 형식으로 변환합니다.

출력:
{"BAG_ARRIVING_DATE":"2019-02-15T21:21:00.000Z"}
예 2: 2019년 이후에 출하된 모든 고객 수하물의 성명 및 태그 번호를 가져옵니다.
SELECT fullName, bag.ticketNo, 
bag.bagInfo[].bagArrivalDate 
FROM BaggageInfo bag WHERE
exists bag.bagInfo[$element.bagArrivalDate >="2019-01-01T00:00:00"]

설명: 2019년 이후 배송된 수하물의 세부정보를 필터링하고 표시하려고 합니다. flightLegs 배열의 모든 요소에 대한 가방 도착 날짜는 지정된 시간 기록(2019-01-01T00:00:00)과 비교됩니다. 여기서 주조는 bagArrivalDate 가 STRING이므로 암시적이며 정적 시간 기록 값과 직접 비교됩니다. 암시적 데이터형 변환을 수행할 수 있는 경우에는 명시적 CAST 함수가 필요하지 않습니다. 그러나 데이터는 YYYY-MM-DDTHH:MI:SS 형식이어야 합니다. 그런 다음 EXISTS 조건을 사용하여 이 시간 기록 조건에 대해 bagInfo가 있는지 확인합니다.

출력:
{"fullName":"Kendal Biddle","ticketNo":1762377974281,"bagArrivalDate":"2019-03-05T12:00:00Z"}
{"fullName":"Lucinda Beckman","ticketNo":1762320569757,"bagArrivalDate":"2019-03-12T15:05:00Z"}
{"fullName":"Adelaide Willard","ticketNo":1762392135540,"bagArrivalDate":"2019-02-15T21:21:00Z"}
{"fullName":"Raymond Griffin","ticketNo":1762399766476,"bagArrivalDate":"2019-02-03T08:09:00Z"}
{"fullName":"Elane Lemons","ticketNo":1762324912391,"bagArrivalDate":"2019-03-15T10:13:00Z"}
{"fullName":"Zina Christenson","ticketNo":1762390789239,"bagArrivalDate":"2019-02-04T10:08:00Z"}
{"fullName":"Zulema Martindale","ticketNo":1762340579411,"bagArrivalDate":"2019-02-25T20:15:00Z"}
{"fullName":"Dierdre Amador","ticketNo":1762376407826,"bagArrivalDate":"2019-03-07T13:51:00Z"}
{"fullName":"Henry Jenkins","ticketNo":176234463813,"bagArrivalDate":"2019-03-02T13:18:00Z"}
{"fullName":"Rosalia Triplett","ticketNo":1762311547917,"bagArrivalDate":"2019-02-12T07:04:00Z"}
{"fullName":"Lorenzo Phil","ticketNo":1762320369957,"bagArrivalDate":["2019-03-12T15:05:00Z","2019-03-12T16:25:00Z"]}
{"fullName":"Gerard Greene","ticketNo":1762341772625,"bagArrivalDate":"2019-03-07T16:01:00Z"}
{"fullName":"Adam Phillips","ticketNo":1762344493810,"bagArrivalDate":"2019-02-01T16:13:00Z"}
{"fullName":"Doris Martin","ticketNo":1762355527825,"bagArrivalDate":"2019-03-22T10:17:00Z"}
{"fullName":"Joanne Diaz","ticketNo":1762383911861,"bagArrivalDate":"2019-02-16T16:13:00Z"}
{"fullName":"Teena Colley","ticketNo":1762357254392,"bagArrivalDate":"2019-02-13T11:15:00Z"}
{"fullName":"Michelle Payne","ticketNo":1762330498104,"bagArrivalDate":"2019-02-02T23:59:00Z"}
{"fullName":"Mary Watson","ticketNo":1762340683564,"bagArrivalDate":"2019-03-14T06:22:00Z"}
{"fullName":"Omar Harvey","ticketNo":1762348904343,"bagArrivalDate":"2019-03-02T16:09:00Z"}
{"fullName":"Fallon Clements","ticketNo":1762350390409,"bagArrivalDate":"2019-02-21T14:08:00Z"}
{"fullName":"Lisbeth Wampler","ticketNo":1762355854464,"bagArrivalDate":"2019-02-10T10:01:00Z"}

시퀀스 변환 표현식

시퀀스 변환 표현식은 시퀀스를 다른 시퀀스로 변환합니다. 구문상 이름은 seq_transform인 함수처럼 보입니다. 첫번째 인수는 변형될 시퀀스(입력 시퀀스)를 생성하는 표현식이고 두번째 인수는 입력 시퀀스의 각 항목에 대해 계산되는 "매퍼" 표현식입니다. seq_transform 표현식의 결과는 매퍼 표현식의 각 평가에 의해 생성된 시퀀스의 연결입니다. 매퍼 표현식은 $ 변수를 통해 현재 입력 항목에 액세스할 수 있습니다.

예:ticketNo에 대해 해당 ticketNo의 수하물에 대해 수행된 모든 작업을 포함하는 플랫 배열을 인출합니다.
SELECT seq_transform(l.bagInfo[],
      seq_transform(
          $sq1.flightLegs[],
          seq_transform(
              $sq2.actions[],
              {
                "at" : $sq3.actionAt,
                "action" : $sq3.actionCode,
                "flightNo" : $sq2.flightNo,
                "tagNum" : $sq1.tagNum
              }
          )
      )
  ) AS actions
FROM baggageInfo l WHERE ticketNo=1762340683564

설명: 시퀀스 변환 표현식을 사용하여 테이블 행에 저장된 JSON 문서를 변환할 수 있습니다. 이 경우 서로 중첩된 여러 시퀀스 변환 표현식을 사용하는 경우가 많습니다. 여기서 내부 시퀀스 변환의 매퍼 표현식은 외부 시퀀스 변환의 현재 항목에 액세스해야 할 수 있습니다. 이를 허용하기 위해 각 시퀀스 변환 표현식 'S'는 이름이 $sqN인 변수를 선언합니다. 여기서 N은 외부 시퀀스 변환 표현식 내의 표현식 S 중첩 레벨입니다. $sqN는 기본적으로 $의 동의어입니다. 즉, 입력 표현식 S에서 반환된 항목에 바인드됩니다. 그러나 $sqNS 표현식 내에 중첩될 수 있는 다른 시퀀스 변환 표현식에서 액세스할 수 있습니다.

출력:
{ 
 "actions":[ 
   {"action":"ONLOAD to HKG","at":"YYZ","flightNo":"BM267","tagNum":"17657806299833"},
   {"action":"BagTag Scan at YYZ","at":"YYZ","flightNo":"BM267","tagNum":"17657806299833"},
   {"action":"Checkin at YYZ","at":"YYZ","flightNo":"BM267","tagNum":"17657806299833"},
   {"action":"Offload to Carousel at BLR","at":"BLR","flightNo":"BM115","tagNum":"17657806299833"},
   {"action":"ONLOAD to BLR","at":"HKG","flightNo":"BM115","tagNum":"17657806299833"},
   {"action":"OFFLOAD from HKG","at":"HKG","flightNo":"BM115","tagNum":"17657806299833"} 
 ]
}

QueryRequest API를 사용하는 SQL 표현식 예제

QueryRequest API를 사용하고 SQL 표현식을 사용하여 NoSQL 테이블에서 데이터를 필터링할 수 있습니다.

질의를 실행하려면 NoSQLHandle.query() API를 사용합니다.

SQLExpressions.java 예제에서 전체 코드 를 다운로드하십시오.
 //Fetch rows from the table
private static void fetchRows(NoSQLHandle handle,String sqlstmt) throws Exception {
   try (
      QueryRequest queryRequest = new QueryRequest().setStatement(sqlstmt);
      QueryIterableResult results = handle.queryIterable(queryRequest)){
      for (MapValue res : results) {
         System.out.println("\t" + res);
      }
   }
} 
String paran_expr="SELECT fullName, bag.bagInfo.tagNum, bag.bagInfo.routing, "+
"bag.bagInfo[].flightLegs[].fltRouteDest FROM BaggageInfo bag WHERE "+
"bag.bagInfo.flightLegs[].fltRouteSrc=any \"SFO\" AND "+
"(bag.bagInfo[].flightLegs[].fltRouteDest=any \"ATH\" OR "+
"bag.bagInfo[].flightLegs[].fltRouteDest=any \"JTR\" )";
System.out.println("Using Paranthesized expression ");
fetchRows(handle,paran_expr);

String case_expr="SELECT fullName,"+
         "CASE WHEN NOT exists bag.bagInfo.flightLegs[0] "+
        "THEN \"you have no bag info\" "+
        "WHEN NOT exists bag.bagInfo.flightLegs[1] "+
        "THEN \"you have one hop\" "+
        "WHEN NOT exists bag.bagInfo.flightLegs[2] "+
        "THEN \"you have two hops.\" "+
        "ELSE \"you have three hops.\" "+
        "END AS NUMBER_HOPS "+
"FROM BaggageInfo bag WHERE ticketNo=1762341772625";
System.out.println("Using Case Expression ");
fetchRows(handle,case_expr);

String seq_trn_expr="SELECT seq_transform(l.bagInfo[],"+
                              "seq_transform("+
                                "$sq1.flightLegs[],"+
                                "seq_transform("+
                                  "$sq2.actions[],"+
                                  "{"+
                                   "\"at\" : $sq3.actionAt,"+
                                   "\"action\" : $sq3.actionCode,"+
                                   "\"flightNo\" : $sq2.flightNo,"+
                                   "\"tagNum\" : $sq1.tagNum"+
                                  "}"+
                               ")"+
                              ")"+
                           ") AS actions FROM baggageInfo l WHERE ticketNo=1762376407826";
System.out.println("Using Sequence Transform Expressions ");
fetchRows(handle,seq_trn_expr);

질의를 실행하려면 borneo.NoSQLHandle.query() 메소드를 사용합니다.

SQLExpressions.py 예제에서 전체 코드 를 다운로드하십시오.
# Fetch data from the table
def fetch_data(handle,sqlstmt):
   request = QueryRequest().set_statement(sqlstmt)
   print('Query results for: ' + sqlstmt)
   result = handle.query(request)
   for r in result.get_results():
      print('\t' + str(r))  
paran_expr = '''SELECT fullName, bag.bagInfo.tagNum, bag.bagInfo.routing,
                   bag.bagInfo[].flightLegs[].fltRouteDest FROM BaggageInfo bag
                   WHERE bag.bagInfo.flightLegs[].fltRouteSrc=any "SFO" AND
                   (bag.bagInfo[].flightLegs[].fltRouteDest=any "ATH" OR
                   bag.bagInfo[].flightLegs[].fltRouteDest=any "JTR" )'''
print('Using Paranthesized expression:')
fetch_data(handle,paran_expr)

case_expr = '''SELECT fullName,
    CASE
        WHEN NOT exists bag.bagInfo.flightLegs[0]
        THEN "you have no bag info"
        WHEN NOT exists bag.bagInfo.flightLegs[1]
        THEN "you have one hop"
        WHEN NOT exists bag.bagInfo.flightLegs[2]
        THEN "you have two hops."
        ELSE "you have three hops."
    END AS NUMBER_HOPS
    FROM BaggageInfo bag WHERE ticketNo=1762341772625'''
print('Using Case Expression:')
fetch_data(handle,case_expr)

seq_trn_expr = '''SELECT seq_transform(l.bagInfo[],
                     seq_transform(
                       $sq1.flightLegs[],
                         seq_transform(
                           $sq2.actions[],
                            {
                              "at" : $sq3.actionAt,
                              "action" : $sq3.actionCode,
                              "flightNo" : $sq2.flightNo,
                              "tagNum" : $sq1.tagNum
                            }
                        )
                    )
                ) AS actions FROM baggageInfo l WHERE ticketNo=1762376407826'''
print('Using Sequence Transform Expressions:')
fetch_data(handle,seq_trn_expr)

질의를 실행하려면 Client.Query 함수를 사용합니다.

SQLExpressions.go 예제에서 전체 코드 를 다운로드하십시오.
 //fetch data from the table
func fetchData(client *nosqldb.Client, err error, tableName string, querystmt string)(){
   prepReq := &nosqldb.PrepareRequest{
		Statement: querystmt,
   }
   prepRes, err := client.Prepare(prepReq)
   if err != nil {
      fmt.Printf("Prepare failed: %v\n", err)
      return
   }
   queryReq := &nosqldb.QueryRequest{
		 PreparedStatement: &prepRes.PreparedStatement,   }
   var results []*types.MapValue
   for {
      queryRes, err := client.Query(queryReq)
      if err != nil {
         fmt.Printf("Query failed: %v\n", err)
  	return
      }
      res, err := queryRes.GetResults()
      if err != nil {
         fmt.Printf("GetResults() failed: %v\n", err)
  	return
      }
      results = append(results, res...)
      if queryReq.IsDone() {
         break
      }
   }
   for i, r := range results {
      fmt.Printf("\t%d: %s\n", i+1, jsonutil.AsJSON(r.Map()))
   }
} 
paran_expr := `SELECT fullName, bag.bagInfo.tagNum, bag.bagInfo.routing,
                    bag.bagInfo[].flightLegs[].fltRouteDest FROM BaggageInfo bag
                    WHERE bag.bagInfo.flightLegs[].fltRouteSrc=any "SFO" AND
                    (bag.bagInfo[].flightLegs[].fltRouteDest=any "ATH" OR
                    bag.bagInfo[].flightLegs[].fltRouteDest=any "JTR" )`
fmt.Printf("Using Paranthesized expression:\n")
fetchData(client, err,tableName,paran_expr)

case_expr := `SELECT fullName,
                 CASE
         			WHEN NOT exists bag.bagInfo.flightLegs[0]
         			THEN "you have no bag info"
         			WHEN NOT exists bag.bagInfo.flightLegs[1]
         			THEN "you have one hop"
         			WHEN NOT exists bag.bagInfo.flightLegs[2]
         			THEN "you have two hops."
         			ELSE "you have three hops."
     				END AS NUMBER_HOPS
     				FROM BaggageInfo bag WHERE ticketNo=1762341772625`
fmt.Printf("Using Case Expression:\n")
fetchData(client, err,tableName,case_expr)

seq_trn_expr := `SELECT seq_transform(l.bagInfo[],
                      seq_transform(
                        $sq1.flightLegs[],
                          seq_transform(
                            $sq2.actions[],
                             {
                               "at" : $sq3.actionAt,
                               "action" : $sq3.actionCode,
                               "flightNo" : $sq2.flightNo,
                               "tagNum" : $sq1.tagNum
                             }
                         )
                     )
                 ) AS actions FROM baggageInfo l WHERE ticketNo=1762376407826`
fmt.Printf("Using Sequence Transform Expressions:\n")
fetchData(client, err,tableName,seq_trn_expr)

질의를 실행하려면 query 메소드를 사용합니다.

JavaScript: SQLExpressions.js 예제에서 SQLExpressions.js 전체 코드를 다운로드합니다.
  //fetches data from the table
async function fetchData(handle,querystmt) {
   const opt = {};
   try {
      do {
         const result = await handle.query(querystmt, opt);
         for(let row of result.rows) {
            console.log('  %O', row);
         }
         opt.continuationKey = result.continuationKey;
      } while(opt.continuationKey);
   } catch(error) {
      console.error('  Error: ' + error.message);
   }
}
TypeScript: SQLExpressions.ts 예제에서 SQLExpressions.ts 전체 코드를 다운로드합니다.
interface StreamInt {
   acct_Id: Integer;
   profile_name: String;
   account_expiry: TIMESTAMP;
   acct_data: JSON;
}
/* fetches data from the table */
async function fetchData(handle: NoSQLClient,querystmt: any) {
   const opt = {};
   try {
      do {
         const result = await handle.query<StreamInt>(querystmt, opt);
         for(let row of result.rows) {
            console.log('  %O', row);
         }
         opt.continuationKey = result.continuationKey;
      } while(opt.continuationKey);
   } catch(error) {
      console.error('  Error: ' + error.message);
   }
}
const paran_expr = `SELECT fullName, bag.bagInfo.tagNum, bag.bagInfo.routing,
                    bag.bagInfo[].flightLegs[].fltRouteDest FROM BaggageInfo bag
                    WHERE bag.bagInfo.flightLegs[].fltRouteSrc=any "SFO" AND
                    (bag.bagInfo[].flightLegs[].fltRouteDest=any "ATH" OR
                    bag.bagInfo[].flightLegs[].fltRouteDest=any "JTR" )`
console.log("Using Paranthesized expression");
await fetchData(handle,paran_expr);

const case_expr = `SELECT fullName,
                  CASE
                    WHEN NOT exists bag.bagInfo.flightLegs[0]
                    THEN "you have no bag info"
                    WHEN NOT exists bag.bagInfo.flightLegs[1]
                    THEN "you have one hop"
                    WHEN NOT exists bag.bagInfo.flightLegs[2]
                    THEN "you have two hops."
                    ELSE "you have three hops."
                  END AS NUMBER_HOPS
                  FROM BaggageInfo bag WHERE ticketNo=1762341772625`
console.log("Using Case Expression");
await fetchData(handle,case_expr);

const seq_trn_expr = `SELECT seq_transform(l.bagInfo[],
                      seq_transform(
                        $sq1.flightLegs[],
                        seq_transform(
                          $sq2.actions[],
                          {
                            "at" : $sq3.actionAt,
                            "action" : $sq3.actionCode,
                            "flightNo" : $sq2.flightNo,
                            "tagNum" : $sq1.tagNum
                          }
                      )
                  )
                ) AS actions FROM baggageInfo l WHERE ticketNo=1762376407826`
console.log("Using Sequence Transform Expressions");
await fetchData(handle,seq_trn_expr);

질의를 실행하려면 QueryAsync 메소드를 호출하거나 GetQueryAsyncEnumerable 메소드를 호출하고 결과 비동기 열거 가능을 반복할 수 있습니다.

SQLExpressions.cs 예제에서 전체 코드 를 다운로드하십시오.
private static async Task fetchData(NoSQLClient client,String querystmt){
   var queryEnumerable = client.GetQueryAsyncEnumerable(querystmt);
   await DoQuery(queryEnumerable);
}

private static async Task DoQuery(IAsyncEnumerable<QueryResult<RecordValue>> queryEnumerable){
   Console.WriteLine("  Query results:");
   await foreach (var result in queryEnumerable) {
      foreach (var row in result.Rows)
      {
         Console.WriteLine();
         Console.WriteLine(row.ToJsonString());
      }
   }
} 
private const string paran_expr =@"SELECT fullName, bag.bagInfo.tagNum, bag.bagInfo.routing,
                                         bag.bagInfo[].flightLegs[].fltRouteDest FROM BaggageInfo bag
                                         WHERE bag.bagInfo.flightLegs[].fltRouteSrc=any ""SFO"" AND
                                         (bag.bagInfo[].flightLegs[].fltRouteDest=any ""ATH"" OR
                                         bag.bagInfo[].flightLegs[].fltRouteDest=any ""JTR"" )";
Console.WriteLine("\nUsing Paranthesized expression:!");
await fetchData(client,paran_expr);

private const string case_expr =@"SELECT fullName,
                                        CASE
                                          WHEN NOT exists bag.bagInfo.flightLegs[0]
                                          THEN ""you have no bag info""
                                          WHEN NOT exists bag.bagInfo.flightLegs[1]
                                          THEN ""you have one hop""
                                          WHEN NOT exists bag.bagInfo.flightLegs[2]
                                          THEN ""you have two hops.""
                                          ELSE ""you have three hops.""
                                       END AS NUMBER_HOPS
                                       FROM BaggageInfo bag WHERE ticketNo=1762341772625";
Console.WriteLine("\nUsing Case Expression!");
await fetchData(client,case_expr);

private const string seq_trn_expr =@"SELECT seq_transform(l.bagInfo[],
                                           seq_transform(
                                             $sq1.flightLegs[],
                                             seq_transform(
                                                $sq2.actions[],
                                                {
                                                   ""at"" : $sq3.actionAt,
                                                   ""action"" : $sq3.actionCode,
                                                   ""flightNo"" : $sq2.flightNo,
                                                   ""tagNum"" : $sq1.tagNum
                                                }
                                               )
                                             )
                                           ) AS actions FROM baggageInfo l WHERE ticketNo=1762376407826" ;
Console.WriteLine("\nUsing Sequence Transform Expressions!");
await fetchData(client,seq_trn_expr);