Tout sur les jointures

Améliorer les performances des requêtes dans PostgreSQL

Amy McCarty

Instructor

Aperçu du cours

  • Structure des requêtes : jointures, sous-requêtes et tables temporaires
  • Limiter et agréger les données
  • Stockage en base et outils d'optimisation
  • Planification et exécution des requêtes
Améliorer les performances des requêtes dans PostgreSQL

Planificateur de requêtes

Requête

  • Instructions SQL

Un serveur de restaurant

Plan d'exécution de requête

  • Étapes réelles

Plusieurs chefs autour d'une grande marmite

Améliorer les performances des requêtes dans PostgreSQL

Planificateur de requêtes

Serveur apportant des plats

Serveur apportant des boissons

Améliorer les performances des requêtes dans PostgreSQL

 

Qu'est-ce qu'une jointure ?

  • Combiner plusieurs tables
Améliorer les performances des requêtes dans PostgreSQL

 

Qu'est-ce qu'une jointure ?

  • Combiner plusieurs tables

Pourquoi les utiliser ?

  • Rechercher dans des tables de référence
  • Croiser des données

Comment ?

  • Interne et externe

 

ID vente Dt commande Montant N° client
01 2019-02-02 145.30 911

 

ID Nom Client depuis
911 Jim Smith 2019-01-01

 

ID vente Dt commande Montant Nom
01 2019-02-02 145.30 Jim Smith
Améliorer les performances des requêtes dans PostgreSQL

Jointures internes

Une table des athlètes avec quatre enregistrements pour athlète et pays. Jack - AUT. Aditya - IND. Mikhail - RUS. Javier - MEX. Une table des pays avec quatre enregistrements pour pays, nom, population en millions. AUT - Autriche - 9. IND - Inde - 1 339. RUS - Russie - 145. BRA - Brésil - 209

SELECT *
FROM athletes a
INNER JOIN countries c
ON a.country = c.country

 

 

 

Athlète Pays Pays1 Nom Pop (millions)
Jack AUT AUT Autriche 9
Aditya IND IND Inde 1 339
Mikhail RUS RUS Russie 145
Améliorer les performances des requêtes dans PostgreSQL

Jointures internes

Une table des athlètes avec quatre enregistrements pour athlète et pays. Jack - AUT. Aditya - IND. Mikhail - RUS. Javier - MEX. Le dernier enregistrement est en gras. Une table des pays avec quatre enregistrements pour pays, nom, population en millions. AUT - Autriche - 9. IND - Inde - 1 339. RUS - Russie - 145. BRA - Brésil - 209. Le dernier enregistrement est en gras.

SELECT *
FROM athletes a
INNER JOIN countries c
ON a.country = c.country

 

 

 

Athlète Pays Pays1 Nom Pop (millions)
Jack AUT AUT Autriche 9
Aditya IND IND Inde 1 339
Mikhail RUS RUS Russie 145
Améliorer les performances des requêtes dans PostgreSQL

Jointures internes avec USING

Une table des athlètes avec quatre enregistrements pour athlète et pays. Jack - AUT. Aditya - IND. Mikhail - RUS. Javier - MEX. Une table des pays avec quatre enregistrements pour pays, nom, population en millions. AUT - Autriche - 9. IND - Inde - 1 339. RUS - Russie - 145. BRA - Brésil - 209

SELECT *
FROM athletes
INNER JOIN countries
USING (country)

 

 

 

Athlète Pays Nom Pop (millions)
Jack AUT Autriche 9
Aditya IND Inde 1 339
Mikhail RUS Russie 145
Améliorer les performances des requêtes dans PostgreSQL

Jointures internes avec USING

Une table des athlètes avec quatre enregistrements pour athlète et pays. Jack - AUT. Aditya - IND. Mikhail - RUS. Javier - MEX. Le dernier enregistrement est en gras. Une table des pays avec quatre enregistrements pour pays, nom, population en millions. AUT - Autriche - 9. IND - Inde - 1 339. RUS - Russie - 145. BRA - Brésil - 209. Le dernier enregistrement est en gras.

