Introduction aux requêtes SQL



Documents pareils
1. LA GESTION DES BASES DE DONNEES RELATIONNELLES

clef primaire ; clef étrangère ; projection ; restriction ; jointure ; SQL ; SELECT ; FROM ; WHERE

Le langage SQL Rappels

Créer le schéma relationnel d une base de données ACCESS

Manuel d utilisation 26 juin Tâche à effectuer : écrire un algorithme 2

MODE OPERATOIRE OPENOFFICE BASE

EXCEL TUTORIEL 2012/2013

Langage SQL : créer et interroger une base

1. Introduction Création d'une requête...2

Base de données relationnelle et requêtes SQL

COMMANDES SQL... 2 COMMANDES DE DEFINITION DE DONNEES... 2

CRÉER UNE BASE DE DONNÉES AVEC OPEN OFFICE BASE

Publipostage avec Calc

1 Introduction et installation

Qu est ce qu une bibliothèque?

SOMMAIRE. Travailler avec les requêtes... 3

Utiliser un tableau de données

1. Introduction Création d'une macro autonome Exécuter la macro pas à pas Modifier une macro... 5

1. Qu'est-ce que SQL? La maintenance des bases de données Les manipulations des bases de données... 5

MEDIAplus elearning. version 6.6

Chapitre 1 Qu est-ce qu une expression régulière?

Bases de données relationnelles

Groupe Eyrolles, 2006, pour la présente édition, ISBN :

Manuel d Administration

Le Langage SQL version Oracle

Utiliser Access ou Excel pour gérer vos données

claroline classroom online

Manuel d utilisation de la plate-forme de gestion de parc UCOPIA. La mobilité à la hauteur des exigences professionnelles

INSERER DES OBJETS - LE RUBAN INSERTION... 3 TABLEAUX

MODE OPERATOIRE CIEL GESTION COMMERCIALE VERSION EVOLUTION BTS PME PMI

Débuter avec OOo Base

Jura Miniguide Conseils pour mieux utiliser Jura

SOMMAIRE. 1. Connexion à la messagerie Zimbra Pré-requis Ecran de connexion à la messagerie 4

A.-M. Cubat PMB - Import de lecteurs - Généralités Page 1 Source :

FileMaker Pro 12. Didacticiel

SOMMAIRE AIDE À LA CRÉATION D UN INDEX SOUS WORD. Service général des publications Université Lumière Lyon 2 Janvier 2007

Le chiffre est le signe, le nombre est la valeur.

RECOPLUS LOGICIEL DE GESTION DES RECOMMANDES NOTICE D UTILISATION DE RECOPLUS RESEAU. N de série

Création de Sous-Formulaires

Solutions en ligne Guide de l utilisateur

[WINDOWS 7 - LES FICHIERS] 28 avril Logiciel / Windows

Activité 4. Tour de cartes Détection et correction des erreurs. Résumé. Liens pédagogiques. Compétences. Âge. Matériels

Access et Org.Base : mêmes objectifs? Description du thème : Création de grilles d écran pour une école de conduite.

Le modèle de données

Affectation standard Affectation modifiée (exemple)

Faculté des sciences de gestion et sciences économiques BASE DE DONNEES

INF 1250 INTRODUCTION AUX BASES DE DONNÉES. Guide d étude

EXCEL PERFECTIONNEMENT SERVICE INFORMATIQUE. Version /11/05

Langage SQL (1) 4 septembre IUT Orléans. Introduction Le langage SQL : données Le langage SQL : requêtes

«Manuel Pratique» Gestion budgétaire

Ouvrir le compte UQÀM

Mise à jour n 17 : Nouveautés

Algorithme. Table des matières

Saisissez le login et le mot de passe (attention aux minuscules et majuscules) qui vous ont

Guide de recherche documentaire à l usage des doctorants. Partie 1 : Exploiter les bases de données académiques

Traitement de texte : Quelques rappels de quelques notions de base

Administration du site (Back Office)

Mon Guide illustré Mon : Créer mon compte Remplir mon Formulaire

Thunderbird est facilement téléchargeable depuis le site officiel

Première étape : créer le fichier de données - extraire les données de PMB et les transférer dans Excel

Manuel d utilisation

Tune Sweeper Manuel de l'utilisateur

F7n COUP DE BOURSE, NOMBRE DÉRIVÉ

GUIDE Excel (version débutante) Version 2013

COMMENT REDIGER UN RAPPORT TECHNIQUE?

La littératie numérique est-elle vraiment une littératie? Pour quelle raison se soucie-t-on de la définition de la littératie numérique?


Manuel d utilisation NETexcom

Calc 2 Avancé. OpenOffice.org. Guide de formation avec exercices et cas pratiques. Philippe Moreau

Navigation dans Windows

Indications pédagogiques D2 / 21

Nom de l application

Introduction au logiciel de gestion bibliographique Zotero

Manuel d utilisation du module Liste de cadeaux PRO par Alize Web

F O R M A T I O N S LOTUS NOTES. 8.5 Utilisateurs rue de la Bôle. E U R L. a u c a p i t a l d e

PRÉPARER LA PREMIÈRE ÉPREUVE ORALE D ADMISSION OPTION EPS. DEVOIRS SUPPLÉMENTAIRES 1 et 2

VOCABULAIRE LIÉ AUX ORDINATEURS ET À INTERNET

Retour table des matières

Excel 2007 Niveau 3 Page 1

Concept totale. parfaitement compatibles permettant de jeter un «nouveau regard sur le marketing & les ventes».

Introduction aux SGBDR

Leçon N 5 PICASA Généralités

Guide plateforme FOAD ESJ Lille

Tutoriel - flux de facturation

UEO11 COURS/TD 1. nombres entiers et réels codés en mémoire centrale. Caractères alphabétiques et caractères spéciaux.

Document d accompagnement pour l utilisation du Cartable en ligne Lycée des Métiers Fernand LÉGER 2013/2014

Lecture critique et pratique de la médecine

Whitepaper. Méthodologie de création de rapports personnalisés SQL Server Reporting Services

FEN FICHE EMPLOIS NUISANCES

Courrier électronique : vocabulaire

L informatique en BCPST

Système de Gestion Informatisée des. Exploitations Agricoles Irriguées avec Contrôle de l Eau

Cours 1 : introduction

