IN311 Introduction aux Bases de Données TP Tennis Licence Informatique Université de Versailles St-Quentin. Benjamin Nguyen 2011-2012



Documents pareils
MODE OPERATOIRE OPENOFFICE BASE

Création d'un site dynamique en PHP avec Dreamweaver et MySQL

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

Raja Bases de données distribuées A Lire - Tutoriel

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

Tutoriel Drupal version 7 :

Création d'un questionnaire (sondage)

1. Création d'un état Création d'un état Instantané Colonnes Création d'un état Instantané Tableau... 4

1 Introduction et installation

I. MySQL : Serveur et SGBD

DOSSIER D'ACTIVITES SUR LE PHP N 03 Créer une base de données MySQL avec PHPMyAdmin

Assistance à distance sous Windows

Télécharger et Installer OpenOffice.org sous Windows

Traitement de texte : Quelques rappels de quelques notions de base

Installation de TeamLab sur un serveur local Ce guide est destiné aux utilisateurs ayant des connaissances de base en administration Windows

Guide de l'agent de notification

Débuter avec OOo Base

Installation locale de JOOMLA SEPIA

UTILISATION DE L'APPLICATION «PARTAGE DE FICHIERS EN LIGNE»

Procédure d'installation complète de Click&Decide sur un serveur

Guide d'installation du connecteur Outlook 4

Internet : Naviguer en toute sérénité

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

PHP 5. La base de données MySql. A. Belaïd 1

Paramétrages de base de la plateforme

Premiers pas sur e-lyco

Edutab. gestion centralisée de tablettes Android

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

Comment bien démarrer avec. NetAirClub GUIDE ADMINISTRATEUR V1.5. Table des matières

Notice d'utilisation Site Internet administrable à distance

Un serveur web, difficile?

RapidMiner. Data Mining. 1 Introduction. 2 Prise en main. Master Maths Finances 2010/ Présentation. 1.2 Ressources

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

TP base de données SQLite. 1 Différents choix possibles et choix de SQLite : 2 Définir une base de donnée avec SQLite Manager

CONNECTEUR PRESTASHOP VTIGER CRM

Panda Managed Office Protection. Guide d'installation pour les clients de WebAdmin

TP3 : Creation de tables 1 seance

Installation de Windows 2000 Serveur

OpenOffice Base Gestionnaire de Base de Données

Créer une base de données

Guide d'utilisation du Serveur USB

Olivier Mondet

Encryptions, compression et partitionnement des données

MEDIAplus elearning. version 6.6

Stellar Phoenix Outlook PST Repair - Technical 5.0 Guide d'installation

Manuel d'utilisation d'apimail V3

Utilisation de GalaxShare

Installation de Windows 2003 Serveur

Installation 1K-Serveur

À propos du Guide de l'utilisateur final de VMware Workspace Portal

Guide d'installation sous Windows

ContactForm et ContactFormLight - Gestionnaires de formulaire pour Prestashop Edité par ARETMIC S.A.

IBM SPSS Statistics Version 22. Instructions d'installation sous Windows (licence simultanée)

SweetyPix, mode d'emploi

IBM SPSS Statistics Version 22. Instructions d'installation sous Windows (licence nominative)

Extension WebEx pour la téléphonie IP Cisco Unified

Configuration d'un annuaire LDAP

DOCUMENTATION VISUALISATION UNIT

Acronis Backup & Recovery 10 Advanced Server Virtual Edition. Guide de démarrage rapide

KeePass - Mise en œuvre et utilisation

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

Compte-rendu de projet de Système de gestion de base de données

Service WEB, BDD MySQL, PHP et réplication Heartbeat. Conditions requises : Dans ce TP, il est nécessaire d'avoir une machine Debian sous ProxMox

Guide Utilisateur - Guide général d'utilisation du service via Zdesktop ou Webmail v.8. Powered by. - media-2001.communication &.

Création de Sous-Formulaires

YAPBA M. Logiciel libre de suivi de vos comptes

Vtiger CRM - Prestashop Connector

Foire aux Questions Note: Les réponses aux questions correspondent à la version Mise en route

Intranet d'établissement avec Eva-web Installation configuration sur serveur 2000 ou 2003 Document pour les administrateurs

