Aller au contenu

Query by Example

Un article de Wikipédia, l'encyclopédie libre.
Ceci est une version archivée de cette page, en date du 17 mars 2005 à 21:34 et modifiée en dernier par 82.249.98.21 (discuter). Elle peut contenir des erreurs, des inexactitudes ou des contenus vandalisés non présents dans la version actuelle.

QBE (ou Querry by Example, c'est à dire "interrogation par l'exemple") est un langage de requêtes (comme SQL) révolutionnaire et concurrent à SQL destiné aux bases de données relationnelles. Il a été inventé par Moshe Zloof pour le compte de la compagnie IBM, en 1977. Il a connu un certain succès grâce à son introduction au sein de Paradox dès la première version de ce dernier (1.0 pour DOS) en 1985.

Avec QBE, il ne s’agit pas, pour l’utilisateur, ni le développeur, d’apprendre un langage de requêtes, mais tout simplement de définir une image de la réponse que l’on veut obtenir, pour voir figurer les données répondant à l’interrogation demandée.

QBE est dès l'origine un langage relationnel complet plus puissant que SQL puisqu'il intègre la division relationnelle alors que cette opération prévue dans l'algèbre relationnelle du Dr. Codd, n'est toujours pas présente de manière simple dans les plus récentes normes du langage SQL (SQL:2003). En revanche QBE ne permet pas la récursivité des requêtes, alors que la version normative SQL:1999 le permet.

Exemple

Voici un exemple de requête QBE et son équivalent en SQL :

Requête QBE

== T_CLIENT_CLI ===== CLI_NUM ============= CLI_NOM ===
                  | Check _join1!    | Check           |
                  |                  |                 |

== T_COMMANDE_CDE ===== CLI_NUM =========== CDE_DATE ================= CDE_MONTANT ===
                    | _join1         | >=2000-01-01, <=2000-03-31  | SOMME < 10000    |
                    |                |                             |                  |

Requête SQL

SELECT CDE.CLI_NUM, CLI_NOM
FROM   T_CLIENT_CLI CLI
       LEFT OUTER JOIN T_COMMANDE_CDE CDE
            ON  CLI.CLI_NUM = CDE.CLI_NUM
WHERE  CDE_DATE BETWEEN DATE'2000-01-01' AND '2000-03-31'
GROUP  BY CDE.CLI_NUM, CLI_NOM
HAVING SUM(CDE_MONTANT) < 10000


Voir aussi

Lien externe