MySQL Tutoriel de sous-requête avec exemples
Que sont les sous-requêtes ?
Une sous-requête est une requête de sélection contenue dans une autre requête. La requête de sélection interne est généralement utilisée pour déterminer les résultats de la requête de sélection externe.
Examinons la syntaxe de la sous-requête :
Une plainte courante des clients de la vidéothèque MyFlix concerne le faible nombre de titres de films. La direction souhaite acheter des films dans une catégorie comportant le moins de titres.
Vous pouvez utiliser une requête comme
SELECT category_name FROM categories WHERE category_id =( SELECT MIN(category_id) from movies);
Cela donne un résultat
Voyons comment fonctionne cette requête
Ce qui précède est une forme de Sous-requête de ligne. Dans de telles sous-requêtes, la requête interne ne peut donner qu'UN seul résultat. Les opérateurs autorisés lors de l'utilisation de sous-requêtes de ligne sont [=, >, =, <=, ,!=, ]
Prenons un autre exemple ,
Supposons que vous vouliez les noms et numéros de téléphone des membres de personnes qui ont loué un film et qui ne les ont pas encore restitués. Une fois que vous obtenez les noms et le numéro de téléphone, vous les appelez pour leur donner un rappel. Vous pouvez utiliser une requête comme
SELECT full_names,contact_number FROM members WHERE membership_number IN (SELECT membership_number FROM movierentals WHERE return_date IS NULL );
Voyons comment fonctionne cette requête
Dans ce cas, la requête interne renvoie plusieurs résultats. Ce qui précède est le type de Tcapable de sous-recherchery.
Jusqu'à présent, nous avons vu deux requêtes, voyons maintenant un exemple de triple requête!!!
Supposons que la direction veuille récompenser le membre le mieux payé.
Nous pouvons exécuter une requête comme
Select full_names From members WHERE membership_number = (SELECT membership_number FROM payments WHERE amount_paid = (SELECT MAX(amount_paid) FROM payments));
La requête ci-dessus donne le résultat suivant –
Sous-requêtes vs jointures !
Par rapport aux Joins , les sous-requêtes sont simples à utiliser et faciles à lire. Ils ne sont pas aussi compliqués que Joint
C'est pourquoi ils sont fréquemment utilisés par Débutants en SQL.
Mais les sous-requêtes ont des problèmes de performances. L’utilisation d’une jointure au lieu d’une sous-requête peut parfois vous donner jusqu’à 500 fois plus de performances.
Si vous avez le choix, il est recommandé d'utiliser un JOIN sur une sous-requête.
Les sous-requêtes ne doivent être utilisées que comme solution de secours lorsque vous ne pouvez pas utiliser une opération JOIN pour obtenir ce qui précède.
Résumé
- Les sous-requêtes sont des requêtes intégrées dans une autre requête. La requête intégrée est appelée requête interne et la requête conteneur est appelée requête externe.
- Les sous-requêtes sont faciles à utiliser, offrent une grande flexibilité et peuvent être facilement décomposées en composants logiques uniques constituant la requête, ce qui est très utile lorsque USP,EP, BP et déboguer les requêtes.
- MySQL prend en charge trois types de sous-requêtes : les sous-requêtes scalaires, de lignes et de tables.
- Les sous-requêtes scalaires ne renvoient qu'une seule ligne et une seule colonne.
- Les sous-requêtes de ligne ne renvoient qu'une seule ligne mais peuvent avoir plusieurs colonnes.
- Les sous-requêtes de table peuvent renvoyer plusieurs lignes ainsi que plusieurs colonnes.
- Les sous-requêtes peuvent également être utilisées dans les requêtes INSERT, UPDATE et DELETE.
- Pour des problèmes de performances, lorsqu'il s'agit d'obtenir des données de plusieurs tables, il est fortement recommandé d'utiliser des JOIN au lieu de sous-requêtes. Les sous-requêtes ne doivent être utilisées que pour de bonnes raisons.