Guide de démarrage de OPEN OFFICE. OpenOffice. Suite bureautique INSTALLATION SUR WINDOWS

AD FS avec Office 365 Guide d'installation e tape par e tape

Guide d'installation

Guide Utilisateur - Guide général d'utilisation du service via Zdesktop ou Webmail v.8. Powered by. Version EXOCA 1

Objectifs du TP : Initiation à Access

(Fig. 1 :assistant connexion Internet)

Virtualisation de Windows dans Ubuntu Linux

Guide de démarrage rapide Centre de copies et d'impression Bureau en Gros en ligne

Groupe Eyrolles, 2003, ISBN : X

Administration du site (Back Office)

2010 Ing. Punzenberger COPA-DATA GmbH. Tous droits réservés.

WordPress :: Migrer son site du local vers le serveur en ligne

Auguria_PCM Product & Combination Manager

FAIRE SES COMPTES AVEC GRISBI

Navigation dans Windows

Une mise à jour du logiciel du lecteur FreeStyle InsuLinx est nécessaire. Veuillez lire l'ensemble de ce document avant de commencer.

BADPLUS V5 MANUEL D'UTILISATION. Imports de données joueurs à partir de la base fédérale en ligne Poona. Stéphan KIEFFER - Dominique BOSSERT

Gestion d Active Directory à distance : MMC & Délégation

FileMaker Server 13. Guide de démarrage

Table des matières. 1 À propos de ce manuel Icônes utilisées dans ce manuel Public visé Commentaires...

Logiciels concernés. Situation. Ciel et le pont comptable. Note conçue et rédigée par Jalons sprl tous droits réservés - 27/06/2007.

Espace FOAD IRTS Guide de l étudiant Septembre 2009

Comment Définir une Plage de données Pour Utiliser Fonctions de Filtres et de Tris

Client Kiwi Backup : procédures d'installation et de mise à jour. Gilles Arnoult, Clément Varaldi

CREATION WEB DYNAMIQUE

Petit guide à l'usage des profs pour la rédaction de pages pour le site Drupal du département

Date : juin 2009 AIDE SUR LES CERTIFICATS. Comment sauvegarder et installer son certificat

INFORM :: DEMARRAGE RAPIDE A service by KIS

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

Transcription:

IN311 Introduction aux Bases de Données TP Tennis Licence Informatique Université de Versailles St-Quentin Benjamin Nguyen 2011-2012 1

1 Installation du logiciel easyphp Nous présentons dans cette section l'installation d'un serveur web, d'un SGBD ainsi que la conguration du SGBD. Notre choix de logiciels s'est porté sur la distribution easyphp 1, que l'on peut télécharger et utiliser gratuitement depuis le site http://www.easyphp.org/, et nous allons détailler son lancement sous Windows. Nous vous laissons le soin d'installer correctement le logiciel 2, qui se compose d'une part du serveur web nommé Apache avec l'interpréteur PHP, et du SGBD MySQL. Notez bien le répertoire d'installation (nous le nommerons par la suite MYSQLHOMEDIR), il vous sera utile par la suite pour y mettre les chiers.html et.php. Lancez ensuite easyphp. Vous devriez en principe voir apparaître dans la barre des programmes (en bas à droite) une lettre 'e' qui correspond à l'icône représentant le programme (voir la gure 1). Figure 1 Icône EasyPHP En double cliquant sur l'icône, vous ferez apparaître la fenêtre d'état du serveur, symbolisé par deux feux de signalisation. Le feu de gauche correspond au serveur web Apache, et le feu de droite correspond au SGBD MySQL. En principe les feux doivent être au vert (voir la gure 2). Si ce n'est pas le cas, le problème vient la plupart du temps du fait qu'easyphp n'a pas été lancé 1. Il existe d'autres distributions similaires, appelés communément des WAMP - Windows Apache MySQL PHP/Python/Perl - dont une liste peut être trouvée sur http: //fr.wikipedia.org/wiki/comparaison_de_wamp. 2. Dans nos illustrations, nous utilisons la version 5.3.5 de EasyPHP, qui est la dernière version stable datant du 8 janvier 2011. 2

