DocumentDB SQL – Consultas SQL compuestas

Consulta compuesta le permite combinar datos de consultas existentes y luego aplicar filtros, agregados, etc. antes de presentar los resultados del informe que muestran el conjunto de datos combinado. Una consulta compuesta recupera varios niveles de información relacionada de consultas existentes y presenta los datos combinados como un único resultado de consulta plana.

Al usar una consulta compuesta, también tiene la opción:

  • Seleccione la opción de poda de SQL para eliminar tablas y campos innecesarios según la selección de atributos del usuario.

  • Establezca las cláusulas ORDER BY y GROUP BY.

  • Establezca la cláusula WHERE como filtro en el conjunto de resultados de una consulta compuesta.

Los operadores anteriores se pueden estructurar para formar consultas más potentes. Dado que DocumentDB admite colecciones anidadas, la composición se puede combinar o anidar.

Considere los siguientes documentos para este ejemplo.

AndersenFamilia el documento tiene este aspecto.

{ 
   "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 el documento tiene este aspecto.

{ 
   "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 
} 

WakefieldFamilia el documento tiene este aspecto.

{ 
   "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 
} 

Echemos un vistazo a un ejemplo de una consulta compuesta.

Consulta compuesta

A continuación se muestra una consulta que recuperará la identificación y la ubicación de la familia donde nació el primer hijo. nombre de pila esta es Michelle.

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

Cuando se ejecuta la consulta anterior, da el siguiente resultado.

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

Veamos otro ejemplo de consulta compuesta.

Consultas compuestas

A continuación se muestra una consulta que devolverá todos los documentos en los que el primer niño tenga una calificación superior a 3.

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

Cuando se ejecuta la consulta anterior, da el siguiente resultado.

[ 
   { 
      "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/" 
   } 
]	  

Echemos un vistazo a ejemplo consultas anidadas.

Consultas anidadas

A continuación se muestra una consulta que iterará a través de todos los padres y luego devolverá un documento donde apellido Herrero.

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

Cuando se ejecuta la consulta anterior, da el siguiente resultado.

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

consideremos otro ejemplo consulta anidada.

Consulta anidada

A continuación se muestra una consulta que devolverá todos apellido

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

Cuando se ejecuta la consulta anterior, da el siguiente resultado.

[ 
   "Wakefield", 
   "Miller", 
   "Smith", 
   "Curtis" 
]

🚫