Afin d accéder à votre messagerie personnelle, vous devez vous identifier par votre adresse mail et votre mot de passe :

Initiation aux bases de données (SGBD) Walter RUDAMETKIN

Guide méthodologique de mise en place d une enquête de satisfaction

Transcription:

Michael J. Hernandez Introduction aux requêtes ISBN 2-212-09272-5

Avant-propos «Le langage est par sa nature même un élément collectif : il n exprime jamais un concept précis mais un compromis qui nous lie vous, moi et tous les autres.» Thomas Ernest Hulme, Spéculations La récupération d'informations sur une base de données est en général un exercice complexe. Elle peut néanmoins se révéler relativement aisée à partir du moment où l'on comprend la question posée à la base de données. Une fois comprise, la question peut être traduite vers le langage utilisé par n'importe quel système de base de données. Dans la plupart des cas, il s'agit de (Structured Query Language). Votre requête doit prendre la forme d'une instruction pour que le système de base de données puisse identifier les informations que vous souhaitez récupérer. vous permet ainsi de communiquer avec votre système de base de données. Notre longue expérience de consultants sur les bases de données nous a permis de constater que les individus souhaitant simplement récupérer des informations sur une base de données sont nettement plus nombreux que ceux chargés de développer des programmes et des applications pour ces bases. Malheureusement, il n'existe aucun ouvrage consacré exclusivement à la récupération d'informations, en particulier du point de vue du «simple mortel». Il existe naturellement un grand nombre d'ouvrages intéressants sur mais la plupart traitent de la programmation et du développement des bases de données. C'est pourquoi nous avons pensé qu'il était temps de publier un ouvrage vous apprenant à réaliser une requête correctement et efficacement. Vous avez entre les mains le fruit de notre réflexion. Parmi les ouvrages traitant de, celui-ci est unique en son genre dans le sens où il ne concerne que les requêtes. Une fois que vous l'aurez lu, vous disposerez de toutes les compétences nécessaires à la récupération des informations dont vous avez besoin. La rédaction d'un tel ouvrage ne peut être l'œuvre d'une seule personne. Des rédacteurs, des collègues, des amis et des parents nous ont témoigné tout leur soutien et nous ont prodigué de

2 Introduction aux requêtes précieux conseils au moment le plus opportun. Ces personnes nous ont encouragés et nous ont aidés à rester motivés pour mener ce projet à bien. Tout d'abord, nous souhaiterions remercier notre éditrice Mary O Brien pour nous avoir permis d'écrire ce livre. Elle a su deviner tout le potentiel de l'idée de départ et s'est entièrement consacrée à ce projet. Nous remercions Mary et son assistante Mariann Kourafas pour leur infinie patience et leur soutien constant tout au long de la rédaction de cet ouvrage. Merci également à Marilyn Rash et à l'équipe de production, et bravo à tous! Nous souhaiterions également remercier nos rédacteurs techniques : Malcom C. Rubel, Michael Blaha, Alexander Tarasul et Keith W. Hare. Malcom, comme toujours, travailler avec toi fut un grand plaisir! Michael et Alexander, merci pour tous vos commentaires et suggestions fort utiles. Nous remercions tout particulièrement Keith pour avoir corrigé quelques petites erreurs dans l'historique de et pour toutes les informations présentées dans la section «Ce que le futur nous réserve» du Chapitre 3. Merci encore à vous tous pour le temps et les efforts que vous avez consacrés au projet et qui nous ont permis de rédiger un traité exhaustif sur les requêtes. Enfin, nous remercions tout particulièrement Joe Celko pour son avant-propos. Joe est non seulement expert en mais c'est également un collègue et un bon ami. Nous respectons son savoir et son expertise sur le sujet et sommes fiers qu'il ait accepté de nous faire part de son opinion et de ses commentaires en début d'ouvrage. J'adresse mes plus sincères remerciements à mon ami et collègue John L. Viescas pour m'avoir donné l'opportunité de rédiger cet ouvrage avec lui. C'est lui qui est à l'origine du projet et qui m'a convaincu d y prendre part. John n'en est pas à son coup d'essai dans le domaine et il est un auteur respecté et reconnu. C'est donc un honneur pour moi d'avoir collaboré avec lui sur ce projet. Enfin, je souhaiterais remercier Kendra, mon épouse. Elle s'est une fois de plus montrée très patiente alors que je travaillais d'arrache-pied sur ce projet. Son aide a été inestimable et je lui en suis infiniment reconnaissant. Michael J. Hernandez, Bellevue, Washington Eh bien, Mike! Je suis flatté de tous ces compliments, mais n exagérons rien Je t'ai peutêtre convaincu de collaborer à la rédaction de cet ouvrage, mais c'est bien toi qui as donné corps à un projet adapté à un public de «simples mortels». Expliquer le monde complexe de (c'est d'ailleurs l'un de mes thèmes de prédilection) à un si large public s'est révélé être une tâche à la fois amusante et intéressante. Merci de m'avoir permis de le faire. Contrairement à la tienne, mon épouse Suzanne ne déteste pas les marques publiques d'affection. Nous lui devons tous les deux un grand merci, non seulement pour m'avoir supporté pendant que je me consacrais entièrement à cet ouvrage, mais également pour ses excellents commentaires critiques et ses corrections. Elle s'y connaît en ordinateurs, mais elle est bel et bien une «simple mortelle» lorsqu'il s'agit de bases de données. Elle représentait donc la cible type lorsqu'il s'agissait de tester les premiers jets des chapitres. J'ai seulement dû lui promettre une chose : cet été, pour nos vacances à Hawaï, je laisserai mon ordinateur portable à la maison! John L.Viescas Austin, Texas