SELECT *
FROM athletes
INNER JOIN countries
USING (country)

 

 

 

Athlète Pays Nom Pop (millions)
Jack AUT Autriche 9
Aditya IND Inde 1 339
Mikhail RUS Russie 145
Améliorer les performances des requêtes dans PostgreSQL

Jointure externe gauche

Une table des athlètes avec quatre enregistrements pour athlète et pays. Jack - AUT. Aditya - IND. Mikhail - RUS. Javier - MEX. Une table des pays avec quatre enregistrements pour pays, nom, population en millions. AUT - Autriche - 9. IND - Inde - 1 339. RUS - Russie - 145. BRA - Brésil - 209

SELECT *
FROM athletes a
LEFT JOIN countries c
ON a.country = c.country

 

 

Athlète Pays Pays1 Nom Pop (millions)
Jack AUT AUT Autriche 9
Aditya IND IND Inde 1 339
Mikhail RUS RUS Russie 145
Javier MEX
Améliorer les performances des requêtes dans PostgreSQL

Jointure externe gauche

Une table des athlètes avec quatre enregistrements pour athlète et pays. Jack - AUT. Aditya - IND. Mikhail - RUS. Javier - MEX.  Une table des pays avec quatre enregistrements pour pays, nom, population en millions. AUT - Autriche - 9. IND - Inde - 1 339. RUS - Russie - 145. BRA - Brésil - 209. Le dernier enregistrement est en gras.

SELECT *
FROM athletes a
LEFT JOIN countries c
ON a.country = c.country

 

 

Athlète Pays Pays1 Nom Pop (millions)
Jack AUT AUT Autriche 9
Aditya IND IND Inde 1 339
Mikhail RUS RUS Russie 145
Javier MEX
Améliorer les performances des requêtes dans PostgreSQL

Jointure externe droite

Une table des athlètes avec quatre enregistrements pour athlète et pays. Jack - AUT. Aditya - IND. Mikhail - RUS. Javier - MEX. Une table des pays avec quatre enregistrements pour pays, nom, population en millions. AUT - Autriche - 9. IND - Inde - 1 339. RUS - Russie - 145. BRA - Brésil - 209

SELECT *
FROM athletes a
RIGHT JOIN countries c
ON a.country = c.country

 

 

Athlète Pays Pays1 Nom Pop (millions)
Jack AUT AUT Autriche 9
Aditya IND IND Inde 1 339
Mikhail RUS RUS Russie 145
BRA Brésil 209
Améliorer les performances des requêtes dans PostgreSQL

Jointure externe droite

Une table des athlètes avec quatre enregistrements pour athlète et pays. Jack - AUT. Aditya - IND. Mikhail - RUS. Javier - MEX.  Le dernier enregistrement est en gras. Une table des pays avec quatre enregistrements pour pays, nom, population en millions. AUT - Autriche - 9. IND - Inde - 1 339. RUS - Russie - 145. BRA - Brésil - 209.

SELECT *
FROM athletes a
RIGHT JOIN countries c
ON a.country = c.country

 

 

Athlète Pays Pays1 Nom Pop (millions)
Jack AUT AUT Autriche 9
Aditya IND IND Inde 1 339
Mikhail RUS RUS Russie 145
BRA Brésil 209
Améliorer les performances des requêtes dans PostgreSQL

Jointure externe complète

SELECT *
FROM athletes a
FULL OUTER JOIN countries c
ON a.country = c.country
  • Plan d'exécution de requête

Plusieurs chefs autour d'une grande marmite

  • Contraint le planificateur de requêtes
Nom athlète Pays Pays1 Nom Pop (millions)
Jack AUT AUT Autriche 9
Aditya IND IND Inde 1 339
Mikhail RUS RUS Russie 145
Javier MEX
BRA Brésil 209
Améliorer les performances des requêtes dans PostgreSQL

Passons à la pratique !

Améliorer les performances des requêtes dans PostgreSQL

Preparing Video For Download...