Retour à la liste des articles Articles
6 minutes de lecture

Qu'est-ce qu'une requête SQL en ligne ?

Avez-vous déjà entendu le terme "requête en ligne" ? En quoi sont-elles différentes des sous-requêtes et des tables dérivées ? Vous avez consulté de nombreux sites et vous ne connaissez toujours pas la réponse ? Embarquons pour un voyage et découvrons-le ensemble !

La première fois que j'ai entendu le terme "requête en ligne", j'ai été un peu surpris. Cela ne ressemble pas à une des nuances de SQL et je pensais connaître tous les concepts de base. Malheureusement, la recherche de ce terme sur Google n'a pas été d'une grande aide - il n'y avait que quelques résultats et toutes les réponses étaient vagues. Il m'a fallu un certain temps pour faire les recherches nécessaires et me familiariser avec les requêtes en ligne en SQL. C'est pourquoi j'ai décidé d'écrire cet article et de rassembler tout ce que j'ai appris en un seul endroit.

Sous-requête vs. vues en ligne

Avez-vous déjà entendu parler d'une sous-requête ? Il s'agit d'une requête dans une requête - du moins selon la terminologie que l'on m'a enseignée. Ensuite, il y a l'expression " vue en ligne". Une vue en ligne est une requête contenue dans la clause FROM d'une autre requête. Selon la terminologie que j'ai apprise, cela revient à dire qu'il s'agit d'une sous-requête. Toutefois, dans Oracle, les vues en ligne sont placées dans la clause FROM uniquement, tandis que les sous-requêtes se trouvent dans les clauses SELECT ou WHERE. (Voir sous-requête dans la FAQ Oracle et vue en ligne dans la FAQ Oracle.) En d'autres termes, Oracle les traite comme deux concepts distincts.

Ainsi, si vous avez appris à connaître les sous-requêtes en dehors d'Oracle, vous serez en mesure de comprendre les vues en ligne. Toutefois, n'oubliez pas que les utilisateurs d'Oracle risquent de mal vous comprendre si vous utilisez les termes sous-requêtes et vues en ligne de manière interchangeable.

Nous ne passerons pas plus de temps sur les sous-requêtes maintenant. Si vous n'êtes pas familier avec elles, je vous recommande de lire l'article suivant Sous-requêtes SQL article sur le blog LearnSQL.fr pour un aperçu de base du sujet.

Alors, qu'est-ce qu'une requête en ligne ?

Une requête en ligne est une requête contenue dans la clause FROM. Vous y sélectionnez des données comme vous le feriez pour une table.

Voyons un exemple de requête en ligne. Nous allons travailler avec des données de films provenant d'un site où les gens évaluent les films qu'ils ont regardés :

movie - Contient des informations sur les films :

  • id - Un identifiant unique pour chaque film.
  • title - Le titre du film.
  • year - La date de sortie du film.
  • director_id - L'ID du réalisateur de ce film.

rating - Stocke les évaluations des utilisateurs pour les films :

  • id - Un identifiant unique pour chaque note.
  • rating - Un nombre allant de 1 (signifiant "c'est tellement mauvais que montrer ce film devrait être illégal") à 10 (signifiant "je pourrais regarder ce film pour le reste de ma vie, 24h/24 et 7j/7").
  • movie_id - L'identifiant du film évalué.
  • user_id - l'identifiant de l'utilisateur qui a évalué le film.

movie

idtitleyeardirector_id
1The Lord of the Rings: The Return of the King200314
2Mad Max: Fury Road201569
3Avengers: Endgame201971

rating

idratingmovie_iduser_id
171332
261469
3101767
4101111
58184
622417
772441
8102118
95274
1022630
1110399
1243189
1373887
1483521
1543144

La requête affichera la note moyenne la plus élevée du film. Jetez-y un coup d'œil :

SELECT
  MAX(avg_rating) AS max_avg_rating