4 Création d une requête simple «Pensez comme un sage, mais communiquez dans la langue des gens ordinaires.» William Butler Yeats Dans ce chapitre : La commande SELECT Opposition entre données et informations Traduction de la requête en Suppression des doublons Tri des informations Sauvegarde Exemples de commandes Problèmes à résoudre Introduction Parmi toutes les commandes de, SELECT a un statut vraiment particulier car c est l instruction la plus puissante et la plus complexe de ce langage : elle permet de retrouver les informations stockées dans les tables d une base de données. On utilise SELECT conjointement avec des mots-clés et des clauses afin de trouver et de visualiser quasiment toutes les informations possibles. SELECT permet de répondre à toutes les questions imaginables. Pour peu que vous ayez conçu correctement votre base de données et que vous y ayez introduit des informations fiables, vous obtiendrez toutes les réponses nécessaires pour prendre les bonnes décisions et mener à bien votre projet. SELECT peut être décomposé en trois opérations que nous appellerons commande SELECT, expression SELECT et requête SELECT. (Cette décomposition a un but pédagogique : mieux

64 Les bases de PARTIE 2 vaut immédiatement appréhender la complexité de SELECT.) Chacune de ces opérations a son propre ensemble de mots-clés et de clauses permettant de créer une commande finale. Comme vous l apprendrez au fil de cet ouvrage, vous pouvez même combiner ces opérations de différentes manières pour répondre à des questions très complexes. Dans ce chapitre, nous commencerons par la commande SELECT et nous aborderons brièvement la requête SELECT. Nous approfondirons la commande SELECT dans les deux chapitres suivants. INFO Dans les livres ou des magazines traitant des bases de données relationnelles, on rencontre relativement souvent les termes «enregistrement» et «champ» utilisés au lieu de ligne et de colonne. Dans ce livre, nous employons exclusivement ligne et colonne afin de rester cohérents avec la norme. La commande SELECT La commande SELECT est l élément-clé de toute question posée à une base de données. Quand on crée et exécute une commande SELECT, on interroge la base de données à l aide d une requête. En fait, de nombreux SGBDR permettent de sauvegarder les commandes SELECT sous la forme d une requête, d une vue ou d une procédure stockée. En fonction du SGBDR utilisé, les commandes SELECT peuvent être exécutées directement à partir d une ligne de commande, d une grille QBE (Query By Example ou Requête par l exemple) ou bien à partir d un bloc de code. Quelle que soit la manière dont elle est définie ou exécutée, la syntaxe de la commande SELECT est toujours identique. Principales clauses d une commande SELECT Une commande SELECT est composée de plusieurs mots-clés appelés clauses. On définit une commande SELECT en utilisant diverses combinaisons de ces clauses pour retrouver l information recherchée. Certaines clauses sont obligatoires alors que d autres sont optionnelles. De plus, chaque clause comporte un ou plusieurs mots-clés qui représentent des valeurs obligatoires ou optionnelles. La Figure 4.1 montre un diagramme de la commande SELECT et de ses clauses. INFO Le diagramme de la Figure 4.1 montre une commande SELECT dont la syntaxe est rudimentaire. Nous affinerons ce diagramme au fil de l étude de SELECT. Les lecteurs connaissant déjà les notions élémentaires de devront se montrer patients. Voici un petit résumé des clauses d une commande SELECT. SELECT Il s agit de la clause principale de la commande SELECT et elle est absolument obligatoire. On l utilise pour spécifier les colonnes de la requête qui sont extraites de la table ou de la vue spécifiée dans la clause FROM. (On peut aussi les extraire simultanément de plusieurs tables mais nous aborderons cet aspect dans la troisième partie de cet ouvrage.) On peut aussi utiliser dans cette clause des fonctions de totalisation comme Sum(HeuresTravaillées) ou des expressions mathématiques, comme Quantité Prix. FROM C est la deuxième clause la plus importante de la commande SELECT et elle est également obligatoire. On utilise la clause FROM pour spécifier les tables dont on extrait les colonnes listées dans la clause SELECT. On peut employer cette clause de manière plus complexe mais nous verrons cet aspect ultérieurement.

Création d une requête simple CHAPITRE 4 65 Figure 4-1 Diagramme de la commande SELECT. WHERE C est une clause optionnelle qu on utilise pour filtrer les lignes retournées par la clause FROM. Le mot-clé WHERE est suivi d'une expression (dont l appellation technique est prédicat) à laquelle on attribue la valeur Vrai, Faux ou Inconnu. On peut tester l expression en utilisant les opérateurs de comparaison standard, des opérateurs booléens ou des opérateurs spéciaux. Nous aborderons les éléments de la clause WHERE au Chapitre 6. GROUP BY Quand on utilise des fonctions de totalisation dans la clause SELECT pour produire une synthèse des informations, on emploie la clause GROUP BY pour diviser les informations en groupes distincts. Votre base de données utilise n importe quelle colonne ou groupe de colonnes suivant la clause GROUP BY comme colonne de regroupement. La clause GROUP BY est optionnelle et nous l étudierons au Chapitre 13. HAVING La clause HAVING est associée à la clause GROUP BY ; on l utilise pour filtrer les informations regroupées. Elle est similaire à la clause WHERE dans le sens où le mot-clé HAVING est suivi d'une expression évaluée à Vrai, Faux ou Inconnu. On peut tester l expression en utilisant les opérateurs de comparaison standard, des opérateurs booléens ou des opérateurs spéciaux. HAVING est également une clause optionnelle et nous l approfondirons au Chapitre 14. Nous allons commencer par travailler avec une commande SELECT très basique et nous nous concentrerons donc sur les clauses SELECT et FROM. Nous étudierons progressivement les autres clauses au fil des chapitres afin de parvenir à une commande SELECT plus complexe.

66 Les bases de PARTIE 2 Opposition entre données et informations Avant de commencer à interroger la base de données, il est nécessaire d apporter une précision : il existe une grande différence entre données et informations. Par définition, les données sont les éléments stockés dans une base de données alors que les informations sont les éléments recherchés dans une base de données. Rappelez-vous qu une base de données est conçue pour fournir des informations pertinentes. Toutefois, ces informations ne peuvent être fournies que si des données appropriées ont été entrées dans la base et si la base elle-même a été structurée correctement. Examinons cela de plus près. Les valeurs stockées dans une base de données sont des données. Les données sont statiques dans le sens où elles demeurent dans le même état tant qu elles ne sont pas modifiées manuellement ou par un processus automatisé. La Figure 4.2 montre un exemple de données. Figure 4-2 Exemple de données. Catherine Martin 69005 Actif 89931 En apparence, ces données n ont aucun sens. Il n est pas facile, par exemple, de déterminer ce que représente 89931. S agit-il d un code postal? Est-ce un numéro d article? Même si vous savez qu il s agit d un numéro client, est-il associé à Catherine Martin? Il n y a aucun moyen de le savoir tant que les données ne sont pas traitées. Les données ne deviennent des informations qu une fois qu elles ont été traitées et qu elles sont devenues pertinentes et utiles. Les informations sont dynamiques dans le sens où elles varient constamment par rapport aux données stockées dans la base de données et qu elles peuvent être traitées et présentées de diverses manières. On peut montrer des informations résultant d une commande SELECT, les afficher dans un formulaire sur un écran d ordinateur ou bien les imprimer sur du papier dans un rapport. Aspect essentiel à retenir : vous devez traiter les données pour les transformer en informations. La Figure 4.3 montre les données de l exemple précédent transformées en informations dans une fiche client. Cet exemple illustre la manière dont les données peuvent être manipulées pour sembler pertinentes à la personne qui les visualise. Figure 4-3 Exemple de données transformées en informations. Quand on travaille avec une commande SELECT, on utilise ses clauses pour manipuler des données mais la commande proprement dite retourne des informations.