Figure 2 Fenêtre d'état du serveur EasyPHP en mode administrateur 3. Une fois que le serveur et le SGBD fonctionnent, vous pouvez visualiser le contenu du répertoire des chiers qui peuvent être achés par le serveur, en vous rendant dans le répertoire www qui se trouve dans le répertoire d'installation de easyphp. En principe, ce répertoire est vide. Copiez dans ce répertoire le répertoire phpmyadmin qui doit se trouver dans le répertoire d'installation de easyphp. En faisant un clic droit et en choisissant l'option Web Local, un navigateur Web, comme par exemple Internet Explorer, Firefox, Chrome, etc. sera automatiquement lancé 4. Notez l'adresse (URL) qui apparaît dans la barre : il s'agit de quelque chose ressemblant http://localhost:8888/ ou http://127.0.0.1:8888/. Si aucun numéro de port n'est indiqué, le port par défaut est utilisé, à savoir le port 80. Vous devriez alors voir apparaître la page montrée en Figure 1. 3. Attention, sur certaines versions de Windows, en particulier Vista et Seven, pour des raisons de sécurité il y a parfois des restrictions en écriture sur MYSQLHOMEDIR dans lequel est installé easyphp. Pour éviter ce type de problème, lancez toujours easyphp en mode administrateur, c'est-à-dire au lieu de double cliquer sur l'icône pour lancer le programme, faites un clic droit et choisissez l'option Exécuter en tant qu'administrateur. 4. Ceci fonctionne même si votre machine n'est pas connectée sur Internet, puisqu'il s'agit d'une adresse locale. Bien entendu, si vous n'êtes pas connecté sur Internet, personne d'autre ne pourra visualiser vos pages Web. Si vous êtes connecté, alors d'autres personnes pourront visualiser vos pages en tapant dans la barre l'adresse IP de votre machine. Si jamais vous voulez ainsi créer un serveur Web, n'oubliez pas de bien sécuriser la base de données par mot de passe, et d'ouvrir le port correspondant (par exemple 8888) sur vos divers parefeux. Utilisez dans ce cas de préférence le port 80 qui peut être reconguré en faisant un clic droit sur l'icône d'easyphp et en choisissant le menu conguration->apache et en remplaçant la ligne Listen 127.0.0.1 :8888 par Listen 127.0.0.1 :80 3

Figure 3 Navigateur Web 4

Cette page ache le contenu du répertoire www, donc en principe vous voyez un lien nommé phpmyadmin. Si vous rajoutez d'autres chiers dans ce répertoire, et que vous rechargez la page, vous les verrez apparaître dans la liste. En cliquant sur le lien phpmyadmin vous allez lancer l'interface graphique PHPMyAdmin, qui est en fait un ensemble de programmes PHP permettant de gérer la base de données. Si vous voyez s'acher la fenêtre suivante (Figure 4) alors tout est bon et vous pouvez continuer! Nous considérons dans la suite que vous n'avez pas mis de mot de passe (ce qui est la conguration par défaut, bien que ce ne soit pas recommandé). 2 Schéma de la base Nous allons construire une base de données sur les matchs de tennis. La dénition des tables est donné en gure??. Nous avons souligné les clés primaires, dont certaines sont multivaluées. Notez que pour des raisons de simplicité, nous avons choisi le nom du joueur comme clé primaire. Ceci signie qu'il ne peut pas y avoir deux joueurs possédant le même nom de famille (c'est typiquement une question à poser aux élèves). Pour simplier, le score sera stocké comme une chaîne de caractères (par exemple '6/3-6/4'), et le rang également ('gagnant', 'naliste', etc.). Voici maintenant la dénition des contraintes de clés étrangères : rencontre(nomgagant) REFERENCES joueur(nom) rencontre(nomperdant) REFERENCES joueur(nom) rencontre(nomtournoi) REFERENCES tournoi(nom) gain(nomjoueur) REFERENCES joueur(nom) gain(nomtournoi) REFERENCES tournoi(nom) sponsor(nomtournoi) REFERENCES tournoi(nom) Notons que d'une manière générale, nous vous conseillons d'utiliser des noms sans espaces, sinon vous seriez obligé de les inclure dans des cotes inversées, ce qui est peu pratique. De même, n'utilisez que des lettres minuscules, sans accents, pour réduire la confusion. Vous pouvez créer autant de bases diérentes que vous voulez, et également gérer les droits des utilisateurs par rapport à ces bases, ce qui peut être utile dans le cas de la conguration d'un serveur utilisé par plusieurs utilisateurs. Alternativement, et c'est la solution que nous préconisons, il est possible d'installer le logiciel easyphp sur chacun des ordinateurs utilisés. 5

