Maîtriser les jointures et les unions SQL pour une récupération efficace des données
Ce guide explore comment les jointures et les unions SQL récupèrent et combinent efficacement les données de plusieurs tables.
Partie 1 : Comprendre les jointures et les unions
Les jointures SQL sont fondamentales pour récupérer des données sur plusieurs tables basées sur des colonnes partagées. Plusieurs types de jointure existent :
Les unions SQL combinent les résultats de plusieurs SELECT
instructions, éliminant les lignes en double par défaut. L'utilisation de UNION ALL
préserve les doublons.
Exemples illustratifs :
Montrons avec des exemples impliquant les tables cars
, models
et colors
.
Exemple 1 : jointure interne
Pour récupérer les identifiants des voitures de sport (en supposant que model
l'ID 1 représente des voitures de sport) :
<code class="language-sql">SELECT a.ID, b.model FROM cars a INNER JOIN models b ON a.model = b.ID WHERE b.ID = 1;</code>
L'ajout de couleurs de voiture nécessite une autre jointure :
<code class="language-sql">SELECT a.ID, b.model, c.color FROM cars a INNER JOIN models b ON a.model = b.ID INNER JOIN colors c ON a.color = c.ID WHERE b.ID = 1;</code>
Exemple 2 : Union
Pour combiner des voitures de sport (ID de modèle 1) et des 4x4 (ID de modèle 3) :
<code class="language-sql">SELECT a.ID, b.model, c.color FROM cars a INNER JOIN models b ON a.model = b.ID INNER JOIN colors c ON a.color = c.ID WHERE b.ID = 1 UNION SELECT a.ID, b.model, c.color FROM cars a INNER JOIN models b ON a.model = b.ID INNER JOIN colors c ON a.color = c.ID WHERE b.ID = 3;</code>
Exemple 3 : Jointure externe
Pour répertorier toutes les marques et leur nombre de voitures, y compris les marques sans voitures (en utilisant une jointure externe gauche) :
<code class="language-sql">SELECT a.brand, COUNT(b.id) AS countOfBrand FROM brands a LEFT OUTER JOIN cars b ON a.ID = b.brand GROUP BY a.brand;</code>
Exemple 4 : Simulation d'INTERSECT (MySQL)
Étant donné que INTERSECT
n'est pas universellement pris en charge, une solution de contournement utilisant des jointures (pour MySQL) pourrait ressembler à ceci (cet exemple nécessite un ajustement en fonction de la structure de votre table spécifique et des critères d'intersection souhaités) :
<code class="language-sql"> SELECT a.ID, a.color, a.paint FROM colors a INNER JOIN colors b ON a.ID = b.ID WHERE a.ID > 2 AND b.ID -- Replace with your actual intersection condition ``` (Note: This example is a placeholder and requires adaptation to a real-world scenario to be meaningful.) This demonstrates the power of joins and unions for efficient data manipulation in SQL. Remember to adapt these examples to your specific database schema and requirements.</code>
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!