Création d une requête simple CHAPITRE 4 67 Toutefois, il subsiste un problème. Quand on exécute une commande SELECT, elle retourne une ou plusieurs lignes d informations ; le nombre exact de lignes dépend de la procédure utilisée pour construire la commande. On appelle ces lignes ensemble de résultats et c est la terminologie que nous emploierons tout au long de cet ouvrage. Ce terme est bien choisi parce qu on travaille toujours avec des ensembles de données quand on utilise une base de données relationnelle (rappelez-vous que le modèle relationnel repose sur la théorie des ensembles). On peut facilement visualiser les informations d un ensemble de résultats et, dans de nombreux cas, en modifier les données. Mais revenons à notre propos et commençons à utiliser la commande SELECT. Traduction de la requête en Quand on interroge la base de données, c est en général sous la forme d une question ou bien d une commande qui implique une question. Par exemple, on peut formuler les commandes de la manière suivante : «Dans quelles villes habitent nos clients?» «Montrez-moi la liste de nos employés avec leurs numéros de téléphone.» «Quels types de cours proposons-nous?» «Donnez-moi le nom de nos employés avec leur date d embauche.» Une fois que vous savez ce que vous voulez demander, vous pouvez traduire votre requête en une instruction plus formelle. Cette traduction revêt la forme suivante : Sélectionner <élément> dans la <source> Commencez par remplacer les mots et les phrases comme «Montrez-moi», «Listez», «Quels», «Qui» par le mot Sélectionner. Identifiez ensuite tous les noms de votre requête et déterminez si un nom donné représente un élément que vous voulez voir ou si le nom est celui d une table dans laquelle un élément peut être stocké. S il s agit d un élément, utilisez-le à la place de <élément> dans l instruction de traduction ; s il s agit d un nom de table, utilisez-le à la place de <source>. Si vous traduisez la première question de nos exemples précédents, vous obtenez ce résultat : Sélectionner ville dans la table clients Une fois que vous avez défini votre instruction de traduction, vous devez la transformer en une commande SELECT proprement dite en utilisant la syntaxe illustrée à la Figure 4.4. Toutefois, la première étape consiste à nettoyer l instruction de traduction. Pour ce faire, vous devez barrer tous les mots qui ne représentent pas le nom d une colonne ou d une table ou qui ne sont pas des mots spécifiquement employés par la syntaxe. Voici le résultat obtenu après la phase de nettoyage : Sélectionner ville dans la table clients Il apparaîtra clairement au lecteur anglophone que la phase de nettoyage fonctionne beaucoup mieux en anglais dans la mesure où elle permet de générer la commande exacte. Les différentes traductions des termes anglais («sélectionner» par SELECT, «dans» par FROM ) imposent au lecteur français une ultime transformation pour passer à la requête

68 Les bases de PARTIE 2 réelle. Par conséquent, nous avons préféré introduire les commandes et mots-clés correspondants entre crochets dans la phase de nettoyage pour en faciliter la compréhension : Sélectionner [SELECT] ville dans [FROM] la table clients Supprimez alors les mots que vous avez barrés et remplacez les termes français «sélectionner» et «dans» par les mots-clés figurant entre crochets. Vous obtenez ainsi la commande complète : SELECT Ville FROM Client Cette technique comptant trois étapes s applique à toute question posée à la base de données. En fait, nous emploierons cette technique dans la majeure partie du livre et nous vous encourageons à l utiliser au début de votre apprentissage de. Quand vous serez plus au fait des commandes SELECT, vous les construirez en une seule étape. Figure 4-4 Exemple d une commande SELECT simple. Gardez à l'esprit que vous travaillerez généralement avec des colonnes et des tables au début de votre apprentissage de. Le diagramme de la syntaxe de la Figure 4.4 reflète cet état de fait en utilisant nom de colonne dans la clause SELECT et nom de table dans la clause FROM. Au chapitre suivant, vous apprendrez à utiliser d autres termes dans ces clauses pour créer des commandes SELECT plus complexes. Vous avez probablement remarqué que la requête employée dans l exemple précédent est relativement simple. En effet, la redéfinition sous forme de traduction ainsi que l identification des noms de colonnes présentes dans la commande ne posaient pas de problème. Mais que se passe-t-il si la requête est plus complexe ou que les colonnes sont moins faciles à identifier? Il faut affiner votre requête et la rendre plus spécifique. Par exemple, vous pouvez affiner la requête suivante : «Montrez-moi les informations concernant nos clients.» en la reformulant plus clairement : «Listez le nom, la ville et le numéro de téléphone de chacun de nos clients.» Si le problème n est pas résolu, vous avez toujours deux autres solutions. Il faut commencer par déterminer si la table spécifiée dans la clause FROM de la commande SELECT contient des noms de colonnes qui peuvent vous aider à clarifier la requête et donc faciliter sa traduction. Deuxième solution : examiner la requête de plus près et déterminer si un mot ou une phrase implique des noms de colonne. L emploi de ces deux méthodes dépend de la requête propre-