Figure 4 Page principale EasyPHP 6

joueur(nom :chaine, prenom :chaîne, age :entier, nationalite :chaîne) rencontre(nomgagnant, nomperdant, nomtournoi, annee :entier, score :chaîne) gain(nomjoueur, nomtournoi, annee :entier, rang :chaîne, prime :entier) sponsor(nom, nomtournoi, annee :entier, montant :entier) tournoi(nom :chaîne, pays :chaîne) Figure 5 Schéma de la base D'une séance sur l'autre, il est préférable d'exporter la structure et le contenu des bases de données, pour pouvoir recommencer si jamais les chiers sont eacés. Création de la base Remplissez le champ Créer une base de données avec le nom que vous souhaitez donner à votre base, par exemple tennis. Le champ interclassement permet d'indiquer comment sont stockées les chaînes de caractères dans la base, et en particulier de savoir s'il faut faire une diérence entre les majuscules et les minuscules (CS signiant Sensible à la casse, et CI signiant Insensible à la casse, et ensuite le type de langue à utiliser). En cliquant sur le nom de la base de données (sur la Figure 6, tennis), on peut voir la liste des tables présentes dans cette base (pour l'instant aucune). Cette touche vous permet de revenir en quelque sorte au menu principal de la base de données sur laquelle vous travaillez. Il est possible notamment de créer ou d'eacer des tables. L'interface d'administration se divise en deux parties : la partie gauche qui liste les tables déjà disponibles dans la base de données, et la partie droite d'administration à proprement parler. Dans la partie gauche, il y a une petite icône "SQL" qui sert à ouvrir une fenêtre pour entrer des instructions SQL. Cette fenêtre est à ouvrir lorsque vous aurez sélectionné la base. Nous reviendrons plus tard sur cette fenêtre. Création des tables Il existe deux manières de créer des tables, l'une est graphique, l'autre utilise des instructions SQL. La manière graphique est plus simple, mais elle ne permet pas de gérer beaucoup de contraintes, en particulier, elle ne permet pas de gérer les contraintes de clés étrangères, ce qui est trop limitatif. Il faut impérativement commencer en créant les tables 7

Figure 6 Base de données Tennis 8

