Учебники

DocumentDB SQL — составные SQL-запросы

Составной запрос позволяет объединять данные из существующих запросов, а затем применять фильтры, агрегаты и т. Д. Перед представлением результатов отчета, которые показывают объединенный набор данных. Составной запрос извлекает несколько уровней связанной информации по существующим запросам и представляет объединенные данные в виде единого и сведенного результата запроса.

Используя составной запрос, вы также можете:

  • Выберите параметр сокращения SQL, чтобы удалить ненужные таблицы и поля в зависимости от пользовательских атрибутов.

  • Установите предложения ORDER BY и GROUP BY.

  • Установите предложение WHERE в качестве фильтра для результирующего набора составного запроса.

Выберите параметр сокращения SQL, чтобы удалить ненужные таблицы и поля в зависимости от пользовательских атрибутов.

Установите предложения ORDER BY и GROUP BY.

Установите предложение WHERE в качестве фильтра для результирующего набора составного запроса.

Вышеуказанные операторы могут быть составлены для формирования более мощных запросов. Поскольку DocumentDB поддерживает вложенные коллекции, композиция может быть объединена или вложена.

Давайте рассмотрим следующие документы для этого примера.

Документ AndersenFamily выглядит следующим образом.

{ 
   "id": "AndersenFamily", 
   "lastName": "Andersen", 
	
   "parents": [ 
      { "firstName": "Thomas", "relationship":  "father" }, 
      { "firstName": "Mary Kay", "relationship":  "mother" } 
   ],
   
   "children": [ 
      { 
         "firstName": "Henriette Thaulow", 
         "gender": "female", 
         "grade": 5, 
         "pets": [ { "givenName": "Fluffy", "type":  "Rabbit" } ] 
      } 
   ],
   
   "location": { "state": "WA", "county": "King", "city": "Seattle" }, 
   "isRegistered": true 
}

Документ SmithFamily заключается в следующем.

{ 
   "id": "SmithFamily", 
	
   "parents": [ 
      { "familyName": "Smith", "givenName": "James" }, 
      { "familyName": "Curtis", "givenName": "Helen" } 
   ],
   
   "children": [ 
      { 
         "givenName": "Michelle", 
         "gender": "female", 
         "grade": 1 
      }, 
		
      { 
         "givenName": "John", 
         "gender": "male", 
         "grade": 7, 
			
         "pets": [ 
            { "givenName": "Tweetie", "type": "Bird" } 
         ] 
      } 
   ],
   
   "location": { 
      "state": "NY", 
      "county": "Queens", 
      "city": "Forest Hills" 
   },
   
   "isRegistered": true 
} 

Документ WakefieldFamily работает следующим образом.

{ 
   "id": "WakefieldFamily", 
	
   "parents": [ 
      { "familyName": "Wakefield", "givenName": "Robin" }, 
      { "familyName": "Miller", "givenName": "Ben" } 
   ],
   
   "children": [ 
      { 
         "familyName": "Merriam", 
         "givenName": "Jesse", 
         "gender": "female", 
         "grade": 6,
			
         "pets": [ 
            { "givenName": "Charlie Brown", "type": "Dog" }, 
            { "givenName": "Tiger", "type": "Cat" }, 
            { "givenName": "Princess", "type": "Cat" } 
         ] 
      },
		
      { 
         "familyName": "Miller", 
         "givenName": "Lisa", 
         "gender": "female", 
         "grade": 3,
			
         "pets": [ 
            { "givenName": "Jake", "type": "Snake" } 
         ] 
      } 
   ],
   
   "location": { "state": "NY", "county": "Manhattan", "city": "NY" }, 
   "isRegistered": false 
} 

Давайте посмотрим на пример каскадного запроса.

Каскадный запрос

Ниже приведен запрос, который будет извлекать идентификатор и местоположение семьи, в которой первый заданный имя ребенка — Мишель.

SELECT f.id,f.location 
FROM Families f 
WHERE f.children[0].givenName = "Michelle"

Когда вышеуказанный запрос выполняется, он производит следующий вывод.