Création d une requête simple CHAPITRE 4 69 ment dite. Prenons un exemple pour mieux comprendre cet aspect. Pour illustrer la première technique, supposons que l on tente de traduire la requête suivante : «J ai besoin des noms et adresses de tous nos employés.» Cette requête paraît simple. Mais en y regardant de plus près, vous constaterez un léger problème : alors qu on peut déterminer la table nécessaire (Employés) pour traduire la commande, rien dans la requête n'indique précisément les colonnes à spécifier pour la clause SELECT. Bien que les mots «noms» et «adresses» apparaissent dans la requête, ce sont des termes trop généraux. On peut résoudre ce problème en examinant la table identifiée dans la requête et en déterminant si elle contient des colonnes que l on peut substituer à ces termes. Dans ce cas, utilisez les noms des colonnes dans la phase de traduction. Vous pouvez choisir d utiliser les versions génériques des noms de colonnes dans la phase de traduction si cela vous aide à visualiser plus clairement la commande ; cependant, vous devrez utiliser les noms réels de colonnes dans la syntaxe. Dans ce cas, cherchez les noms des colonnes de la table Employés qui peuvent être utilisés au lieu des mots «noms» et «adresses». Utilisez la table Employés montrée à la Figure 4.5 et demandez-vous si vous pouvez utiliser ses colonnes. Figure 4-5 Structure de la table Employés. Vous utiliserez en fait cinq colonnes de cette table. EmpNom et EmpPrénom remplaceront «noms» dans la requête alors que EmpAdresse, EmpVille, EmpCodePostal remplaceront «adresses». Appliquons à présent l'ensemble du processus de traduction à la requête. Nous utilisons la forme générique des noms de colonnes (prénom, nom ) dans la phase de traduction et les noms réels de colonne (EmpPrénom, EmpNom ) dans la syntaxe. Enfin, de manière à rester plus proche de l anglais FROM, nous emploierons désormais l expression «à partir de la table» dans la phase de traduction, plutôt que «dans la table». Énoncé «J ai besoin des noms et des adresses de tous nos employés.» Traduction Sélectionner le prénom, le nom, l adresse, la ville et le code postal à partir de la table des employés Nettoyage Sélectionner [SELECT] le prénom, le nom, l adresse, la ville, et le code postal à partir de [FROM] la table des employés SELECT EmpPrénom, EmpNom, EmpAdresse, EmpVille, EmpCodePostal FROM Employés INFO Cet exemple illustre clairement l'utilisation de plusieurs colonnes dans une clause SELECT. Nous reviendrons plus en détail sur cette technique dans cette section.

70 Les bases de PARTIE 2 L exemple suivant illustre la seconde technique qui nécessite la recherche des colonnes impliquées dans la requête. Supposons que vous vouliez traduire la requête suivante : «Quels types de cours proposons-nous actuellement?» À première vue, il peut sembler difficile de traduire cette requête. Il n y a aucun nom de colonne et il est impossible de créer une requête s il n y a même pas un élément à sélectionner. Que faire à présent? Il faut examiner plus précisément chaque mot de la requête et déterminer s il y en a un qui implique un nom de colonne dans la table Cours. Avant d aller plus loin, prenons un instant pour réétudier la requête. Pouvez-vous trouver un tel mot? Dans notre exemple, le mot «types» peut impliquer un nom de colonne dans la table Cours. Pourquoi? Parce qu'un type de cours peut aussi prendre le sens de catégorie de cours. S il y a une colonne catégorie dans la table Cours, vous devrez alors compléter la traduction et donc la commande SELECT. Supposons qu il y ait une colonne catégorie dans la table Cours ; recommencez le processus de traduction en trois étapes : Énoncé «Quels types de cours proposons-nous actuellement?» Traduction Sélectionner la catégorie à partir de la table des cours Nettoyage Sélectionner [SELECT] la catégorie à partir de [FROM] la table des cours SELECT Catégorie FROM Cours Comme le montre cet exemple, cette technique implique l utilisation de synonymes pour remplacer certains mots ou expressions dans la requête. Si vous identifiez un mot ou une expression qui peut impliquer un nom de colonne, essayez de le remplacer par un synonyme qui peut être une colonne de la base de données. Mais si le premier synonyme qui vous vient à l esprit ne fonctionne pas, essayez-en un autre. Continuez ainsi jusqu à ce que vous trouviez un synonyme qui correspond à un nom de colonne. INFO Sauf spécification contraire, les noms des colonnes et des tables utilisés dans ces exemples sont extraits des exemples de base de données que vous trouverez sur le CD. Élargissement du champ de vision La commande SELECT permet également d extraire plusieurs colonnes et l opération sera aussi simple que pour une colonne unique. Listez les noms des colonnes que vous voulez utiliser dans la clause SELECT et séparez chaque nom de la liste par une virgule. Dans le diagramme présenté sur la Figure 4.6, l option permettant d utiliser plus d une colonne est indiquée par une ligne allant de droite à gauche sous nom de colonne. La virgule se trouvant au milieu de la ligne indique que vous devez insérer une virgule avant l autre nom de colonne à utiliser dans la clause SELECT. Cette option, qui permet d utiliser plusieurs colonnes dans une commande SELECT, vous donne la possibilité de répondre à des questions similaires à celles-ci : Énoncé Traduction «Montrez-moi la liste actuelle de nos employés et leurs numéros de téléphone.» Sélectionner le nom, le prénom et le numéro de téléphone de tous nos employés à partir de la table des employés

Création d une requête simple CHAPITRE 4 71 Figure 4-6 Utilisation de plusieurs colonnes dans une clause SELECT. Nettoyage Énoncé Traduction Nettoyage Sélectionner [SELECT] le nom, le prénom et le numéro de téléphone de tous nos employés à partir de [FROM] la table des employés SELECT EmpNom, EmpPrénom, EmpTéléphone FROM Employés «Quels sont les noms et les prix des produits que nous vendons et dans quelle catégorie chaque produit est-il listé?» Sélectionner le nom, le prix et la catégorie de chaque produit à partir de la table des produits Sélectionner [SELECT] le nom, le prix et la catégorie de chaque produit à partir de [FROM] la table des produits SELECT NomProduit, PrixPublic, Catégorie FROM Produits L ordre des colonnes dans la clause SELECT n a pas d importance et vous pouvez lister les colonnes dans l ordre que vous souhaitez. Cela vous donne la possibilité de voir les mêmes informations sous des angles différents. Supposons par exemple que vous travaillez avec la table présentée à la Figure 4.7, et qu on vous demande de poser la question suivante à la base de données : «Montrez-moi la liste des sujets, la catégorie à laquelle ils appartiennent et le code que nous utilisons dans notre catalogue. Mais j aimerais tout d abord voir le nom, suivi de la catégorie et enfin le code.» Figure 4-7 Structure de la table Sujets. Vous pouvez toujours transformer cette requête pour que les colonnes apparaissent dans l ordre souhaité. Il suffit de lister les noms des colonnes dans l ordre spécifié quand on définit la commande. Voici l aspect pris par le processus quand vous transformez cette requête en une commande SELECT.