FROM (
  SELECT
    AVG(rating) AS avg_rating
  FROM rating
  GROUP BY movie_id
) AS avg_movie_ratings;
max_avg_rating
8.2

Dans la clause FROM, nous avons utilisé la vue en ligne (appelée avg_movie_ratings et indiquée en gras) pour calculer la note moyenne de chaque film. Puis, à partir de ces moyennes, nous avons sélectionné la valeur la plus élevée. La vue en ligne que nous avons utilisée fonctionne comme une table temporaire.

Vues en ligne en dehors d'Oracle

Comme je l'ai déjà mentionné, la vue en ligne est plutôt un terme d'Oracle. Je suis également tombé sur ce terme en lisant des articles sur MySQL ; cependant, certaines personnes y font référence comme à une vue en ligne et d'autres comme à une sous-requête. Dans d'autres moteurs de base de données, les vues en ligne ont des noms différents. Par exemple, dans MS SQL Server, une sous-requête dans une clause FROM est appelée une table dérivée.

Vous avez probablement remarqué que j'utilise ici le terme "sous-requête". C'est parce que subquery (ou parfois subselect) est le nom utilisé dans PostgreSQL - le moteur de base de données que j'utilise le plus. Ce nom est également utilisé par la majorité des utilisateurs de MySQL.

Quel que soit le nom que vous donnez aux vues en ligne, n'oubliez pas qu'il ne s'agit que du nom d'un concept. La façon dont vous le nommez n'a pas vraiment d'importance. L'important est de savoir comment utiliser correctement le concept dans vos requêtes.

Vues en ligne et sous-requêtes

Revenons un instant à la terminologie d'Oracle. Quelle est la différence entre les vues en ligne et les sous-sélections (voir sous-requête dans les FAQ d'Oracle) si, dans certains moteurs, elles portent le même nom ?

Même si elles se ressemblent, elles fonctionnent différemment. Nous allons nous concentrer sur les deux plus grandes différences.

La première différence est que les vues en ligne peuvent contenir plusieurs colonnes, alors que les sous-requêtes (au sens d'Oracle) ne doivent en renvoyer qu'une seule. La raison en est simple : une vue en ligne fonctionne comme une table et les tables peuvent contenir plusieurs colonnes. Les sous-requêtes, en revanche, fonctionnent généralement comme une valeur unique.

La deuxième raison est la corrélation. Dans les vues non en ligne, vous pouvez utiliser une valeur pour la requête externe (principale). Ainsi, votre sous-requête peut renvoyer une valeur différente pour différentes lignes. Ce concept est très puissant et peut vous faire gagner du temps lorsque vous écrivez des requêtes complexes. Pour en savoir plus, consultez Sous-requête corrélée en SQL : Guide du débutant sur le blog LearnSQL.fr .

Si vous avez besoin de plus d'informations sur le sujet et sur les différents types de sous-sélections (y compris les vues en ligne), consultez l'article suivant Quels sont les différents types de sous-requêtes SQL ?.

Quelle est l'importance des noms ? Pas beaucoup !

Comme je l'ai déjà mentionné, il importe peu que vous appeliez le concept inline view, derived table, subquery ou subselect. Tout se résume à votre connaissance et à votre utilisation de cette puissante technique SQL. Bien entendu, lorsque vous communiquez avec d'autres personnes, vous devez faire de votre mieux pour éviter les erreurs de communication. C'est pourquoi il est utile de connaître les différentes appellations de ce concept. Toutefois, si votre équipe est d'accord, la vue en ligne pourrait être appelée from-part thingamajig - tant que tout le monde sait de quoi on parle !

Si vous n'avez jamais entendu parler de ce concept, vous pouvez consulter le SQL pour les débutants cours à l'adresse LearnSQL.fr. Si vous en avez déjà entendu parler mais que vous n'avez pas confiance en vos compétences, vous pouvez résoudre quelques exercices du cours . Exercices Pratiques de SQL. Nous espérons simplement que vous ne verrez pas d'inconvénient à ce que nous appelions ce concept " subquery".