Ce cours sur le SQL a pour but de donner des bases pour quiconque voudrait avoir une vision globale sur ce sujet. Il permet d’avoir une vision globale sur comment lire une base de données et faire des requêtes. Cet article est le troisième d’une série de 5 articles et a pour vocation à présenter les jointures.

Ce cours est la suite de la partie 2, il va présenter les jointures en SQL. Si vous débutez totalement en SQL, commencez par la partie 1 !

Les jointures

Supposons qu’on a maintenant une seconde table appelée revenue, donnant le salaire annuel brut selon le numéro de sécurité sociale. On a donc 2 colonnes : 

  • Une première colonne secu qui est le numéro de sécurité
  • Une seconde colonne salaire qui est le salaire annuel brut

Grâce aux jointures, on va pouvoir faire le lien entre cette table et la table précédente à l’aide d’une clé de jointure. Une clé de jointure et un ensemble de règles entre les colonnes permettant de lier plusieurs tables entre elles. Ici par exemple, les deux tables ont en commun le numéro de sécurité sociale qui est un identifiant unique.
Voici la table revenue :

secusalaire
130 000
250 000
321 000
470 000
545 000
741 000

A noter : On n’a pas de salaire connu pour le numéro de sécurité sociale 6 et on n’a pas le nom ni le prénom du numéro de sécurité sociale 7 (cf la table de la partie 1)
On a différents types de jointures, qui vont maintenant être présentées.

Les différents type de jointure

  • LEFT JOIN : On garde tous les résultats de la table de gauche même si la clé de jointure n’est pas présente dans la table de droite
  • RIGHT JOIN : On garde tous les résultats de la table de droite même si la clé de jointure n’est pas présente dans la table de droite
  • INNER JOIN : On garde les résultats si la condition de jointure est vraie dans les 2 tables.
  • FULL JOIN : On garde les résultats si la condition de jointure est vraie d’un côté ou de l’autre. 
  • CROSS JOIN : Jointure permettant le produit cartésien entre deux tables. 

Un peu de mathématiques maintenant, définissons ce qu’est un produit cartésien.

Produit cartésien : Le produit cartésien de deux ensembles est l’ensemble des couples X et Y dont la première composante appartient à X et la seconde composante appartient à Y.

Concrètement, si on fait un CROSS JOIN entre une table qui a 10 lignes et une table qui a 50 lignes, on obtient une table de 10 x 50 = 500 lignes correspondant à tous les croisement possibles. 

L’opérateur LEFT JOIN

Voici un schéma pour bien se représenter le left join :

Left join

Admettons qu’on veuille récupérer les noms, prénom et salaires des personnes dont on connait nom et prénom. Voici la requête que l’on va faire :

SELECT 
	nom, prenom, salaire
FROM
	personnes
LEFT JOIN 
	revenue
ON 
	secu_sociale = secu

Voici le résultat de la requête SQL.

nomprenomsalaire
DuchenePierre30 000
DupontPaul50 000
DupontBaptiste21 000
DurandJean70 000
DurandJacques45 000
GirardBaptistenull

L’opérateur RIGHT JOIN

Voici un schéma représentant le right join :

Right join

On veut trouver les noms, prénom et salaires des personnes dont on connaît le salaire. Voici la requête SQL que l’on va faire pour cela :

SELECT 
	nom, prenom, salaire
FROM
	personnes
RIGHT JOIN 
	revenue
ON 
	secu_sociale = secu

Et voici ce que l’on récupère

nomprenomsalaire
DuchenePierre30 000
DupontPaul50 000
DupontBaptiste21 000
DurandJean70 000
DurandJacques45 000
nullnull41 000

L’opérateur FULL JOIN

Voici une représentation graphique du full join :

Full join

On veut trouver les noms, prénom et salaires des personnes dont on a au moins une information. Voici la requête SQL que l’on va faire pour cela :

SELECT 
	nom, prenom, salaire
FROM
	personnes
FULL JOIN 
	revenue
ON 
	secu_sociale = secu

On obtient alors :

nomprenomsalaire
DuchenePierre30 000
DupontPaul50 000
DupontBaptiste21 000
DurandJean70 000
DurandJacques45 000
GirardBaptistenull
nullnull41 000

L’opérateur INNER JOIN

Voici la représentation graphique de cet opérateur :

Inner join

On veut sélection les noms, prénom et salaires des personnes qui sont présentes dans les 2 tables

SELECT 
	nom, prenom, salaire
FROM
	personnes
INNER JOIN 
	revenue
ON 
	secu_sociale = secu

Et on obtient comme donc résultat de requête :

nomprenomsalaire
DuchenePierre30 000
DupontPaul50 000
DupontBaptiste21 000
DurandJean70 000
DurandJacques45 000

On a bien toutes les tables contenant toutes les informations.

L’opérateur UNION

Supposons maintenant qu’on dispose d’une autre partie de la table de base appelée personne2. Grâce à la fonction UNION, on peut rassembler les deux tables.

Voici la table personne2

secu_socialenomprenomville
4DupontPaulParisis
11DoeJohnLondres
12SmithJoshManchester

L’opérateur UNION ALL

Avec l’opérateur UNION ALL, on concatène à la suite les deux tables, sans se poser de questions 

SELECT
	*
FROM
	personne
UNION ALL
SELECT
	* 
FROM 
	personne2

Voici le résultat :

secu_socialenomprenomville
1DupontBaptisteParis
2DurandJeanMarseille
3DuchenePierreLyon
4DupontPaulParisis
5DurandJacquesMarseille
6GirardBaptisteParis
4DupontPaulParisis
11DoeJohnLondres
12SmithJoshManchester

L’opérateur UNION DISTINCT

On concatène à la suite les deux tables, mais en enlevant les doublons. Cela se fait grâce à UNION DISTINCT

SELECT
	*
FROM
	personne
UNION DISTINCT
SELECT
	* 
FROM 
	personne2

On obtient donc :

secu_socialenomprenomville
1DupontBaptisteParis
2DurandJeanMarseille
3DuchenePierreLyon
4DupontPaulParisis
5DurandJacquesMarseille
6GirardBaptisteParis
11DoeJohnLondres
12SmithJoshManchester

L’opérateur INTERSECT

On recherche les lignes qui sont à la fois dans la première et la seconde table. Voici la requête à faire pour obtenir ce résultat :

SELECT
	*
FROM
	personne
INTERSECT
SELECT
	* 
FROM 
	personne2

On obtient alors le résultat suivant :

secu_socialenomprenomville
4DupontPaulParisis

Et maintenant l’entrainement

Pour vous entrainer sur cette partie 3, faites les exercices 6 à 8 de SQLBolt :

https://sqlbolt.com/lesson/select_queries_with_joins

Et voilà pour cette partie 3 sur les jointures en SQL. Au prochain article : les fonction d’agrégation !

2 Comments

Laisser un commentaire