SQL : sous-requêtes vs JOIN
Les sous-requêtes et les jointures sont deux concepts importants de SQL, le langage de programmation standard pour la gestion et la manipulation des bases de données. Dans ce blog, nous allons explorer ce que sont les sous-requêtes et les jointures, en quoi elles diffèrent et quand les utiliser dans vos requêtes SQL.
Que sont les sous-requêtes ?
Une sous-requête est une requête dans une requête. C'est un moyen d'imbriquer une instruction SELECT dans une autre instruction SELECT, INSERT, UPDATE ou DELETE, ou dans une instruction CREATE VIEW. Les sous-requêtes peuvent être utilisées pour effectuer diverses tâches, telles que :
- Filtrage des lignes en fonction d'une condition
- Calcul des valeurs à utiliser dans la requête externe
- Renvoyer une ou plusieurs valeurs dans le cadre de la requête externe
Une jointure est un moyen de combiner des lignes de deux tables ou plus en fonction d'une colonne liée entre elles. Il existe plusieurs types de jointures, notamment INNER JOIN, OUTER JOIN et CROSS JOIN.
Un INNER JOIN renvoie uniquement les lignes qui correspondent à la condition de jointure.
Une OUTER JOIN renvoie toutes les lignes des deux tables, y compris celles qui ne correspondent pas à la condition de jointure. Il existe deux types de jointures externes : LEFT JOIN et RIGHT JOIN. Une LEFT JOIN renvoie toutes les lignes de la table de gauche (la première table de la requête) et toutes les lignes correspondantes de la table de droite. Une jointure droite renvoie toutes les lignes de la table de droite (la deuxième table de la requête) et toutes les lignes correspondantes de la table de gauche.
Un CROSS JOIN renvoie le produit cartésien des deux tables, qui est une combinaison de toutes les lignes des deux tables.
Exemple pratique :
Dans ce scénario, nous avons une base de données Poudlard et les tables suivantes sont répertoriées ci-dessous :
- course_table : cette table contient des données concernant les noms de cours et est identifiée à l'aide d'une clé primaire unique
- student_table : cette table contient des données concernant les noms d'étudiants qui sont identifiés par une clé primaire unique
- inscription_table : cette table est la table JOIN qui établit la relation entre les étudiants et les cours. Chaque fois qu'un étudiant s'inscrit à un cours, un nouvel enregistrement est créé. le course_id est la clé étrangère pour identifier un cours à partir de course_table, et le student_id est une clé étrangère pour identifier un étudiant à partir de student_table.
course:
+─────+────────────────────────────────+
| id | course |
+─────+────────────────────────────────+
| 1 | Defense against the dark arts |
| 2 | Potions |
| 3 | History of magic |
+─────+────────────────────────────────+
student:
+─────+────────────────────────────────+
| id | student |
+─────+────────────────────────────────+
| 1 | Harry Potter |
| 2 | Hermione Granger |
| 3 | Ron Weasly |
| 4 | Voldemort |
| 5 | Draco Malfoy |
+─────+────────────────────────────────+
enrollment:
+─────+────────────+─────────────+
| id | course_id | student_id |
+─────+────────────+─────────────+
| 1 | 1 | 1 |
| 2 | 2 | 1 |
| 3 | 3 | 2 |
| 4 | 2 | 3 |
| 5 | 3 | 4 |
| 6 | 1 | 5 |
| 7 | 3 | 1 |
| 8 | 1 | 4 |
+─────+────────────+─────────────+
Vous trouverez ci-dessous un exemple de l'approche de sous-requête.
SELECT * FROM enrollment
WHERE enrollment.course_id IN (SELECT * FROM courses WHERE course_id = 1);
REJOINDRE
Vous trouverez ci-dessous l'approche Join.
SELECT * FROM course AS c
LEFT JOIN enrollment AS e ON c.id = e.course_id
WHERE e.course_id = 1
Quand utiliser les sous-requêtes et les jointures
Les sous-requêtes et les jointures peuvent toutes deux être utilisées pour extraire des données de plusieurs tables, mais elles ont des cas d'utilisation différents. Les sous-requêtes sont généralement utilisées lorsque vous souhaitez utiliser les résultats de la requête interne dans la clause WHERE ou HAVING de la requête externe. Ils sont également utiles lorsque vous souhaitez renvoyer une ou plusieurs valeurs dans le cadre de la requête externe.
Les jointures sont généralement utilisées lorsque vous souhaitez récupérer des données de plusieurs tables en fonction d'une colonne liée entre elles. Ils sont également utiles lorsque vous souhaitez renvoyer toutes les lignes des deux tables, y compris celles qui ne correspondent pas à la condition de jointure.
En général, les sous-requêtes ont tendance à être plus efficaces lorsque vous n'avez besoin de renvoyer que quelques lignes, tandis que les jointures sont plus efficaces lorsque vous devez renvoyer un grand nombre de lignes. Cependant, la différence de performances entre les deux peut varier en fonction de la taille des tables et de la complexité des requêtes.
En conclusion, les sous-requêtes et les jointures sont deux outils importants pour récupérer des données à partir de plusieurs tables en SQL. Les sous-requêtes sont utiles pour filtrer les lignes et renvoyer des valeurs dans le cadre de la requête externe, tandis que les jointures sont utiles pour combiner les lignes de plusieurs tables en fonction d'une colonne associée. Les deux peuvent être utilisés pour atteindre des objectifs similaires, mais le choix de celui à utiliser dépend des exigences spécifiques de votre requête.
![Qu'est-ce qu'une liste liée, de toute façon? [Partie 1]](https://post.nghiatu.com/assets/images/m/max/724/1*Xokk6XOjWyIGCBujkJsCzQ.jpeg)



