qui n'ont pas de clés étrangères, puisque ces clés référencent des champs de tables déjà existantes. Question 1 : Donnez un ordre correct pour la création des tables. Réponse : On peut créer dans l'ordre qu'on souhaite les tables n'ayant pas de clé étrangère, c'est-à-dire la table joueur ou la table tournoi. Dès qu'on a créé une table, on peut créer toutes les tables qui ne font référence qu'à des tables existantes. Ainsi, dès qu'on a créé la table tournoi on peut créer la table sponsor. Question 2 : Créez les tables, en respectant bien les contraintes d'intégrité référentielles. Réponse : Dans l'interface graphique, entrez le nom de la table (par exemple joueur) et le nombre de colonnes (4). S'ouvre une nouvelle page permettant de congurer les colonnes de la table. Notez qu'il est possible de rajouter ou supprimer des colonnes par la suite, même si ce n'est pas recommandé, en particulier s'il y a déjà des données dans la table : en eet une valeur par défaut sera aectée pour cette nouvelle colonne. Il ne faut remplir que les champs : Champ, Type, Taille et Index. Index permet de dénir en particulier le fait qu'un attribut fait partie de la clé primaire (PRIMARY KEY). Nous illustrons ceci dans la Figure 7). Il faut indiquer les lignes des attributs qui participent à la clé primaire (ici seulement l'attribut nom). Les champs de type chaîne de caractères utilisent le type VARCHAR. La taille indique le nombre de caractères maximal. Les champs numériques utilisent le type INT pour les entiers (la taille indique le nombre de chires) ou DECIMAL pour les nombres à virgule. Dans ce cas la taille est composée de deux valeurs X, Y où X représente le nombre de chires total et Y le nombre de chires après la virgule. Il est également très important de choisir comme type de la table la valeur InnoDB, an de permettre la gestion des clés étrangères. Nous ne nous préoccupons pas des autres valeurs. Enn, cliquez en bas à droite de l'écran sur le bouton Sauvegarder pour naliser la création de la table. Vous remarquerez qu'une requête SQL est générée lorsque vous créez une table (en appuyant sur le bouton sauvegarder, de la forme CREATE TABLE...). Conservez cette requête dans un chier texte pour une utilisation ultérieure : CREATE TABLE `joueur` ( `nom` VARCHAR( 30 ) NOT NULL, `prenom` VARCHAR( 30 ) NOT NULL, `age` INT( 3 ) NOT NULL, `nationalite` VARCHAR( 30 ) NOT NULL, 9

Figure 7 Création de la table joueur PRIMARY KEY ( `nom` ) ); Les guillemets sont générés automatiquement, et ne servent qu'à l'utilisation de noms de colonnes avec des espaces. D'une manière générale, si vous n'utilisez pas d'espaces, inutile d'utiliser ces guillemets, qui poseront certainement problème aux élèves, puisqu'il s'agit des guillemets accessibles avec la touche clavier ALT-GR - 7 et non pas la simple touche 4. Créez de même la table tournoi, qui possède 2 colonnes, en utilisant l'éditeur graphique. Ensuite, nous allons utiliser la fenêtre SQL pour écrire le code SQL de création de tables nécessitant une ou plusieurs clés étrangères. Pour ce faire, nous écrivons une requête similaire à celle qu'on vient de générer, en ajoutant les lignes de clés étrangères : CREATE TABLE rencontre( nomgagnant varchar(30), nomperdant varchar(30), nomtournoi varchar(30), annee int(4), score varchar(15), PRIMARY KEY (nomgagnant, nomperdant, nomtournoi, annee), FOREIGN KEY (nomgagnant) REFERENCES joueur (nom), FOREIGN KEY (nomperdant) REFERENCES joueur (nom), FOREIGN KEY (nomtournoi) REFERENCES tournoi (nom) ) ENGINE=InnoDB; Pour lancer la création de la table, il faut appuyer sur exécuter. On crée ensuite les tables sponsor et gain avec les requêtes suivantes, à taper dans la fenêtre SQL. Même s'il est possible d'exécuter plusieurs requêtes à la 10

suite, nous vous suggérons d'en taper une, puis de l'exécuter, et ensuite de taper la suivante, en vériant qu'elle ait bien fonctionné. CREATE TABLE sponsor( nom varchar(30), nomtournoi varchar(30), annee int(4), montant int(7), PRIMARY KEY (nom, nomtournoi, annee), FOREIGN KEY (nomtournoi) REFERENCES tournoi (nom) ) ENGINE=InnoDB; CREATE TABLE gain( nom varchar(30), nomtournoi varchar(30), annee int(4), rang varchar(30), prime int(6), PRIMARY KEY (nom, nomtournoi, annee), FOREIGN KEY (nom) REFERENCES joueur (nom), FOREIGN KEY (nomtournoi) REFERENCES tournoi (nom) ) ENGINE=InnoDB; Une fois toutes ces tables créées, vous pouvez visualiser le schéma de la base en cliquant sur le lien tennis puis sur l'onglet concepteur comme indiqué dans la Figure 8. Cela permet de contrôler que les contraintes d'intégrité référentielles sont bien placées correctement. 3 Insertion de données En cliquant sur le nom d'une table dans le menu de gauche (par exemple joueur), puis sur insérer, on arrive à un formulaire permettant de remplir une table avec des données (voir Figure 9). Notez une fois de plus le code SQL qui est généré automatiquement, et qui peut vous servir de patron pour écrire d'autres lignes d'insertion. INSERT INTO joueur (nom, prenom, age, nationalite) VALUES ('Federer', 'Roger', '29', 'Suisse'); 11

Figure 8 Schéma de la base Figure 9 Formulaire d'insertion 12

