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 fréquente des clients à la vidéothèque MyFlix est le faible nombre de titres de films. La direction souhaite acheter des films pour une catégorie qui compte 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);
Ça 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 lorsque vous travaillez avec des sous-requêtes de lignes sont [=,>, =, <=,,! =,]
Regardons 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 rendus. Une fois que vous avez obtenu les noms et le numéro de téléphone, vous les appelez pour vous rappeler. 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 un type de sous-requête T able .
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 contre jointures!
En comparaison avec les jointures, les sous-requêtes sont simples à utiliser et faciles à lire. Ils ne sont pas aussi compliqués que les jointures
Par conséquent, il est fréquemment utilisé par les débutants 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 comme solution de secours que lorsque vous ne pouvez pas utiliser une opération JOIN pour atteindre 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 lors du test et du débogage des requêtes.
- MySQL prend en charge trois types de sous-requêtes, les sous-requêtes scalaires, de ligne et de table.
- 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 des colonnes.
- Les sous-requêtes peuvent également être utilisées dans les requêtes INSERT, UPDATE et DELETE.
- Pour les 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.