72 Les bases de PARTIE 2 Traduction Sélectionner le nom du sujet, le numéro de la catégorie et le code du sujet à partir de la table des sujets Nettoyage Sélectionner [SELECT] le nom du sujet, le numéro de la catégorie et le code du sujet à partir de [FROM] la table des sujets Il n y a pas de limite quant au nombre de colonnes spécifiées dans la clause SELECT et vous pouvez en fait lister toutes les colonnes de la table source. L exemple suivant montre la commande SELECT qui spécifie toutes les colonnes de la table Sujets de la Figure 4.7. SELECT NumSujet, NumCatégorie, CodeSujet, NomSujet, DescriptionSujet FROM Sujets Quand vous spécifiez toutes les colonnes de la table source, vous devez saisir de nombreux caractères si la table contient beaucoup de colonnes! Heureusement, la norme propose un raccourci, l astérisque, qui allège considérablement la commande. Le diagramme de la Figure 4.8 montre que l on peut utiliser l astérisque au lieu de lister toutes les colonnes dans la clause SELECT. Figure 4-8 Utilisation d un astérisque pour spécifier toutes les colonnes de la table source. Placez l astérisque immédiatement après la clause SELECT quand vous voulez spécifier toutes les colonnes de la table source dans la clause FROM. Par exemple, la commande précédente prend cet aspect quand on utilise le raccourci : SELECT * FROM Sujets Avouez que le nombre de caractères à taper est nettement réduit! Toutefois, un problème se pose quand vous créez des commandes SELECT de cette manière : l astérisque représente toutes les colonnes qui existent actuellement dans la table source ; or, l ajout ou la suppression de colonnes affecte ce que vous voyez dans l ensemble de résultats de la commande SELECT. (Étrangement, la norme stipule que l ajout ou la suppression de colonnes ne doit pas affecter l ensemble des résultats.) Ce problème n est important que si vous devez voir systématiquement les mêmes colonnes dans l ensemble de résultats. Votre base de données ne vous avertira pas si des colonnes ont été supprimées lorsque vous utilisez l astérisque dans la clause SELECT mais elle émettra un message d erreur quand elle ne trouvera pas une colonne que vous avez spécifiée explicitement. Bien que cela ne constitue pas un réel problème pour notre propos, cette difficulté prend des proportions beaucoup plus importantes dans le cadre de la programmation en. Nous vous conseillons de réserver l astérisque aux requêtes devant être créées rapidement pour voir toutes les informations d une

Création d une requête simple CHAPITRE 4 73 table donnée. Dans le cas contraire, spécifiez toutes les colonnes dont vous avez besoin dans la requête. Finalement, la requête retournera exactement les informations nécessaires et en outre, elle sera auto-documentée. Suppression des doublons Quand on travaille avec des commandes SELECT, on rencontre inévitablement des ensembles de résultats qui comportent des doublons. Il n y a aucune raison de s inquiéter dans ce cas. Utilisez le mot-clé DISTINCT dans votre commande SELECT et l ensemble de résultats ne comportera aucune ligne en double. La Figure 4.9 montre la syntaxe du mot-clé DISTINCT. Figure 4-9 Syntaxe du mot-clé DISTINCT. Comme le montre le diagramme, DISTINCT est un mot-clé optionnel qui précède la liste des colonnes spécifiées dans la clause SELECT. Le mot-clé DISTINCT demande à votre base de données d évaluer la valeur de toutes les colonnes comme des unités simples dans une comparaison ligne à ligne et d éliminer toutes les redondances qu elle rencontre. Les lignes uniques restantes sont ensuite retournées dans l ensemble de résultats. L exemple suivant montre la différence engendrée par l emploi du mot-clé DISTINCT. Imaginons la question suivante posée à notre base de données: Énoncé «Quelles sont les villes représentées par les membres de notre ligue de bowling?» La question paraît assez simple et nous allons la traduire : Traduction Sélectionner la ville à partir de la table des joueurs de bowling Nettoyage Sélectionner [SELECT] la ville à partir de [FROM] la table des joueurs de bowling SELECT Ville FROM Joueurs Le problème est que l ensemble de résultats de cette commande SELECT montre toutes les occurrences de chaque nom de ville trouvé dans la table Joueurs. Par exemple, s il y a 20 joueurs de Paris, 7 joueurs de Marseille et 14 joueurs de Lyon, l ensemble de résultats affiche 20 occurrences de Paris, 7 occurrences de Marseille et 14 occurrences de Lyon. Il est évident que cette redondance ne nous intéresse pas ; seule une occurrence de chaque nom de

74 Les bases de PARTIE 2 ville trouvé dans le table Joueurs est nécessaire. On résout ce problème en utilisant le mot-clé DISTINCT dans la commande SELECT pour éliminer les informations redondantes. SELECT DISTINCT Ville FROM Joueurs L ensemble de résultats de cette commande SELECT affiche exactement ce que vous souhaitez : une seule occurrence de chaque ville distincte (ou unique) trouvée dans la table Joueurs. On peut également utiliser le mot-clé DISTINCT sur plusieurs colonnes. Modifions l exemple précédent en demandant à la fois la ville et le département dans la table Joueurs. Notre nouvelle commande SELECT se présente sous cette forme : SELECT DISTINCT Département, Ville FROM Joueurs Cette commande SELECT retourne un ensemble de résultats qui contient des enregistrements uniques ; si des villes de départements différents portent le même nom, elles ne sont pas considérées comme des doublons et sont toutes affichées. Le mot-clé DISTINCT est un outil très puissant et son utilisation est limitée au cas où vous voulez réellement voir des lignes uniques dans votre ensemble de résultats. Tri des informations Au début de ce chapitre, nous avons dit que l opération SELECT pouvait être divisée en trois opérations : la commande SELECT, l expression SELECT et la requête SELECT. Nous avons également dit qu il était possible de combiner ces opérations de différentes manières afin de répondre à des requêtes complexes. Toutefois, il faut combiner ces opérations pour trier les lignes d un ensemble de résultats. Par définition, les lignes d un ensemble de résultats qui sont retournées par une commande SELECT ne sont pas triées ; leur ordre d apparition dépend de leur position physique dans la table. Le seul moyen de trier l ensemble de résultats est d incorporer la commande SELECT au sein d une requête SELECT, comme le montre la Figure 4.10. On définit une requête SELECT comme une commande SELECT accompagnée d une clause ORDER BY. C est la clause ORDER BY de la requête SELECT qui permet de spécifier l ordre des lignes de l ensemble de résultats final. Comme vous l apprendrez par la suite, on peut incorporer une commande SELECT au sein d une autre commande SELECT ou d une expression SELECT pour répondre à des questions très complexes. En revanche, la requête SELECT ne peut pas être incorporée à n importe quel niveau. INFO Dans ce livre, nous utilisons la terminologie de la norme ANSI ou encore celle en usage dans les bases de données les plus courantes. Cependant, la norme ANSI ne définit la clause ORDER BY que comme élément d un curseur, à savoir un objet créé à l intérieur d un programme d application. Une étude approfondie des curseurs dépasse le cadre de cet ouvrage. Dans la mesure où de nombreuses mises en œuvre de autorisent l inclusion d une clause ORDER BY à la fin d une commande SELECT, nous avons inventé le terme requête SELECT pour décrire ce type de commande.

