Joins
La clause Joins de PostgreSQL est utilisée pour combiner les enregistrements de deux ou plusieurs tables dans une base de données. Un JOIN est un moyen de combiner des champs de deux tables en utilisant des valeurs communes à chacune.
Les types de jointures dans PostgreSQL sont :
- The CROSS JOIN
- The INNER JOIN
- The LEFT OUTER JOIN
- The RIGHT OUTER JOIN
- The FULL OUTER JOIN
Avant de poursuivre, considérons deux tables, COMPANY et DEPARTMENT. Nous avons déjà vu les instructions INSERT pour remplir la table SOCIÉTÉ. Supposons donc que la liste des enregistrements disponibles dans la table SOCIÉTÉ :
id | name | age | address | salary | join_date
----+-------+-----+-----------+--------+-----------
1 | Paul | 32 | California| 20000 | 2001-07-13
3 | Teddy | 23 | Norway | 20000 |
4 | Mark | 25 | Rich-Mond | 65000 | 2007-12-13
5 | David | 27 | Texas | 85000 | 2007-12-13
2 | Allen | 25 | Texas | | 2007-12-13
8 | Paul | 24 | Houston | 20000 | 2005-07-13
9 | James | 44 | Norway | 5000 | 2005-07-13
10 | James | 45 | Texas | 5000 | 2005-07-13
Une autre table est DEPARTMENT, à la définition suivante :
CREATE TABLE DEPARTMENT(
ID INT PRIMARY KEY NOT NULL,
DEPT CHAR(50) NOT NULL,
EMP_ID INT NOT NULL
);
Voici la liste des instructions INSERT pour alimenter la table DEPARTMENT :
INSERT INTO DEPARTMENT (ID, DEPT, EMP_ID)
VALUES (1, 'IT Billing', 1 );
INSERT INTO DEPARTMENT (ID, DEPT, EMP_ID)
VALUES (2, 'Engineering', 2 );
INSERT INTO DEPARTMENT (ID, DEPT, EMP_ID)
VALUES (3, 'Finance', 7 );
Finalement, nous avons la liste suivante d'enregistrements disponibles dans la table DEPARTMENT :
id | dept | emp_id
----+-------------+--------
1 | IT Billing | 1
2 | Engineering | 2
3 | Finance | 7
The CROSS JOIN
Un CROSS JOIN fait correspondre chaque ligne de la première table avec chaque ligne de la deuxième table. Si les tableaux d'entrée ont respectivement x
ety
colonnes, le tableau résultant aura x+y
colonnes. Comme les CROSS JOIN peuvent générer des tableaux extrêmement volumineux, il faut veiller à ne les utiliser que lorsque cela est approprié.
Voici la syntaxe d'un CROSS JOIN :
SELECT ... FROM table1 CROSS JOIN table2 ...
En se basant sur les tableaux ci-dessus, nous pouvons écrire un CROSS JOIN comme suit :
testdb=# SELECT EMP_ID, NAME, DEPT FROM COMPANY CROSS JOIN DEPARTMENT;
La requête donnée ci-dessus produira le résultat suivant :
emp_id| name | dept
------|-------|--------------
1 | Paul | IT Billing
1 | Teddy | IT Billing
1 | Mark | IT Billing
1 | David | IT Billing
1 | Allen | IT Billing
1 | Paul | IT Billing
1 | James | IT Billing
1 | James | IT Billing
2 | Paul | Engineering
2 | Teddy | Engineering
2 | Mark | Engineering
2 | David | Engineering
2 | Allen | Engineering
2 | Paul | Engineering
2 | James | Engineering
2 | James | Engineering
7 | Paul | Finance
7 | Teddy | Finance
7 | Mark | Finance
7 | David | Finance
7 | Allen | Finance
7 | Paul | Finance
7 | James | Finance
7 | James | Finance
The INNER JOIN
Besoin d'aide ?
Rejoignez notre communauté officielle et ne restez plus seul à bloquer sur un problème !