Les requêtes dans les bases de données

Une requête a pour but d'extraire de l'information de la base de données.

Une requête porte sur une ou plusieurs tables de la base. La première question que l'on doit se poser est donc: de quelle(s) table(s) ai-je besoin pour trouver l'information que je veux?

Le mode Ebauche de création de requêtes commence par là, comme nous allons le voir.

Téléchargez donc cette petite base de données représentant un club sportif, et ouvrez la avec OpenOffice (ou LibreOffice). Sélectionnez, dans le cadre de gauche, le bouton Tables.

Combien cette base de données contient-elle de tables? Explorez leur contenu.

Sélectionnez maintenant le bouton Requêtes.

Créez les 10 requêtes suivantes en mode Ebauche:

  1. Liste de tous les coureurs.
  2. Liste de toutes les courses.
  3. Liste de tous les coureurs triée par âge décroissant.
  4. Nom et prénom de tous les coureurs.
  5. Nom, prénom et date de naissance des coureurs nés après le 30 juin 1952.
  6. Numéros de licence des coureurs ayant couru à Massy.
  7. Numéros de licence, temps et rang des coureurs ayant couru à Massy.
  8. Nom, prénom, temps et rang des coureurs ayant couru à Massy.
  9. Code postal et ville des courses auxquelles a participé Sarkozy.
  10. Rang moyen de Sarkozy dans les courses auxquelles il a participé

Le langage SQL

Pour chacune des requêtes que vous avez créées, il est possible de les éditer en mode SQL. Cela signifie que vous pouvez voir, pour chacune des requêtes, son expression dans le langage SQL. Ce langage permet de décrire de façon logique ce que l'on veut extraire de la base de données.

Forme générale d'une requête

Les requêtes de sélection sont toujours de la forme select ... from ... where ... Elles sont toujours adressées à une ou plusieurs tables de la base, qui sont indiquées, séparées par des virgules, entre from et where.

Projection

C'est la liste des attributs que l'on veut dans la réponse. Elle est indiquée entre select et from. Si l'on veut tous les attributs, on dit simplement select * from....

Filtrage

Indique les conditions que doivent vérifier les tuples du résultat. Les critères de filtrage sont placés derrière where et séparés par des and et or. S'il n'y a aucun filtrage (on veut la table entière) on ne met pas le mot clé where.

  ... where dateNaissance < '1970-06-01'
    ... where nom like '%queto%'
    ... where nom between 'A' and 'M'

Tri et groupement

Ce sont des parties optionnelles de la requête, ajoutées à la fin et commençant par un des mots clé group by ou order by.

    ... order by dateNaissance
    ... group by ville

Par défaut, le tri se fait par ordre croissant. Si l'on veut un tri par ordre décroissant, on précise order by ... desc

Jointure

Lorsque la requête porte sur plusieurs tables, il faut indiquer les relations entre ces tables (telles que définies dans le schéma entité/association.

    ... from coureur, resultat 
     where resultat.numLicence=coureur.numLicence

Exemple: numéro des courses auxquelles a participé Quinqueton

 select numCourse from coureur resultat
 where resultat.numLicence=coureur.numLicence
 and nom='Quinqueton'

D'autres syntaxes sont possibles pour exprimer une jointure. Elles permettent de ne pas mélanger les conditions de jointure avec les autres conditions de la requête, mais nécessitent souvent un parenthésage plus lourd. Ainsi, les deux syntaxes suivantes sont équivalentes à l'exemple ci-dessus des numéro des courses auxquelles a participé Quinqueton:

 select numCourse from coureur join resultat using(numLicence)
 where  nom='Quinqueton'

ou bien:

 select numCourse from coureur join resultat on(resultat.numLicence=coureur.numLicence)
 where  nom='Quinqueton'

En résumé, si la clé étrangère porte le même nom que la clé primaire vers laquelle elle pointe, on peut utiliser la syntaxe avec using:

    ... from coureur join resultat using(numLicence)
     where ... 

Si ce n'est pas le cas, on ne peut que mettre les conditions de jointure dans le where, avec les autres conditions, ou utiliser la syntaxe avec on:

    ... from coureur join resultat on(resultat.numLicence=coureur.numLicence)
     where ... 

Ecrire des requêtes directement en SQL

Cet exercice consiste à créer de nouveau les 10 requêtes précédentes, mais cette fois ci directement en langage SQL.

Pour faire l'exercice, cliquez ici.

Une série d'exercices du même type est accessible ici.

Utilisation d'autres logiciels de gestion de base de données

Si vous avez à votre disposition un logiciel comme MS Access (de la suite MS Office) , vous pouvez télécharger, au format MS Access les petite bases de données du club sportif et de l'agence de voyages qui nous ont servi dans les exercices.

MS Access, comme Open Base et tous les logiciels de réalisation de bases de données peuvent être utilisés en mode dit SQL où la création d'une base peut se faire directement par des requêtes. Ceci peut être essayé sur l'exemple du club sportif à l'aide de ce fichier et sur les voyages avec ce fichier . Dans MS Access, le mode SQL est un peu plus fastidieux à mettre en oeuvre, car il faut entrer les requêtes une par une. Un tutoriel peut être trouvé sur le site du CERIG.

La suite

Vous pouvez retourner au sommaire des cours de Base de Données du Master ESEEC, ou bien à celui de mes cours.

Pour toute question, n'hésitez pas à me contacter .