Utiliser la clause JOIN
La clause JOIN est utilisée pour effectuer une jointure sur deux tableaux, en respectant une condition.
La clause JOIN doit être utilisée après une clause FROM ou UNNEST. Le mot-clé JOIN est suivi d'une expression retournant un tableau et du mot-clé ON introduisant l'expression à utiliser comme condition :
JOIN expression ON condition_expression
La condition doit être une expression simple ou conditionnelle retournant un booléen. Par exemple :
FROM customers AS c
JOIN orders AS o ON c.custid == o.custid
La clause JOIN peut contenir les mots-clés AS et INDEX décrits dans Utiliser la clause FROM.
Par défaut, le mot-clé JOIN effectue une jointure interne, mais vous pouvez spécifier le type de jointure à utiliser :
- La clause INNER JOIN effectue une jointure uniquement sur les éléments respectant la condition dans les deux tableaux.
- La jointure externe à gauche LEFT OUTER JOIN retourne tous les éléments du tableau dans la clause FROM ou UNNEST et effectue une jointure sur les éléments du tableau dans la clause JOIN respectant la condition.
Par exemple, avec l'entrée suivante :
{
"customers": [
{
"custid": "1234",
"name": "Jack Smith"
},
{
"custid": "5678",
"name": "Jane Smith"
},
{
"custid": "9874",
"name": "John Doe"
}
],
"orders": [
{
"orderid": "abc-6511",
"custid":"1234"
},
{
"orderid": "def-6872",
"custid":"5678"
}
]
}
La même requête avec un type de jointure différent retourne des résultats différents :
- La jointure interne INNER JOIN retourne uniquement les client·es associé·es à une commande :
FROM customers AS c INNER JOIN orders AS o ON c.custid == o.custid SELECT { name, orderid }
[ { "name":"Jack Smith", "orderid":"abc-6511" }, { "name":"Jane Smith", "orderid":"def-6872" } ]
- La jointure externe à gauche LEFT OUTER JOIN retourne tous les client·es et ignore l'élément orderid lorsqu'aucune commande n'est associée au client ou à la cliente :
FROM customers AS c LEFT OUTER JOIN orders AS o ON c.custid == o.custid SELECT { name, orderid }
[ { "name":"Jack Smith", "orderid":"abc-6511" }, { "name":"Jane Smith", "orderid":"def-6872" }, { "name":"John Doe" } ]
Note InformationsRemarque : Dans cet exemple, les éléments utilisés dans la condition ont le même nom dans les deux tableaux. Pour éviter les problèmes avec les chemins relatifs, vous devez définir un alias pour chaque tableau ou utiliser des chemins absolus pour faire référence à l'élément. Par exemple :
INNER JOIN orders ON input.customers.custid == input.orders.custid