Il faut bien se rappeler les contraintes qui existent sur une table lorsque vous faites des insertions : Comme nom est la clé primaire de la table joueur, il sera impossible d'entrer deux fois un joueur dont le nom serait Federer. De même, il est impossible de créer une rencontre entre deux joueurs, si on ne les a pas préalablement insérés dans la table joueurs. De même pour la table sponsor, il faut d'abord avoir entré le tournoi correspondant. Question 3 : Ajoutez les joueurs Federer, Nadal, Murray, Soderling, Berdych et Djokovic. Réponse : INSERT INTO joueur (nom, prenom, age, nationalite) VALUES ('Nadal', 'Rafael', '24', 'Espagne'), ('Murray', 'Andrew', '23', 'Ecosse'), ('Soderling', 'Robin', '26', 'Suede'), ('Berdych', 'Tomas', '26', 'Rep. Tcheque'), ('Djokovic', 'Novak', '23', 'Serbie'); Vériez que toutes les valeurs sont bien dans la table en cliquant sur joueur dans la barre de menu de gauche. Question 4 : Ajoutez le sponsor BNP-Paribas au tournoi de Roland Garros 2010 avec un montant de 9.000.000 et au tournoi Roland Garros 2011 avec un montant de 10.000.000 Réponse : Il faut commencer par créer le tournoi de Roland Garros, puis ajouter le sponsor pour l'année donnée. Une fois le tournoi créé, on pourra ajouter tous les sponsors que l'on veut. INSERT INTO tournoi (nom, pays) VALUES ('Roland Garros, 'France'); INSERT INTO sponsor (nom, nomtournoi, annee, montant) VALUES ('BNP-Paribas', 'Roland Garros, '2010', '9000000'), ('BNP-Paribas', 'Roland Garros, '2011', '10000000'); Question 5 : Ajoutez les matches suivants : Open d'australie 2010 : Federer bat Murray (6/3-6/4-7/6) Roland-Garros 2010 : Nadal bat Soderling (6/4-6/2-6/4) Wimbledon 2010 : Nadal bat Berdych (6/3-7/5-6/4) US Open 2010 : Nadal bat Djokovic (6/4-5/7-6/4-6/2) Open d'australie 2011 : Djokovic bat Murray (6/4-6/2-6/3) 13

Remplissez également la table gain sachant que le gagnant remporte 1.000.000 et le naliste 500.000. Réponse : Il faut d'abord créer les tournois inexistants. Notez l'utilisation du caractère d'échappement \' pour indiquer l'apostrophe. INSERT INTO tournoi (nom, pays) VALUES ('Open d\'australie', 'Australie'), ('Wimbledon', 'Royaume Uni'), ('US Open', 'Etats-Unis'); Puis on peut entrer les rencontres (comme les joueurs ont déjà été créés) INSERT INTO rencontre (nomgagnant, nomperdant, nomtournoi, annee, score) VALUES ('Federer', 'Murray', 'Open d\'australie', '2010', '6/3-6/4-7/6'), ('Nadal', 'Soderling', 'Roland-Garros', '2010', '6/4-6/2-6/4'), ('Nadal', 'Berdych', 'Wimbledon', '2010', '6/3-7/5-6/4'), ('Nadal', 'Djokovic', 'US Open', '2010', '6/4-5/7-6/4-6/2'), ('Djokovic', 'Murray', 'Open d\'australie', '2011', '6/4-6/2-6/3'); On peut ensuite générer automatiquement les gains par les deux requêtes suivantes (On peut bien sûr aussi les rentrer tous à la main...) INSERT INTO gain (nom, nomtournoi, annee, rang, prime) SELECT nomgagnant, nomtournoi, annee, 'gagnant', 1000000 FROM rencontre; INSERT INTO gain (nom, nomtournoi, annee, rang, prime) SELECT nomperdant, nomtournoi, annee, 'finaliste', 500000 FROM rencontre; 4 Requêtes d'interrogation Le mieux serait de rentrer davantage de données dans la base pour que les requêtes donnent des résultats plus 'amusants', mais les faire rentrer par les élèves prend souvent beaucoup de temps. Nous vous conseillons donc d'avoir déjà à disposition un chier contenant des instruction INSERT... que vous pouvez ensuite distribuer aux élèves. De même, vous pouvez préparer un chier avec les instructions de création de table pour ceux qui auraient du mal. Le principe de travailler sur machine ne change rien aux requêtes qu'il 14

est possible de poser, cela permet d'une part de vérier que la syntaxe est correcte, et d'autre part de voir si les résultats obtenus sont corrects. Voici quelques exemples de questions à poser, avec le code SQL de la requête correspondante. Bien entendu, selon le contenu de votre base, vous pouvez être amené à moduler l'énoncé de la question. Requêtes faciles : Acher le nom des joueurs dont le prenom est 'Roger'. SELECT j.nom FROM joueur j WHERE j.prenom = 'Roger' Acher les annee où s'est déroulé 'Roland Garros (Indication : Un tournoi s'est déroulé s'il y a des rencontres dans la base). SELECT r.annee WHERE r.nomtournoi = 'Roland-Garros' Requêtes avec jointure : Acher le nom et l'age des joueurs ayant gagné à 'Roland Garros, peu importe l'année. SELECT j.nom, j.age, joueur j WHERE r.nomgagnant = j.nom AND r.nomtournoi = 'Roland-Garros' Acher le nom des sponsors ayant sponsorisés un tournoi ayant lieu en 'France' SELECT s.nom FROM sponsor s, tournoi t WHERE t.nom = s.nomtournoi AND t.pays = 'France' Notez qu'on obtient ici 2 résultats avec la même valeur, comme 'BNP- Paribas' a sponsorisé un tournoi français pendant plusieurs années. On peut rajouter le mot clé distinct pour enlever les doublons, ou bien faire un regroupement dans une clause GROUP BY. Acher le nom et prenom des joueurs ayant gagné un tournoi sponsorisé par 'BNP-Paribas' SELECT j.nom, j.prenom FROM joueur j, rencontre r, sponsor s WHERE j.nom = r.nomgagnant 15

AND r.nomtournoi = s.nomtournoi AND s.nom = 'BNP-Paribas' Requêtes ensemblistes ou imbriquées : Acher le nom de tous les joueurs ayant joué au moins un match. SELECT r.nomgagnant as nom UNION SELECT r.nomperdant as nom Acher le nom des joueurs ayant joué à 'Wimbledon' quel que soit l'annee. SELECT r.nomgagnant as nom WHERE r.nomtournoi = 'Wimbledon' UNION SELECT r.nomperdant as nom WHERE r.nomtournoi = 'Wimbledon' Acher le nom des joueurs ayant gagné tous leurs matchs. SELECT r.nomgagnant as nom EXCEPT SELECT r.nomperdant as nom La commande EXCEPT n'étant pas implémentée en MySQL, il faut utiliser une requête imbriquée. SELECT distinct (r.nomgagnant) as nom WHERE r.nomgagnant NOT IN ( SELECT p.nomperdant as nom FROM rencontre p ) Acher le nom des joueurs n'ayant jamais gagné moins de 1.000.000 par tournoi. SELECT distinct(g.nom) FROM gain g WHERE g.prime >= 1000000 16

AND g.nom NOT IN ( SELECT h.nom FROM gain h WHERE h.prime <1000000 ) On aurait de même pu utiliser un EXCEPT Requêtes aggrégats : Compter le nombre total de matchs joués à l'us Open et acher le résultat dans une colonne nommée nbmatchs. SELECT COUNT(*) as nbmatch WHERE r.nomtournoi = 'US Open' Calculer les gains totaux de 'Nadal' dans une colonne 'gaintotal' SELECT SUM(g.prime) as gaintotal FROM gain g WHERE g.nom = 'Nadal' Acher les nom et les gain (dans une colonne 'gaintotal) des joueurs ayant gagné au moins 1000000 au total. SELECT g.nom, SUM(g.prime) as gaintotal FROM gain g GROUP BY g.nom HAVING SUM(g.prime) >= 1000000 Acher les nom et annee des tournois où la somme versée par les sponsors est supérieure aux gains reversés aux participants. SELECT s.nomtournoi, s.annee FROM sponsor s, gain g WHERE g.nomtournoi = s.nomtournoi AND g.annee = s.annee GROUP BY g.nomtournoi, g.annee HAVING SUM(montant) > SUM(prime) Notez que cette requête ne retourne pas les tournois pour lesquels il n'y a pas eu de matchs, car la somme sur l'ensemble vide n'est pas dénie. 17