Création d une requête simple CHAPITRE 4 75 Figure 4-10 Syntaxe de la requête SELECT. La clause ORDER BY permet de trier l ensemble de résultats sur une ou plusieurs colonnes en précisant pour chaque colonne si l ordre est croissant ou décroissant. Les seules colonnes pouvant être utilisées dans la clause ORDER BY sont celles qui sont actuellement présentées dans la clause SELECT. (Bien que cette exigence soit spécifiée dans la norme, certains logiciels l ignorent totalement. Dans les exemples de ce livre, nous suivons la norme ). Quand vous utilisez plusieurs colonnes dans une clause ORDER BY, séparez chaque colonne par une virgule. La requête SELECT retourne un ensemble de résultats définitif une fois que le tri est terminé. INFO La clause ORDER BY n affecte pas l ordre physique des lignes de la table. Si vous avez besoin de modifier l ordre physique des lignes, reportez-vous à la documentation de vos logiciels. Ordre de tri Avant d étudier des exemples de requêtes SELECT, il faut examiner le concept de séquence de classement (ou ordre de tri). La manière dont la clause ORDER BY trie les informations dépend de l ordre de tri utilisé par votre logiciel de base de données. La séquence de classement détermine l ordre de préséance de chaque caractère listé dans le jeu de caractères de la langue utilisé par votre système d exploitation. Par exemple, elle décide si les lettres minuscules sont triées avant les lettres majuscules ou bien si la différence entre les minuscules et les majuscules est appliquée. Vérifiez la documentation de votre base de données et consultez éventuellement votre administrateur de base de données pour déterminer l ordre de tri par défaut. Ordonner La clause ORDER BY permet de présenter de manière plus pertinente les informations extraites de la base de données. Ce principe s applique aussi bien aux requêtes simples qu aux requêtes complexes. Vous pouvez à présent reformuler les requêtes pour qu elles soient triées. Par exemple, une question telle que : «Quels sont les types de cours que nous proposons actuellement?» peut être reformulée ainsi : «Listez les types de cours que nous proposons et montrez-les dans l ordre alphabétique.»

76 Les bases de PARTIE 2 Avant d étudier les requêtes SELECT, il faut rectifier la manière dont nous définissons une commande de traduction. Cela implique l ajout d une nouvelle section à la fin de la commande de traduction pour prendre en compte les nouvelles exigences de tri spécifiées dans la requête. Utilisez cette nouvelle forme pour définir la commande de traduction. Sélectionner <élément> dans la <source> et triez par <colonne(s)> Maintenant que votre requête va inclure des expressions telles que «Triez les résultats par ville», «Montrez-les dans l ordre chronologique» ou bien «Listez-les par nom et prénom», il nous faut étudier soigneusement la requête pour déterminer les colonnes devant être utilisées à des fins de tri. Vous y parviendrez facilement car la plupart des gens utilisent ce genre d expressions et les colonnes nécessaires pour le tri sont habituellement évidentes. Une fois que vous avez identifié la ou les colonnes appropriées, utilisez-les pour remplacer <colonne(s)> dans la commande de traduction. Prenons un exemple pour mieux comprendre le fonctionnement : Énoncé Traduction Nettoyage «Listez les types de cours que nous proposons et montrez-les dans l ordre alphabétique.» Sélectionner la catégorie à partir de la table des cours et trier par catégorie Sélectionner [SELECT] la catégorie à partir de [FROM] la table des cours et trier par [ORDER BY] catégorie SELECT Catégorie FROM Cours ORDER BY Catégorie Dans cet exemple, on suppose que Catégorie sera utilisé pour le tri car c est la seule colonne indiquée dans la requête. On peut également supposer que le tri doit être réalisé dans l ordre croissant car rien n indique le contraire dans la requête. Cette supposition est tout à fait fondée. Selon la norme, le tri croissant est utilisé par défaut si aucun ordre de tri n est spécifié. Toutefois, si vos voulez être parfaitement explicite, il suffit d insérer ASC après Catégorie dans la clause ORDER BY. Dans la requête suivante, la colonne de tri est définie plus clairement : Énoncé «Montrez-moi une liste des fournisseurs selon l ordre de leur code postal» Traduction Sélectionner le nom du fournisseur et son code postal à partir de la table des fournisseurs et trier par code postal Nettoyage Sélectionner [SELECT] le nom du fournisseur et son code postal à partir de [FROM] la table des fournisseurs et trier par [ORDER BY] code postal SELECT NomFournisseur, CodePostalFournisseur FROM Fournissseurs ORDER BY CodePostalFournisseur En règle générale, les personnes concernées vous diront si elles veulent voir les informations dans l ordre décroissant. Dans ce cas, il faut afficher l ensemble de résultats dans l ordre inverse : insérez le mot-clé DESC après la colonne appropriée dans la clause ORDER BY. Par exemple, voici comment modifier la commande SELECT de l exemple précédent pour voir les informations triées par code postal dans l ordre décroissant :