[
   { 
      "id": "SmithFamily", 
      "location": { 
         "state": "NY", 
         "county": "Queens", 
         "city": "Forest Hills" 
      }
   }
]

Давайте рассмотрим другой пример каскадного запроса.

Объединенные запросы

Ниже приведен запрос, который вернет все документы, в которых первый дочерний класс превышает 3.

SELECT * 
FROM Families f 
WHERE ({grade: f.children[0].grade}.grade > 3)

Когда вышеуказанный запрос выполняется, он производит следующий вывод.

[ 
   { 
      "id": "WakefieldFamily", 
      "parents": [ 
         { 
            "familyName": "Wakefield", 
            "givenName": "Robin" 
         },
		
         { 
            "familyName": "Miller", 
            "givenName": "Ben"
         } 
      ],
	  
      "children": [ 
         { 
            "familyName": "Merriam", 
            "givenName": "Jesse", 
            "gender": "female", 
            "grade": 6,
				
            "pets": [ 
               { 
                  "givenName": "Charlie Brown", 
                  "type": "Dog" 
               },
				
               { 
                  "givenName": "Tiger", 
                  "type": "Cat" 
               },
				
               { 
                  "givenName": "Princess", 
                  "type": "Cat" 
               } 
            ] 
         }, 
			
         { 
            "familyName": "Miller", 
            "givenName": "Lisa", 
            "gender": "female", 
            "grade": 3,
				
            "pets": [ 
               { 
                  "givenName": "Jake", 
                  "type": "Snake" 
               } 
            ] 
         } 
      ],
	  
      "location": { 
         "state": "NY", 
         "county": "Manhattan",
         "city": "NY" 
      },
	  
      "isRegistered": false, 
      "_rid": "Ic8LAJFujgECAAAAAAAAAA==", 
      "_ts": 1450541623, 
      "_self": "dbs/Ic8LAA==/colls/Ic8LAJFujgE=/docs/Ic8LAJFujgECAAAAAAAAAA==/", 
      "_etag": "\"00000500-0000-0000-0000-567582370000\"", 
      "_attachments": "attachments/" 
   },
	
   { 
      "id": "AndersenFamily", 
      "lastName": "Andersen",
		
      "parents": [ 
         { 
            "firstName": "Thomas", 
            "relationship": "father" 
         },
			
         { 
            "firstName": "Mary Kay", 
            "relationship": "mother" 
         } 
      ],
	  
      "children": [ 
         { 
            "firstName": "Henriette Thaulow", 
            "gender": "female", 
            "grade": 5,
				
            "pets": [ 
               { 
                  "givenName": "Fluffy", 
                  "type": "Rabbit" 
               } 
            ] 
         } 
      ],
	  
      "location": { 
         "state": "WA", 
         "county": "King", 
         "city": "Seattle"
      },
   
      "isRegistered": true, 
      "_rid": "Ic8LAJFujgEEAAAAAAAAAA==", 
      "_ts": 1450541624, 
      "_self": "dbs/Ic8LAA==/colls/Ic8LAJFujgE=/docs/Ic8LAJFujgEEAAAAAAAAAA==/", 
      "_etag": "\"00000700-0000-0000-0000-567582380000\"", 
      "_attachments": "attachments/" 
   } 
]	  

Давайте посмотрим на пример вложенных запросов.

Вложенные Запросы

Ниже приведен запрос, который будет выполнять итерацию всех родителей, а затем возвращать документ, в котором familyName — Смит.

SELECT * 
FROM p IN Families.parents 
WHERE p.familyName = "Smith"

Когда вышеуказанный запрос выполняется, он производит следующий вывод.

[ 
   { 
      "familyName": "Smith", 
      "givenName": "James" 
   } 
]

Давайте рассмотрим другой пример вложенного запроса.

Вложенный запрос

Ниже приведен запрос, который вернет все фамилии .

SELECT VALUE p.familyName
FROM Families f 
JOIN p IN f.parents

Когда вышеуказанный запрос выполняется, он производит следующий вывод.