Les requêtes de type SELECT …. FROM …. WHERE ne sont pas les seules que l’on peut exécuter ! Bien sûr elles permettent d’effectuer des jointures pour combiner les enregistrements de 2 ou plusieurs tables en évitant que les données se répètent, mais les jointures proposent différentes solutions pour contrôler le flux de données renvoyé.

Cross join (Jointure croisée)

  • Def : Renvoie toutes les combinaisons possibles.
  • Ex : SELECT * FROM table1 CROSS JOIN table2;
Inner join (Jointure interne)
  • Def : Jointure par défaut. Les lignes renvoyées correspondent aux intersections entre les tables.
Left outer join (Jointure externe gauche)
  • Def : Limite les résultats à ceux incluant chaque ligne de la table à gauche du "JOIN", ici table1.
  • Ex : SELECT * FROM table1 LEFT JOIN table2;
Right outer join (Jointure externe droite)
  • Def :Limite les résultats à ceux incluant chaque ligne de la table à droite du "JOIN", ici table2.
  • Ex : SELECT * FROM table1 RIGHT JOIN table2;
Full outer join (Jointure externe complète)
  • Def : Toutes les lignes des deux tables sont incluses, et les lignes n'ayant pas de correspondances avec celles de l'autre table sont associées à des NULL. MySQL ne reconnaît pas les jointures externes complètes, mais cela peut être compensé par l'utilisation d'une union.
Le fonctionnement des « unions » est proche de celui des jointures. Il permet de combiner des informations provenant de plusieurs requêtes. Les données combinées doivent être du même type et les doublons sont éliminés sauf si l’on précise le mot clef ALL.
  • Ex : (SELECT nom_plat FROM menu_1)
    UNION (SELECT nom_plat FROM menu_2)
    UNION (SELECT nom_plat FROM menu_3);

Une sous-requête permet d’établir une requête SQL qui va traiter les données issues d'une seconde requête. La clause WHERE comprend ainsi une autre requête SQL pour limiter les résultats originels, ou pour agréger les informations de plusieurs tables. La sous-requête peut également être placée dans une clause HAVING.
  • Ex : SELECT * FROM table WHERE colonne1 = (SELECT colonne2 FROM table2);
    SELECT * FROM table WHERE colonne = (SELECT colonne2 FROM table2 WHERE colonne2 = (SELECT colonne3 FROM table3));
En ce qui concerne la table temporaire, elle ne dépasse jamais la session SQL en cours, et autorise la création de tables pour créer un nouvel arrangement d'informations plus adapté à une requête particulière, pour tester la bonne insertion de données dans la base, ou pour créer un sous-ensemble d'une autre table plus léger afin de soulager le serveur SQL... On ne peut logiquement y faire appel qu'une seule fois dans la même requête.

  • CREATE TEMPORARY TABLE temp SELECT * FROM donnes WHERE a=1;
    SELECT * FROM temp WHERE ... ;
Article complet sur JDN développeurs