Quelles sont les sous-requêtes corrélées?

Une sous-requête corrélée est une utilisation sophistiquée de SQL.

SQL

Les bases de données relationnelles les plus modernes intègrent SQL pour ajouter et mettre à jour des données, créer des structures et rassembler des informations. SQL est basé sur des théories sur les données développées dans les années 1970 et est continuellement affiné depuis. Il se compose d'un ensemble d'états, notamment SELECT, INSERT, CREATE et DELETE, suivis de plusieurs clauses qui spécifient les données gérées et les options, telles que le tri et le groupe. L'utilisation généralisée des bases de données est due à la flexibilité et à la sophistication de SQL; Il permet aux organisations d'analyser des groupes de données complexes de plusieurs manières.

Requêtes et sous-requêtes

Une commande SQL permettant de récupérer des données s'appelle une requête. En règle générale, les programmeurs utilisent l'instruction SELECT des requêtes, bien que de nombreuses règles de recherche de données s'appliquent également à INSERT, DELETE et UPDATE. Une simple requête SELECT peut afficher le contenu d'une table de données, telle que l'instruction suivante:

SELECT * FROM inventaire;

Cette requête affiche tous les enregistrements d'une table appelée "Inventory". Vous pouvez obtenir les résultats d'une requête plus spécifique en ajoutant des tests conditionnels, comme dans cette instruction "Inventory":

SELECT * FROM Inventory WHERE warehouse_code = 'chicago5';

Cette déclaration montre vos enregistrements d’inventaire d’un code de dépôt, chicago5.

Une sous-requête est une requête dans une autre requête. La déclaration suivante répertorie les enregistrements de stock de ces articles que les dépôts sont dans une région donnée:

SELECT * FROMventaire WHERE code_entrepôt IN (SELECT code_entrepôt DE magasins WHERE région = 'midwest');

Notez que cette requête a deux instructions SELECT, une qui affiche les enregistrements d’inventaire et une autre qui établit la requête principale avec les codes de dépôt.

Sous-requête corrélée

Dans une sous-requête corrélée, les requêtes principales et subordonnées extraient des données de la même table. La requête interne exécute une fonction d'agrégation, telle qu'une statistique, et fournit ces informations à la requête externe, qui l'utilise comme base de comparaison. Par exemple, cette sous-requête corrélée génère une liste d'enregistrements de stock pour les articles dont les prix sont supérieurs à la moyenne d'un dépôt. La requête externe transmet les informations du dépôt à la requête interne et la requête interne renvoie le prix moyen à la requête externe:

SELECT numéro de pièce, prix, code_entrepôt DE l'inventaire i1 WHERE prix> (SELECT AVG (prix) DE l'inventaire i2, WHERE code_entrepôt.i1 = code_entrepôt.i2);

Les deux requêtes utilisent les tables d'alias "I1" et "I2". Bien qu'ils se réfèrent à la même table, l'utilisation de l'alias permet aux requêtes d'être traitées comme deux entités distinctes.

Inconvénients de fonctionnement

Pour les sous-requêtes corrélées, SQL évalue la requête interne une fois pour chaque enregistrement de la requête externe. Lorsque la taille des tables augmente, le processus prend plus de temps. Si vous constatez qu'une sous-requête corrélée prend trop de temps, envisagez d'utiliser une autre solution, telle que le chargement d'une table temporaire avec des résultats intermédiaires, puis le traitement de la table temporaire directement contre la table principale avec une simple sous-requête. Bien que moins élégant, cela peut être beaucoup plus rapide.