Création d une requête simple CHAPITRE 4 77 SELECT NomFournisseur, CodePostalFournisseur FROM Fournisseurs ORDER BY CodePostalFournisseur DESC L exemple suivant illustre une requête plus complexe qui nécessite un tri sur plusieurs colonnes. La seule différence entre cet exemple et les deux précédents est qu il utilise deux colonnes dans la clause ORDER BY. Notez que les colonnes sont séparées par des virgules, ce qui est conforme à la syntaxe exposée dans le diagramme de la Figure 4.10. Énoncé Traduction Nettoyage «Affichez les noms de nos employés avec leur numéro de téléphone et leur matricule et listez les par ordre alphabétique de nom et de prénom» Sélectionner le nom, le prénom, le téléphone et le numéro d employé à partir de la table des employés et trier par le nom et le prénom Sélectionner [SELECT] le nom, le prénom, le téléphone et le numéro d employé à partir de [FROM] la table des employés et trier par [ORDER BY] le nom et le prénom SELECT Nom, Prénom, Téléphone, NumEmployé FROM Employés ORDER BY Nom, Prénom Une des opérations les plus intéressantes pouvant être réalisée avec les colonnes dans une clause ORDER BY est la spécification d un ordre de tri différent pour chaque colonne. Dans l exemple précédent, vous pouvez spécifier un ordre décroissant pour le nom et un ordre croissant pour le prénom. La commande SELECT se présente alors sous cette forme : SELECT Nom, Prénom, Téléphone, NumEmployé FROM Employés ORDER BY Nom DESC, Prénom ASC Bien qu il ne soit pas nécessaire d utiliser explicitement le mot-clé ASC, la commande est plus lisible en sa présence. L exemple précédent permet de se poser une question intéressante : l ordre des colonnes dans la clause ORDER BY a-t-il de l importance? La réponse est Oui! L ordre est important car votre base de données évalue les colonnes de la clause ORDER BY de la gauche vers la droite. Sauvegarde Vous devez sauvegarder vos commandes SELECT et tous les bons logiciels de base de données en donnent la possibilité. La sauvegarde de vos commandes permet de ne pas les recréer chaque fois que vous posez la même question à la base de données. Quand vous sauvegardez une commande SELECT, donnez-lui un nom significatif qui vous aidera à vous souvenir du type d information délivré par la commande. Si votre logiciel de base de données le permet, écrivez un bref commentaire décrivant l objet de la requête. Cette description vous rafraîchira la mémoire quand vous serez de nouveau confronté à une commande SELECT écrite plusieurs mois auparavant.

78 Les bases de PARTIE 2 Une commande SELECT sauvegardée est parfois appelée requête dans certains logiciels et vue dans d autres. Quelle que soit la dénomination, chaque logiciel de base de données permet d exécuter la commande sauvegardée et de travailler avec son ensemble de résultats. INFO Dans cet ouvrage, nous employons le terme requête pour représenter une commande SELECT sauvegardée. Deux méthodes peuvent être utilisées pour exécuter une requête. La première est interactive et implique une barre d outils ou une grille de saisie. La seconde utilise un éditeur de code. Vous utiliserez essentiellement la première méthode ; l autre méthode ne sera envisagée que quand vous commencerez à étudier le langage de programmation de votre base de données. Nous nous limiterons ici à vous apprendre comment créer et utiliser des commandes. Exemples de commandes Après avoir étudié les caractéristiques de base de la commande SELECT, nous allons examiner quelques exemples en utilisant les bases de données proposées sur le CD-Rom. Après chaque commande, nous avons inclus un exemple de l ensemble de résultats retourné par la commande. Le nom qui apparaît immédiatement au-dessus de l ensemble de résultats a deux objectifs : il est utilisé pour identifier l ensemble de résultats lui-même, et c est le nom assigné à la commande de l exemple. Au cas où vous vous demanderiez pourquoi nous avons assigné un nom à chaque commande, c est tout simplement parce que nous les avons sauvegardés! En fait, nous avons sauvegardé toutes les commandes qui apparaissent dans les exemples de ce livre. Chaque commande est stockée dans la base de données appropriée; et vous pouvez recopier sur votre disque dur les bases de données qui se trouvent sur le CD-Rom. Cela vous permet de travailler de manière interactive avec ces commandes avant d essayer de les écrire vous-même. Base de données Ventes Énoncé «Montrez-moi les noms de tous nos fournisseurs» Traduction Sélectionner le nom du fournisseur à partir de la table des fournisseurs Nettoyage Sélectionner [SELECT] le nom du fournisseur à partir de [FROM] la table des fournisseurs SELECT NomFournisseur FROM Fournisseurs Énoncé «Quels sont les noms et les prix de tous les produits que nous vendons?» Traduction Sélectionner le nom du produit, le prix public à partir de la table des produits Nettoyage Sélectionner [SELECT] le nom du produit, le prix public à partir de [FROM] la table des produits SELECT NomProduit, PrixPublic FROM Produits

Création d une requête simple CHAPITRE 4 79 Énoncé «Dans quelles villes habitent nos clients?» Traduction Sélectionner sans doublon la ville à partir de la table des clients Nettoyage Sélectionner [SELECT] sans doublon [DISTINCT] la ville à partir de [FROM] la table des clients SELECT DISTINCT VilleClient FROM Clients Nom des fournisseurs (10 lignes) NomFournisseur Shinoman Taupe Bike Le guidon dans les nuages ProFormance Pédale douce Vélo 2000 Le paradis du VTT Vélo en gros VTT Star Poulie d'or Produits vendus (40 lignes) NomProduit PrixPublic VTT Trek 9000 1 200,00 VTT Eagle FS-3 1 800,00 Compteur Dog Ear 75,00 Pneus tout temps Victoria Pro 54,95 Rétroviseur Dog Ear 7,45 VTT Viscount 635,00 Compteur sans fil Viscount C-500 49,00 Antivol Kryptonite Advanced 2000 50,00 Antivol Nikoma Lok-Tight 33,00 Casque Viscount Microshell 36,00 Lignes supplémentaires Villes des clients (17 lignes) VilleClient Auxerre Bordeaux Chalon-sur-Saône Dijon Etretat Lille Lyon Marseille Metz Montpellier Paris Périgueux Saint-Etienne Strasbourg Valence Villeurbanne