# Utiliser la clause SELECT

La clause SELECT est utilisée pour définir les éléments à retourner comme résultat d'une requête.

Le mot-clé SELECT peut être suivi par :

* Une expression simple ou conditionnelle pour retourner une valeur unique, un enregistrement ou un tableau :
  ```
  SELECT expression          
  ```
* Un bloc pour retourner des paires clé-valeur. Vous pouvez utiliser un identifiant simple ou une expression d'attribution pour créer une nouvelle clé :
  ```
  SELECT {
  	identifier,
  	identifier = expression
  }
  ```

  L'expression utilisée comme valeur peut être une expression simple ou conditionnelle.
* Une sous-requête entre parenthèses pour retourner un résultat imbriqué comme résultat de la requête parente :
  ```
  SELECT (
     FROM identifier1
     SELECT {
        identifier2,
        identifier3
     }
  )
  ```
* Les identifiants, suivis par des sous-requêtes entre parenthèses, pour retourner le résultat de plusieurs requêtes en un enregistrement :
  ```
  SELECT {
  	identifier1 = (query1),
  	identifier2 = (query2)
  }
  ```

Note InformationsRemarque : Lorsque vous utilisez un seul identifiant, il référence un élément dans l'entrée. Le nom du champ de sortie sera le même que le nom du champ d'entrée.

Avec une sous-requête produisant un tableau, vous pouvez spécifier un index afin de retourner un élément spécifique depuis le tableau. L'index doit être entre crochets après la parenthèse fermante de la sous-requête :

```
SELECT ( FROM identifier1 SELECT { identifier2 } )[index]
```

Par exemple, avec les données d'entrée suivantes :

```
{
	"customers": [
		{
			"firstName": "John",
			"lastName": "Smith",
			"address": {
				"street": "690 River St.",
				"city": "Hanover, MA",
				"zipcode": "02340"
			},
			"orders": [
				{
					"order_id": "abc-12345",
					"items": [
						{
							"item_id": "97516848-jiargn",
							"quantity": 2
						}
					]
				}
			]
		},
		{
			"firstName": "Jane",
			"lastName": "Doe",
			"address": {
				"street": "420 Green St.",
				"city": "Boston, MA",
				"zipcode": "02115"
			},
			"orders": [
				{
					"order_id": "def-12345",
					"items": [
						{
							"item_id": "97516848-kftesn",
							"quantity": 3
						},
						{
							"item_id": "96946848-metasb",
							"quantity": 1
						}
					]
				}
			]
		}
	]
}
```

Vous pouvez utiliser une clause SELECT avec deux requêtes imbriquées pour retourner un enregistrement contenant un tableau de noms de client·es et le premier élément du tableau d'identifiants d'éléments :

```
SELECT {
 customers = (
  FROM customers AS c 
  SELECT { 
   name = concatWith(" ", c.firstName, c.lastName),
   c.address
  }
 ),
 items = (
  FROM customers AS c UNNEST c.orders AS o UNNEST o.items AS i 
  SELECT {i.item_id}
 )[0]
}
```

Cette requête retourne le résultat suivant :

```
{
	"customers": [
		{
			"name": "John Smith",
			"address": {
				"street": "690 River St.",
				"city": "Hanover, MA",
				"zipcode": "02340"
			}
		},
		{
			"name": "Jane Doe",
			"address": {
				"street": "420 Green St.",
				"city": "Boston, MA",
				"zipcode": "02115"
			}
		}
	],
	"items": {
		"item_id": "97516848-jiargn"
	}
}
```