Fichier de rejeu Close

Indication Close

A propos de... Close

Commentaire Close

Systèmes d'Information

  • Notions mathématiques
  • Calcul relationnel
  • Algèbre relationnelle
  • Langage de requêtes
  • Arbre de requêtes
  • Exercices
  • Introduction
  • Commandes de bases
  • Langage de définition de données (LDD)
  • Langage de manipulation de données (LMD)
  • Types de données
  • Exercice
  • Présentation
  • Calcul relationnel
  • Algèbre relationnelle
  • Division relationnelle
  • Relation
  • Fonction
  • Application
  • Injection
  • Surjection
  • Bijection
  • Association
  • Exemples
  • Dépendances fonctionnelles
  • Décomposition de relations
  • Inférence logique
  • Normalisation
  • Aux pays des bières
  • Modélisation
  • Exercices
  • Liste des projets
  • Aux pays des bières
  • Au Tournoi des six nations
    • Modèle de données
    • Recherches d’informations
      • Sur une table
      • Sur plusieurs tables
      • Opérations ensemblistes
      • Division relationnelle
      • Fonctions d’agrégat
      • Groupements
    • Arbres de requêtes
      • Sur une table
      • Sur plusieurs tables
      • Opérations ensemblistes
      • Division relationnelle
      • Fonctions d’agrégat
      • Groupements
  • Salles de concerts
  • Généralités
  • Langage SQL
  • Modèle relationnel
  • Généralités
  • SQL
  • Algèbre relationnelle
  • Synthèse
Index

Archives

  • Site Web
  • Sources reStructuredText
  • EniBook 1.618033988
logo

Crédits

© Your Copyright

Aide

En-tête

MenuContenu
Sommaire,
Téléchargements
Aide sur les outils

Pied de page

ChevronAction
Aller en haut de la page courante
Aller en bas de la page courante
Passer à la page précédente
Passer à la page suivante

Au tournoi des Six Nations

Modèle de données

Représentation, en UML, du modèle de données à étudier.

Diagramme de classes du modèle de données.

_images/sixnations_Class_diagram.png

Représentation, en SQL, du modèle de données à étudier.

Création des tables du modèle de données.

DROP TABLE IF EXISTS equipes;
DROP TABLE IF EXISTS joueurs;
DROP TABLE IF EXISTS matchs;
DROP TABLE IF EXISTS selections;

CREATE TABLE equipes (
                      id_equipe CHAR(3) PRIMARY KEY,
                      nom_equipe TEXT,
                      pays TEXT,
                      coach TEXT
                     );
CREATE TABLE joueurs (
                      id_joueur INTEGER PRIMARY KEY AUTOINCREMENT,
                      id_equipe  CHAR(3),
                      nom TEXT,
                      prenom TEXT,
                      position TEXT,
                      nationalite TEXT,
                      naissance DATE,
                      taille  FLOAT CHECK (1 < taille and taille < 3) DEFAULT 1.80,
                      poids FLOAT CHECK (50 < poids and poids < 150) DEFAULT 80,
                      FOREIGN KEY(id_equipe) REFERENCES equipes(id_equipe)
                     );
CREATE TABLE matchs (
                     id_match INTEGER PRIMARY KEY  AUTOINCREMENT,
                     id_locaux CHAR(3),
                     id_visiteurs CHAR(3),
                     jour DATE,
                     horaire TIME,
                     locaux_score INTEGER,
                     visiteurs_score INTEGER,
                     stade TEXT,
                     spectateurs INTEGER,
                     FOREIGN KEY(id_locaux) REFERENCES equipes(id_equipe),
                     FOREIGN KEY(id_visiteurs) REFERENCES equipes(id_equipe)
                    );
CREATE TABLE selections (
                         id_joueur INTEGER NOT NULL,
                         id_match INTEGER NOT NULL,
                         essais SMALLINT DEFAULT 0,
                         transformations SMALLINT DEFAULT 0,
                         penalites SMALLINT DEFAULT 0,
                         PRIMARY KEY(id_joueur,id_match),
                         FOREIGN KEY(id_match) REFERENCES matchs(id_match),
                         FOREIGN KEY(id_joueur) REFERENCES joueurs(id_joueur)
                        );

Exemples d’instances de tables dans une base de données SQLite.

Instances de relations

Table « equipes »
id_equipenom_equipepayscoach
FRAXV de FranceFranceNovès
ANGXV de la RoseAngleterreJones
GALXV du PoireauPays de GallesGatland
IRLXV du TrèfleIrlandeSchmidt
ECOXV du ChardonEcosseCotter
ITAAzzuriItalieBrunel
Table « joueurs »
id_joueurid_equipenomprenompositionnationalitenaissancetaillepoids
1ECOLaidlawGreg1/2 meleeEcosse1985-10-121.7580
2ECOHoggStuartArriereEcosse1992-06-241.880
3ECODunbarAlex3/4 centreEcosse1990-04-231.9180
4ECORussellFinn1/2 ouvertureEcosse1992-09-231.8380
5ECOSwinsonTim2eme ligneAngleterre1987-02-171.9580
6ECOGrayRichie2eme ligneEcosse1989-08-242.0680
7IRLEarlsKeith3/4 centreIrlande1987-10-021.880
8IRLHendersonIain2eme ligneIrlande du Nord1992-02-211.9880
9IRLJacksonPaddy1/2 ouvertureIrlande du Nord1990-04-051.7880
10IRLStanderChristiaan Johan3eme ligne centreAfrique du Sud1992-01-051.8980
11IRLGilroyCraig3/4 aileIrlande du Nord1991-03-111.8380
12IRLRingroseGarry3/4 centreIrlande1995-01-261.8780
13IRLBestRoryTalonneurIrlande du Nord1982-08-151.880
14ANGTe'oBencentreNouvelle-Zélande1987-01-271.8980
15ANGFarrellOwen3/4 centreAngleterre1991-09-241.8880
16ANGDalyElliot3/4 centreAngleterre1992-10-081.8480
17ANGYoungsTomTalonneurAngleterre1987-01-281.7580
18ANGColeDanPilierAngleterre1987-05-091.9180
19FRASlimaniRabahPilierFrance1989-10-181.7880
20FRALopezCamille1/2 ouvertureFrance1989-04-031.7580
21FRAFickouGael3/4 centreFrance1994-03-291.980
22FRASpeddingScottArriereAfrique du Sud1986-05-041.8880
23ITAGoriEdoardo1/2 meleeItalie1990-03-051.7880
24ITACannaCarlo1/2 ouvertureItalie1992-08-251.9180
25ITAParisseSergio3eme ligneArgentine1983-09-121.9680
26GALDaviesJonathan3/4 centreAngleterre1988-04-051.8680
27GALWilliamsLiam3/4 ailePays de Galles1991-04-091.8880
28GALNorthGeorge3/4 aileAngleterre1992-04-131.9280
29GALHalfpennyLeighArrierePays de Galles1988-12-221.7880
30GALBiggarDan1/2 ouverturePays de Galles1989-10-161.8880
Table « matchs »
id_matchid_locauxid_visiteursjourhorairelocaux_scorevisiteurs_scorestadespectateurs
1ECOIRL2017-02-0415:25:002722Murrayfield67144
2ANGFRA2017-02-0417:50:001916Twickenham81902
3ITAGAL2017-02-0515:00:00733Stadio olympico40986
4ITAIRL2017-02-1115:25:001063Stadio olympico50197
5GALANG2017-02-1117:50:001621Millennium Stadium74500
6FRAECO2017-02-1216:00:002216Stade de France75283
7ECOGAL2017-02-2515:25:00Murrayfield
8IRLFRA2017-02-2517:50:00Aviva Stadium
9ANGITA2017-02-2616:00:00Twickenham
10GALIRL2017-03-1021:05:00Millennium Stadium
11ITAFRA2017-03-1114:30:00Stadio olympico
12ANGECO2017-03-1117:00:00Twickenham
13ECOITA2017-03-1813:30:00Murrayfield
14FRAGAL2017-03-1815:45:00Stade de France
15IRLANG2017-03-1818:00:00Aviva Stadium
Table « selections »
id_joueurid_matchessaistransformationspenalites
21200
31100
11032
71100
81100
91121
142100
152013
162001
192100
202013
233100
243010
263100
273100
283100
293034
275100
295013
165100
175100
155013
244011
74200
104300
114300
124100
94090
216100
206015
26100
56100
46002
208000
2011000
2014000

Recherches d’informations

Sur une table

L’objectif de ces exercices est de savoir formuler les requêtes de base (SELECT,FROM,WHERE) sur une seule table de la base de données « Au tournoi des Six Nations ».

9/9 SELECT, FROM, WHERE
  1. vérification du contenu de la table 'equipes'
    • Question
    • Solution
    Ecrire une requête SQL répondant à la question :
    • \(Q_1\) : « Rechercher les equipes du tournoi des six nations ».
    Votre réponse :
    sql : sixnations.sql
    
        
    >
    Output
    
                    

    Interpréteur

    MenuAction
    Ré-initialiser les sorties
    Faire apparaître le menu d'aide
    Interpréter le programme

    Editeur

    MenuRaccouciAction
    Ctrl+N Initialiser l'éditeur
    Ctrl+O Charger le contenu d'un fichier dans l'éditeur
    Ctrl+S Sauvegarder le contenu de l'éditeur dans un fichier
    Ctrl+P Imprimer le contenu de l'éditeur
    Ctrl+Z Annuler la dernière modification
    Maj+Ctrl+Z Rétablir la modification précedente
    Ctrl+F Chercher une expression dans l'éditeur
    Maj+Ctrl+F Chercher et remplacer une expression par une autre
    F10 Ouvrir une documentation du langage

    RaccourciAction
    F1 Afficher cette aide
    Tab Indenter la sélection
    Maj+Tab Désindenter la sélection
    Ctrl+A Sélectionner le contenu de l'éditeur
    Ctrl+C Copier la sélection dans le presse-papier
    Ctrl+V Remplacer la sélection par le contenu du presse-papier
    Ctrl+X Supprimer la sélection et la copier dans le presse-papier
    Maj+Ctrl+R Chercher et remplacer une expression par une autre dans tout l'éditeur
    Une solution possible :
    SELECT * FROM equipes;
    
  2. Vérification du contenu de la table 'joueurs'
    • Question
    • Solution
    Ecrire une requête SQL répondant à la question :
    • \(Q_1\) : « Rechercher les joueurs du tournoi des six nations ».
    Votre réponse :
    sql : sixnations.sql
    
        
    >
    Output
    
                    

    Interpréteur

    MenuAction
    Ré-initialiser les sorties
    Faire apparaître le menu d'aide
    Interpréter le programme

    Editeur

    MenuRaccouciAction
    Ctrl+N Initialiser l'éditeur
    Ctrl+O Charger le contenu d'un fichier dans l'éditeur
    Ctrl+S Sauvegarder le contenu de l'éditeur dans un fichier
    Ctrl+P Imprimer le contenu de l'éditeur
    Ctrl+Z Annuler la dernière modification
    Maj+Ctrl+Z Rétablir la modification précedente
    Ctrl+F Chercher une expression dans l'éditeur
    Maj+Ctrl+F Chercher et remplacer une expression par une autre
    F10 Ouvrir une documentation du langage

    RaccourciAction
    F1 Afficher cette aide
    Tab Indenter la sélection
    Maj+Tab Désindenter la sélection
    Ctrl+A Sélectionner le contenu de l'éditeur
    Ctrl+C Copier la sélection dans le presse-papier
    Ctrl+V Remplacer la sélection par le contenu du presse-papier
    Ctrl+X Supprimer la sélection et la copier dans le presse-papier
    Maj+Ctrl+R Chercher et remplacer une expression par une autre dans tout l'éditeur
    Une solution possible :
    SELECT * FROM joueurs;
    
  3. Vérification du contenu de la table 'matchs'
    • Question
    • Solution
    Ecrire une requête SQL répondant à la question :
    • \(Q_1\) : « Rechercher les matchs du tournoi des six nations ».
    Votre réponse :
    sql : sixnations.sql
    
        
    >
    Output
    
                    

    Interpréteur

    MenuAction
    Ré-initialiser les sorties
    Faire apparaître le menu d'aide
    Interpréter le programme

    Editeur

    MenuRaccouciAction
    Ctrl+N Initialiser l'éditeur
    Ctrl+O Charger le contenu d'un fichier dans l'éditeur
    Ctrl+S Sauvegarder le contenu de l'éditeur dans un fichier
    Ctrl+P Imprimer le contenu de l'éditeur
    Ctrl+Z Annuler la dernière modification
    Maj+Ctrl+Z Rétablir la modification précedente
    Ctrl+F Chercher une expression dans l'éditeur
    Maj+Ctrl+F Chercher et remplacer une expression par une autre
    F10 Ouvrir une documentation du langage

    RaccourciAction
    F1 Afficher cette aide
    Tab Indenter la sélection
    Maj+Tab Désindenter la sélection
    Ctrl+A Sélectionner le contenu de l'éditeur
    Ctrl+C Copier la sélection dans le presse-papier
    Ctrl+V Remplacer la sélection par le contenu du presse-papier
    Ctrl+X Supprimer la sélection et la copier dans le presse-papier
    Maj+Ctrl+R Chercher et remplacer une expression par une autre dans tout l'éditeur
    Une solution possible :
    SELECT * FROM matchs;
    
  4. Vérification du contenu de la table 'selections'
    • Question
    • Solution
    Ecrire une requête SQL répondant à la question :
    • \(Q_1\) : « Rechercher les selections de joueurs pour les matchs du tournoi des six nations ».
    Votre réponse :
    sql : sixnations.sql
    
        
    >
    Output
    
                    

    Interpréteur

    MenuAction
    Ré-initialiser les sorties
    Faire apparaître le menu d'aide
    Interpréter le programme

    Editeur

    MenuRaccouciAction
    Ctrl+N Initialiser l'éditeur
    Ctrl+O Charger le contenu d'un fichier dans l'éditeur
    Ctrl+S Sauvegarder le contenu de l'éditeur dans un fichier
    Ctrl+P Imprimer le contenu de l'éditeur
    Ctrl+Z Annuler la dernière modification
    Maj+Ctrl+Z Rétablir la modification précedente
    Ctrl+F Chercher une expression dans l'éditeur
    Maj+Ctrl+F Chercher et remplacer une expression par une autre
    F10 Ouvrir une documentation du langage

    RaccourciAction
    F1 Afficher cette aide
    Tab Indenter la sélection
    Maj+Tab Désindenter la sélection
    Ctrl+A Sélectionner le contenu de l'éditeur
    Ctrl+C Copier la sélection dans le presse-papier
    Ctrl+V Remplacer la sélection par le contenu du presse-papier
    Ctrl+X Supprimer la sélection et la copier dans le presse-papier
    Maj+Ctrl+R Chercher et remplacer une expression par une autre dans tout l'éditeur
    Une solution possible :
    SELECT * FROM selections;
    
  5. Projection
    • Question
    • Solution
    Ecrire une requête SQL répondant à la question :
    • \(Q_1\) : « Rechercher les nom et prénom des joueurs du tournoi des six nations ».
    Votre réponse :
    sql : sixnations.sql
    
        
    >
    Output
    
                    

    Interpréteur

    MenuAction
    Ré-initialiser les sorties
    Faire apparaître le menu d'aide
    Interpréter le programme

    Editeur

    MenuRaccouciAction
    Ctrl+N Initialiser l'éditeur
    Ctrl+O Charger le contenu d'un fichier dans l'éditeur
    Ctrl+S Sauvegarder le contenu de l'éditeur dans un fichier
    Ctrl+P Imprimer le contenu de l'éditeur
    Ctrl+Z Annuler la dernière modification
    Maj+Ctrl+Z Rétablir la modification précedente
    Ctrl+F Chercher une expression dans l'éditeur
    Maj+Ctrl+F Chercher et remplacer une expression par une autre
    F10 Ouvrir une documentation du langage

    RaccourciAction
    F1 Afficher cette aide
    Tab Indenter la sélection
    Maj+Tab Désindenter la sélection
    Ctrl+A Sélectionner le contenu de l'éditeur
    Ctrl+C Copier la sélection dans le presse-papier
    Ctrl+V Remplacer la sélection par le contenu du presse-papier
    Ctrl+X Supprimer la sélection et la copier dans le presse-papier
    Maj+Ctrl+R Chercher et remplacer une expression par une autre dans tout l'éditeur
    Une solution possible :

    On applique une projection (\(\Pi\)) sur les colonnes (nom,prenom) de la table des joueurs.

    Ecriture en algèbre relationnelle :

    • \(Q_1 = \Pi_{(nom,prenom)}(joueurs)\)

    Requête SQL correspondante :

    SELECT nom,prenom FROM joueurs;
    
  6. Restriction
    • Question
    • Solution

    Ecrire une requête SQL répondant à la question :

    • \(Q_1\) : « Rechercher les joueurs de l’équipe de France ».
    Votre réponse :
    sql : sixnations.sql
    
        
    >
    Output
    
                    

    Interpréteur

    MenuAction
    Ré-initialiser les sorties
    Faire apparaître le menu d'aide
    Interpréter le programme

    Editeur

    MenuRaccouciAction
    Ctrl+N Initialiser l'éditeur
    Ctrl+O Charger le contenu d'un fichier dans l'éditeur
    Ctrl+S Sauvegarder le contenu de l'éditeur dans un fichier
    Ctrl+P Imprimer le contenu de l'éditeur
    Ctrl+Z Annuler la dernière modification
    Maj+Ctrl+Z Rétablir la modification précedente
    Ctrl+F Chercher une expression dans l'éditeur
    Maj+Ctrl+F Chercher et remplacer une expression par une autre
    F10 Ouvrir une documentation du langage

    RaccourciAction
    F1 Afficher cette aide
    Tab Indenter la sélection
    Maj+Tab Désindenter la sélection
    Ctrl+A Sélectionner le contenu de l'éditeur
    Ctrl+C Copier la sélection dans le presse-papier
    Ctrl+V Remplacer la sélection par le contenu du presse-papier
    Ctrl+X Supprimer la sélection et la copier dans le presse-papier
    Maj+Ctrl+R Chercher et remplacer une expression par une autre dans tout l'éditeur
    Une solution possible :

    On applique une restriction (\(\sigma\)) sur la table joueurs avec la condition [id_equipe='FRA'].

    Ecriture en algèbre relationnelle :

    • \(Q_1 = \sigma_{[id\_equipe='FRA']}(joueurs)\)

    Requête SQL correspondante :

    SELECT * FROM joueurs WHERE id_equipe='FRA';
    
  7. Projection et Restriction
    • Question
    • Solution

    Ecrire une requête SQL répondant à la question :

    • \(Q_1\) : « Rechercher les nom et prénom des joueurs de l’équipe de France ».
    Votre réponse :
    sql : sixnations.sql
    
        
    >
    Output
    
                    

    Interpréteur

    MenuAction
    Ré-initialiser les sorties
    Faire apparaître le menu d'aide
    Interpréter le programme

    Editeur

    MenuRaccouciAction
    Ctrl+N Initialiser l'éditeur
    Ctrl+O Charger le contenu d'un fichier dans l'éditeur
    Ctrl+S Sauvegarder le contenu de l'éditeur dans un fichier
    Ctrl+P Imprimer le contenu de l'éditeur
    Ctrl+Z Annuler la dernière modification
    Maj+Ctrl+Z Rétablir la modification précedente
    Ctrl+F Chercher une expression dans l'éditeur
    Maj+Ctrl+F Chercher et remplacer une expression par une autre
    F10 Ouvrir une documentation du langage

    RaccourciAction
    F1 Afficher cette aide
    Tab Indenter la sélection
    Maj+Tab Désindenter la sélection
    Ctrl+A Sélectionner le contenu de l'éditeur
    Ctrl+C Copier la sélection dans le presse-papier
    Ctrl+V Remplacer la sélection par le contenu du presse-papier
    Ctrl+X Supprimer la sélection et la copier dans le presse-papier
    Maj+Ctrl+R Chercher et remplacer une expression par une autre dans tout l'éditeur
    Une solution possible :

    On applique une projection (\(\Pi\)) sur les colonnes (nom,prenom) et une restriction (\(\sigma\)) sur la condition [id_equipe='FRA'] de la table joueurs.

    Ecriture en algèbre relationnelle :

    • \(Q_1 = \Pi_{(nom,prenom)}(\sigma_{[id\_equipe='FRA']}(joueurs))\).

    Requête SQL correspondante :

    SELECT nom,prenom FROM joueurs WHERE id_equipe='FRA';
    
  8. Connecteur logique
    • Question
    • Solution

    Ecrire une requête SQL répondant à la question :

    • \(Q_1\) : « Rechercher les matchs joués par l’équipe de France ».
    Votre réponse :
    sql : sixnations.sql
    
        
    >
    Output
    
                    

    Interpréteur

    MenuAction
    Ré-initialiser les sorties
    Faire apparaître le menu d'aide
    Interpréter le programme

    Editeur

    MenuRaccouciAction
    Ctrl+N Initialiser l'éditeur
    Ctrl+O Charger le contenu d'un fichier dans l'éditeur
    Ctrl+S Sauvegarder le contenu de l'éditeur dans un fichier
    Ctrl+P Imprimer le contenu de l'éditeur
    Ctrl+Z Annuler la dernière modification
    Maj+Ctrl+Z Rétablir la modification précedente
    Ctrl+F Chercher une expression dans l'éditeur
    Maj+Ctrl+F Chercher et remplacer une expression par une autre
    F10 Ouvrir une documentation du langage

    RaccourciAction
    F1 Afficher cette aide
    Tab Indenter la sélection
    Maj+Tab Désindenter la sélection
    Ctrl+A Sélectionner le contenu de l'éditeur
    Ctrl+C Copier la sélection dans le presse-papier
    Ctrl+V Remplacer la sélection par le contenu du presse-papier
    Ctrl+X Supprimer la sélection et la copier dans le presse-papier
    Maj+Ctrl+R Chercher et remplacer une expression par une autre dans tout l'éditeur
    Une solution possible :

    On vérifie (\(\sigma\)) sur la table matchs que l’équipe qui joue à domicile ou (\(\lor\) : ou logique) l’équipe des visiteurs est bien l’équipe de France ([id_locaux='FRA' OR id_visiteurs='FRA'])

    Ecriture en algèbre relationnelle :

    • \(Q_1 = \sigma_{[id\_locaux='FRA' \; \lor \; id\_visiteurs='FRA']}(matchs)\).

    Requête SQL correspondante :

    SELECT *
    FROM matchs
    WHERE id_locaux='FRA' OR id_visiteurs='FRA';
    
  9. Connecteurs logiques
    • Question
    • Solution

    Ecrire une requête SQL répondant à la question :

    • \(Q_1\) : « Rechercher les matchs joués par l’équipe de France au mois de mars ».
    Votre réponse :
    sql : sixnations.sql
    
        
    >
    Output
    
                    

    Interpréteur

    MenuAction
    Ré-initialiser les sorties
    Faire apparaître le menu d'aide
    Interpréter le programme

    Editeur

    MenuRaccouciAction
    Ctrl+N Initialiser l'éditeur
    Ctrl+O Charger le contenu d'un fichier dans l'éditeur
    Ctrl+S Sauvegarder le contenu de l'éditeur dans un fichier
    Ctrl+P Imprimer le contenu de l'éditeur
    Ctrl+Z Annuler la dernière modification
    Maj+Ctrl+Z Rétablir la modification précedente
    Ctrl+F Chercher une expression dans l'éditeur
    Maj+Ctrl+F Chercher et remplacer une expression par une autre
    F10 Ouvrir une documentation du langage

    RaccourciAction
    F1 Afficher cette aide
    Tab Indenter la sélection
    Maj+Tab Désindenter la sélection
    Ctrl+A Sélectionner le contenu de l'éditeur
    Ctrl+C Copier la sélection dans le presse-papier
    Ctrl+V Remplacer la sélection par le contenu du presse-papier
    Ctrl+X Supprimer la sélection et la copier dans le presse-papier
    Maj+Ctrl+R Chercher et remplacer une expression par une autre dans tout l'éditeur
    Une solution possible :

    On vérifie (\(\sigma\)) sur la table matchs que l’équipe qui joue à domicile ou (\(\lor\) : ou logique) l’équipe des visiteurs est bien l’équipe de France et (\(\land\) : et logique) que les matchs sont ceux du mois de mars.

    Ecriture en algèbre relationnelle :

    • \(Q_1 = \sigma_{[(id\_locaux='FRA' \; \lor \; id\_visiteurs='FRA') \; \land \; month(jour)='03']}(matchs)\).

    Attention à la priorité du connecteur logique \(\land\) sur le \(\lor\) (de même que la multiplication l’est sur l’addition)

    La requête :
    • \(Q_1 = \sigma_{[id\_locaux='FRA' \; \lor \; id\_visiteurs='FRA' \; \land \; month(jour)='03']}(matchs)\)

    donnerai comme résultat :

    • les matchs à domicile de l’équipe de France et (\(\lor\) : ou logique) les matchs que l’équipe de France a joué à l’extérieur au mois de mars.

    Remarque : en SQLite strftime(“%m”, jour) donnera la mois de la date du jour.

    Requête SQL correspondante :

    SELECT id_match,id_locaux,id_visiteurs,jour
    FROM matchs
    WHERE (id_locaux='FRA' OR id_visiteurs='FRA') AND strftime('%m', jour)='03';
    

Sur plusieurs tables

L’objectif de ces exercices est de savoir formuler une requête sur plusieurs tables et de créer une vue sur les informations « métier » « Au tournoi des Six Nations ».

2/2 Produit cartésien, jointure naturelle et vues
  1. Produit cartésien et restriction
    • Question
    • Solution

    Ecrire une requête SQL répondant à la question :

    • \(Q_1\) : « Rechercher les informations sur les matchs et les joueurs des équipes qui ont marqués (essais,transformations, penalites) ».

    Le résultat sera trié par l’identifiant des équipes qui jouent à domicile et le nom de joueurs qui ont marqués

    Votre réponse :
    sql : sixnations.sql
    
        
    >
    Output
    
                    

    Interpréteur

    MenuAction
    Ré-initialiser les sorties
    Faire apparaître le menu d'aide
    Interpréter le programme

    Editeur

    MenuRaccouciAction
    Ctrl+N Initialiser l'éditeur
    Ctrl+O Charger le contenu d'un fichier dans l'éditeur
    Ctrl+S Sauvegarder le contenu de l'éditeur dans un fichier
    Ctrl+P Imprimer le contenu de l'éditeur
    Ctrl+Z Annuler la dernière modification
    Maj+Ctrl+Z Rétablir la modification précedente
    Ctrl+F Chercher une expression dans l'éditeur
    Maj+Ctrl+F Chercher et remplacer une expression par une autre
    F10 Ouvrir une documentation du langage

    RaccourciAction
    F1 Afficher cette aide
    Tab Indenter la sélection
    Maj+Tab Désindenter la sélection
    Ctrl+A Sélectionner le contenu de l'éditeur
    Ctrl+C Copier la sélection dans le presse-papier
    Ctrl+V Remplacer la sélection par le contenu du presse-papier
    Ctrl+X Supprimer la sélection et la copier dans le presse-papier
    Maj+Ctrl+R Chercher et remplacer une expression par une autre dans tout l'éditeur
    Une solution possible :

    On peut faire un produit cartésien (\(\times\)) entre les tables matchs,selections,joueurs en vérifiant que chaque joueur de l’ensemble des joueurs est bien lié aux matchs par les selections. On récupère seulement les joueurs qui ont marqués des essais,transformations ou penalités.

    Ecriture en algèbre relationnelle :

    • \(R_1 = \sigma_{[essais > 0 \lor transformations > 0 \lor penalites > 0]}(selections)\)
    • \(T_1 = \times(R_1,joueurs)\)
    • \(R_2 = \sigma_{[R_1.id\_joueur=joueurs.id\_joueur]}(T_1)\)
    • \(T_2 = \times(matchs,R_2)\)
    • \(Q_1 = \sigma_{[matchs.id\_match=R_2.id\_match]}(T_2)\)

    On peut aussi faire une jointure naturelle (\(\Join_{[]}\)) puisque les matchs sont liés aux joueurs par des noms de colonnes communes (id_match,id_joueur) sur la table selections.

    Ecriture en algèbre relationnelle :

    • \(R_1 = \sigma_{[essais > 0 \lor transformations > 0 \lor penalites > 0]}(selections)\)
    • \(NJ_1 = \Join_{[]}(R_1,joueurs)\)
    • \(NJ_2 = \Join_{[]}(matchs,NJ_1)\)

    Requête SQL correspondante :

    SELECT "" AS "Produit cartésien";
    SELECT *
    FROM matchs m,selections s, joueurs j
    WHERE m.id_match=s.id_match AND s.id_joueur=j.id_joueur
      AND (essais > 0 OR transformations  > 0 OR penalites > 0)
    ORDER BY id_locaux,nom;
    
    
    SELECT "" AS "Jointure naturelle";
    SELECT *
    FROM matchs NATURAL JOIN selections NATURAL JOIN joueurs
    WHERE essais > 0 OR transformations  > 0 OR penalites > 0
    ORDER BY id_locaux,nom;
    
  2. Création de vues
    • Question
    • Solution
    Créer une vue resultats sur les principales informations permettant de visualiser les résultats des matchs du tournoi des six nations :
    • les matchs : (id_locaux,id_visiteurs,jour,locaux_score, visiteurs_score)
    • les joueurs des équipes : (nom, id_equipe)
    • qui ont marqués : essais,transformations, penalites.

    Le résultat de la requête sera trié par l’identifiant des équipes qui jouent à domicile et le nom de joueurs qui ont marqués.

    Votre réponse :
    sql : sixnations.sql
    
        
    >
    Output
    
                    

    Interpréteur

    MenuAction
    Ré-initialiser les sorties
    Faire apparaître le menu d'aide
    Interpréter le programme

    Editeur

    MenuRaccouciAction
    Ctrl+N Initialiser l'éditeur
    Ctrl+O Charger le contenu d'un fichier dans l'éditeur
    Ctrl+S Sauvegarder le contenu de l'éditeur dans un fichier
    Ctrl+P Imprimer le contenu de l'éditeur
    Ctrl+Z Annuler la dernière modification
    Maj+Ctrl+Z Rétablir la modification précedente
    Ctrl+F Chercher une expression dans l'éditeur
    Maj+Ctrl+F Chercher et remplacer une expression par une autre
    F10 Ouvrir une documentation du langage

    RaccourciAction
    F1 Afficher cette aide
    Tab Indenter la sélection
    Maj+Tab Désindenter la sélection
    Ctrl+A Sélectionner le contenu de l'éditeur
    Ctrl+C Copier la sélection dans le presse-papier
    Ctrl+V Remplacer la sélection par le contenu du presse-papier
    Ctrl+X Supprimer la sélection et la copier dans le presse-papier
    Maj+Ctrl+R Chercher et remplacer une expression par une autre dans tout l'éditeur
    Une solution possible :

    On “encapsule” dans une vue (CREATE VIEW resultats AS) une requête SQL pour consulter plus simplement les informations sur les résulats intéressants des matchs :

    • (id_locaux,id_visiteurs,jour,locaux_score, visiteurs_score)

    des joueurs des équipes :

    • (nom, id_equipe)

    qui ont marqués :

    • essais,transformations, penalites.

    Ecriture en algèbre relationnelle de la requête à mettre dans une vue :

    • \(NJ_1 = \Join_{[]}(selections,joueurs)\)
    • \(NJ_2 = \Join_{[]}(matchs,NJ_1)\)
    • \(R_1 = \sigma_{[essais > 0 \lor transformations > 0 \lor penalites > 0]}(NJ_2)\)
    • \(Q_1 = \Pi_{(id\_locaux, id\_visiteurs, jour, .., essais,transformations, penalites)}(R_1)\)

    Requête SQL correspondante :

    CREATE VIEW resultats AS
    SELECT id_locaux, id_visiteurs, jour,locaux_score,visiteurs_score, nom, id_equipe, essais,transformations, penalites
    FROM matchs NATURAL JOIN selections NATURAL JOIN joueurs
    WHERE essais > 0 OR transformations  > 0 OR penalites > 0
    ORDER BY id_locaux,nom;
    
    SELECT "" AS "Resultats";
    SELECT * FROM resultats;
    

Opérations ensemblistes

L’objectif de ces exercices est de savoir formuler des opérations ensemblistes (\(\cup,\cap,\setminus\)) « Au tournoi des six nations ».

3/3 Union, Intersection, Différence
  1. Union
    • Question
    • Solution
    Ecrire une requête SQL répondant à la question :
    • \(Q_1\) : « récupérer les noms du coach et des joueurs du XV de France ».
    Votre réponse :
    sql : sixnations.sql
    
        
    >
    Output
    
                    

    Interpréteur

    MenuAction
    Ré-initialiser les sorties
    Faire apparaître le menu d'aide
    Interpréter le programme

    Editeur

    MenuRaccouciAction
    Ctrl+N Initialiser l'éditeur
    Ctrl+O Charger le contenu d'un fichier dans l'éditeur
    Ctrl+S Sauvegarder le contenu de l'éditeur dans un fichier
    Ctrl+P Imprimer le contenu de l'éditeur
    Ctrl+Z Annuler la dernière modification
    Maj+Ctrl+Z Rétablir la modification précedente
    Ctrl+F Chercher une expression dans l'éditeur
    Maj+Ctrl+F Chercher et remplacer une expression par une autre
    F10 Ouvrir une documentation du langage

    RaccourciAction
    F1 Afficher cette aide
    Tab Indenter la sélection
    Maj+Tab Désindenter la sélection
    Ctrl+A Sélectionner le contenu de l'éditeur
    Ctrl+C Copier la sélection dans le presse-papier
    Ctrl+V Remplacer la sélection par le contenu du presse-papier
    Ctrl+X Supprimer la sélection et la copier dans le presse-papier
    Maj+Ctrl+R Chercher et remplacer une expression par une autre dans tout l'éditeur
    Une solution possible :

    On fait une union (\(\cup\)) entre la requête permettant de récupérer le nom du coach du XV de France dans l’ensemble des equipes et celle pour rechercher les joueurs de l’équipe du XV de France dans l’ensemble des joueurs. Pour obtenir d’abord le nom du coach on pourra faire un UNION ALL qui concatène le résultat des deux requêtes.

    Ecriture en algèbre relationnelle :

    • \(R_1 = \sigma_{[id\_equipe='FRA']}(equipes)\)
    • \(P_1 = \Pi_{(coach)}(R_1)\)
    • \(R_2 = \sigma_{[id\_equipe='FRA']}(joueur)\)
    • \(P_2 = \Pi_{(nom)}(R_2)\)
    • \(Q_1 = \cup(P_1,P_2)\)

    Requête SQL correspondante :

    SELECT coach AS "noms des joueurs et du coach"
    FROM equipes
    WHERE id_equipe='FRA'
    UNION
    SELECT nom
    FROM joueurs
    WHERE id_equipe='FRA';
    
    SELECT coach AS "nom du coach et noms des joueurs"
    FROM equipes
    WHERE id_equipe='FRA'
    UNION ALL
    SELECT nom
    FROM joueurs
    WHERE id_equipe='FRA';
    
  2. Intersection
    • Question
    • Solution

    Ecrire une requête SQL répondant à la question :

    • \(Q_1\) : « récupérer les joueurs qui ont été selectionnés dans le XV de France pendant le tournoi des 6 nations ».
    Votre réponse :
    sql : sixnations.sql
    
        
    >
    Output
    
                    

    Interpréteur

    MenuAction
    Ré-initialiser les sorties
    Faire apparaître le menu d'aide
    Interpréter le programme

    Editeur

    MenuRaccouciAction
    Ctrl+N Initialiser l'éditeur
    Ctrl+O Charger le contenu d'un fichier dans l'éditeur
    Ctrl+S Sauvegarder le contenu de l'éditeur dans un fichier
    Ctrl+P Imprimer le contenu de l'éditeur
    Ctrl+Z Annuler la dernière modification
    Maj+Ctrl+Z Rétablir la modification précedente
    Ctrl+F Chercher une expression dans l'éditeur
    Maj+Ctrl+F Chercher et remplacer une expression par une autre
    F10 Ouvrir une documentation du langage

    RaccourciAction
    F1 Afficher cette aide
    Tab Indenter la sélection
    Maj+Tab Désindenter la sélection
    Ctrl+A Sélectionner le contenu de l'éditeur
    Ctrl+C Copier la sélection dans le presse-papier
    Ctrl+V Remplacer la sélection par le contenu du presse-papier
    Ctrl+X Supprimer la sélection et la copier dans le presse-papier
    Maj+Ctrl+R Chercher et remplacer une expression par une autre dans tout l'éditeur
    Une solution possible :

    On fait une intersection (\(\cap\)) entre la requête permettant de récupérer le nom des joueurs du XV de France dans joueurs et celle permettant de récupérer le nom des joueurs qui ont été sélectionnés (jointure naturelle entre les tables joueurs,selections).

    Ecriture en algèbre relationnelle :

    • \(R_1 = \sigma_{[id\_equipe='FRA']}(joueurs)\)
    • \(P_1 = \Pi_{(nom)}(R_1)\)
    • \(NJ_1 = \Join_{[]}(joueurs,selections)\)
    • \(P_2 = \Pi_{(nom)}(NJ_1)\)
    • \(Q_1 = \cap(P_1,P_2)\)

    On pourra faire une requête imbriquée avec un IN (\(\in\)).

    On pourra aussi faire une requête imbriquée avec un EXISTS (\(\exists\)).

    Enfin on pourra faire une jointure naturelle entre les tables joueurs,selections en récupérant les joueurs sélectionnés dans le XV de France.

    Requête SQL correspondante :

    SELECT nom
    FROM joueurs WHERE id_equipe='FRA'
    INTERSECT
    SELECT nom
    FROM joueurs NATURAL JOIN selections;
    
    SELECT nom
    FROM joueurs
    WHERE id_equipe='FRA' AND id_joueur IN (SELECT  id_joueur FROM selections);
    
    SELECT nom
    FROM joueurs j
    WHERE id_equipe='FRA' AND EXISTS (SELECT  * FROM selections WHERE id_joueur=j.id_joueur);
    
    SELECT nom
    FROM joueurs NATURAL JOIN selections
    WHERE id_equipe='FRA';
    
  3. Différence
    • Question
    • Solution

    Ecrire une requête SQL répondant à la question :

    • \(Q_1\) : « récupérer les joueurs qui n’ont pas été selectionnés dans le XV de France pendant le tournoi des 6 nations ».
    Votre réponse :
    sql : sixnations.sql
    
        
    >
    Output
    
                    

    Interpréteur

    MenuAction
    Ré-initialiser les sorties
    Faire apparaître le menu d'aide
    Interpréter le programme

    Editeur

    MenuRaccouciAction
    Ctrl+N Initialiser l'éditeur
    Ctrl+O Charger le contenu d'un fichier dans l'éditeur
    Ctrl+S Sauvegarder le contenu de l'éditeur dans un fichier
    Ctrl+P Imprimer le contenu de l'éditeur
    Ctrl+Z Annuler la dernière modification
    Maj+Ctrl+Z Rétablir la modification précedente
    Ctrl+F Chercher une expression dans l'éditeur
    Maj+Ctrl+F Chercher et remplacer une expression par une autre
    F10 Ouvrir une documentation du langage

    RaccourciAction
    F1 Afficher cette aide
    Tab Indenter la sélection
    Maj+Tab Désindenter la sélection
    Ctrl+A Sélectionner le contenu de l'éditeur
    Ctrl+C Copier la sélection dans le presse-papier
    Ctrl+V Remplacer la sélection par le contenu du presse-papier
    Ctrl+X Supprimer la sélection et la copier dans le presse-papier
    Maj+Ctrl+R Chercher et remplacer une expression par une autre dans tout l'éditeur
    Une solution possible :

    On fait une différence (\(\setminus\)) entre la requête permettant de récupérer le nom des joueurs du XV de France dans joueurs et celle permettant de récupérer le nom des joueurs qui ont été sélectionnés (jointure naturelle entre les tables joueurs,selections).

    Ecriture en algèbre relationnelle :

    • \(R_1 = \sigma_{[id\_equipe='FRA']}(joueurs)\)
    • \(P_1 = \Pi_{(nom)}(R_1)\)
    • \(NJ_1 = \Join_{[]}(joueurs,selections)\)
    • \(P_2 = \Pi_{(nom)}(NJ_1)\)
    • \(Q_1 = \setminus(P_1,P_2)\)

    On pourra faire une requête imbriquée avec un NOT IN (\(\notin\)).

    On pourra aussi faire une requête imbriquée avec un NOT EXISTS (\(\notexists\)).

    On ne pourra pas faire une jointure naturelle entre les tables joueurs,selections en faisant une restriction sur les joueurs du XV de France et en faisant une diffférence entre l’identifiant du joueur dans l’ensemble des joueurs et l’identifiant du joueur dans l’ensemble des sélections.

    Requête SQL correspondante :

    SELECT "" AS "EXCEPT";
    SELECT nom
    FROM joueurs WHERE id_equipe='FRA'
    EXCEPT
    SELECT nom
    FROM joueurs NATURAL JOIN selections;
    
    SELECT "" AS "NOT IN";
    SELECT nom
    FROM joueurs
    WHERE id_equipe='FRA'
      AND id_joueur NOT IN (SELECT  id_joueur
                            FROM selections);
    
    SELECT "" AS "NOT EXISTS";
    SELECT nom
    FROM joueurs j
    WHERE id_equipe='FRA'
      AND NOT EXISTS (SELECT  *
                      FROM selections
                      WHERE id_joueur=j.id_joueur);
    
    /*
    SELECT "" AS "CROSS JOIN, RESTRICT";
    SELECT nom
    FROM joueurs j, selections s
    WHERE j.id_equipe='FRA'
      AND j.id_joueur<>s.id_joueur;
    */
    

Division relationnelle

L’objectif de ces exercices est de savoir répondre « Au tournoi des six nations » à des questions du type :

  • “trouve-moi les \(x\) qui sont associés à tous (\(\forall\)) les \(y\)“
2/2 division relationnelle
  1. NOT EXISTS,EXCEPT
    • Question
    • Solution

    Ecrire une requête SQL répondant à la question :

    • \(Q_1\) : « Rechercher le nom des joueurs qui ont été sélectionnés pour tous les matchs de leur équipe ».
    Votre réponse :
    sql : sixnations.sql
    
        
    >
    Output
    
                    

    Interpréteur

    MenuAction
    Ré-initialiser les sorties
    Faire apparaître le menu d'aide
    Interpréter le programme

    Editeur

    MenuRaccouciAction
    Ctrl+N Initialiser l'éditeur
    Ctrl+O Charger le contenu d'un fichier dans l'éditeur
    Ctrl+S Sauvegarder le contenu de l'éditeur dans un fichier
    Ctrl+P Imprimer le contenu de l'éditeur
    Ctrl+Z Annuler la dernière modification
    Maj+Ctrl+Z Rétablir la modification précedente
    Ctrl+F Chercher une expression dans l'éditeur
    Maj+Ctrl+F Chercher et remplacer une expression par une autre
    F10 Ouvrir une documentation du langage

    RaccourciAction
    F1 Afficher cette aide
    Tab Indenter la sélection
    Maj+Tab Désindenter la sélection
    Ctrl+A Sélectionner le contenu de l'éditeur
    Ctrl+C Copier la sélection dans le presse-papier
    Ctrl+V Remplacer la sélection par le contenu du presse-papier
    Ctrl+X Supprimer la sélection et la copier dans le presse-papier
    Maj+Ctrl+R Chercher et remplacer une expression par une autre dans tout l'éditeur
    Une solution possible :

    On pourra mettre en oeuvre l’opération de division relationnelle par les opérateurs : NOT EXISTS,EXCEPT.

    L’idée est de rechercher les matchs de l’équipe du joueur et les matchs pour lesquels il est sélectionné.

    Si la différence entre ces deux ensembles est nulle alors le joueur est sélectionné pour tous les matchs de son équipe.

    Requête SQL correspondante :

    SELECT j.nom
    FROM joueurs j
    WHERE  NOT EXISTS ( SELECT id_match
                        FROM matchs m WHERE j.id_equipe=m.id_locaux OR j.id_equipe=m.id_visiteurs
                        EXCEPT
                        SELECT id_match
                        FROM selections s WHERE j.id_joueur=s.id_joueur);
    
  2. GROUP BY, COUNT
    • Question
    • Solution

    Ecrire une requête SQL répondant à la question :

    • \(Q_1\) : « Rechercher le nom des joueurs qui ont été sélectionnés pour tous les matchs de leur équipe ».
    Votre réponse :
    sql : sixnations.sql
    
        
    >
    Output
    
                    

    Interpréteur

    MenuAction
    Ré-initialiser les sorties
    Faire apparaître le menu d'aide
    Interpréter le programme

    Editeur

    MenuRaccouciAction
    Ctrl+N Initialiser l'éditeur
    Ctrl+O Charger le contenu d'un fichier dans l'éditeur
    Ctrl+S Sauvegarder le contenu de l'éditeur dans un fichier
    Ctrl+P Imprimer le contenu de l'éditeur
    Ctrl+Z Annuler la dernière modification
    Maj+Ctrl+Z Rétablir la modification précedente
    Ctrl+F Chercher une expression dans l'éditeur
    Maj+Ctrl+F Chercher et remplacer une expression par une autre
    F10 Ouvrir une documentation du langage

    RaccourciAction
    F1 Afficher cette aide
    Tab Indenter la sélection
    Maj+Tab Désindenter la sélection
    Ctrl+A Sélectionner le contenu de l'éditeur
    Ctrl+C Copier la sélection dans le presse-papier
    Ctrl+V Remplacer la sélection par le contenu du presse-papier
    Ctrl+X Supprimer la sélection et la copier dans le presse-papier
    Maj+Ctrl+R Chercher et remplacer une expression par une autre dans tout l'éditeur
    Une solution possible :

    On pourra met en œuvre l’opération de division relationnelle en reformulant la question pour compter le nombre de sélections des joueurs :

    • trouver le nom des joueurs qui ont un nombre de sélections égal au nombre total de match joués par leur équipe (joueurs.id_equipe).

    Requête SQL correspondante :

    SELECT id_joueur,nom
    FROM joueurs NATURAL JOIN selections
    GROUP BY id_joueur,nom
    HAVING COUNT(DISTINCT id_match) = (
                                       SELECT COUNT(id_match)
                                       FROM matchs
                                       WHERE joueurs.id_equipe=matchs.id_locaux OR joueurs.id_equipe=matchs.id_visiteurs
                                      );
    

Fonctions d’agrégat

L’objectif de ces exercices est de savoir appliquer des fonctions d’agrégat sur les recherches « Au tournoi des six nations ».

3/3 COUNT, SUM, MAX, MIN, AVG
  1. Sur une requête simple
    • Question
    • Solution

    Ecrire une requête SQL répondant à la question :

    • \(Q_1\) : «Quel a été l’affluence moyenne sur tous les matchs du tournoi des six nations ? ».
    Votre réponse :
    sql : sixnations.sql
    
        
    >
    Output
    
                    

    Interpréteur

    MenuAction
    Ré-initialiser les sorties
    Faire apparaître le menu d'aide
    Interpréter le programme

    Editeur

    MenuRaccouciAction
    Ctrl+N Initialiser l'éditeur
    Ctrl+O Charger le contenu d'un fichier dans l'éditeur
    Ctrl+S Sauvegarder le contenu de l'éditeur dans un fichier
    Ctrl+P Imprimer le contenu de l'éditeur
    Ctrl+Z Annuler la dernière modification
    Maj+Ctrl+Z Rétablir la modification précedente
    Ctrl+F Chercher une expression dans l'éditeur
    Maj+Ctrl+F Chercher et remplacer une expression par une autre
    F10 Ouvrir une documentation du langage

    RaccourciAction
    F1 Afficher cette aide
    Tab Indenter la sélection
    Maj+Tab Désindenter la sélection
    Ctrl+A Sélectionner le contenu de l'éditeur
    Ctrl+C Copier la sélection dans le presse-papier
    Ctrl+V Remplacer la sélection par le contenu du presse-papier
    Ctrl+X Supprimer la sélection et la copier dans le presse-papier
    Maj+Ctrl+R Chercher et remplacer une expression par une autre dans tout l'éditeur
    Une solution possible :

    On pourra appliquer la fonction AVG() sur la table des matchs.

    On pourrait aussi calculer la somme (SUM()) des affluences divisée par le nombre (COUNT()) de matchs joués.

    Requête SQL correspondante :

    SELECT "" AS "AVG";
    SELECT AVG(spectateurs) AS "Affluence moyenne"
    FROM matchs;
    
    SELECT "" AS "SUM()/COUNT()";
    SELECT SUM(spectateurs)/COUNT(*) AS "Affluence moyenne"
    FROM matchs
    WHERE spectateurs IS NOT NULL;
    
  2. Sur une requête imbriquée (1/2)
    • Question
    • Solution

    Ecrire une requête SQL répondant à la question :

    • \(Q_1\) : « Rechercher le nom des équipes jouant à domicile, le nom de leur stade et le nombre de spectateurs pour les matchs qui ont une affluence supérieure à la moyenne de fréquentation lors des matchs».
    Votre réponse :
    sql : sixnations.sql
    
        
    >
    Output
    
                    

    Interpréteur

    MenuAction
    Ré-initialiser les sorties
    Faire apparaître le menu d'aide
    Interpréter le programme

    Editeur

    MenuRaccouciAction
    Ctrl+N Initialiser l'éditeur
    Ctrl+O Charger le contenu d'un fichier dans l'éditeur
    Ctrl+S Sauvegarder le contenu de l'éditeur dans un fichier
    Ctrl+P Imprimer le contenu de l'éditeur
    Ctrl+Z Annuler la dernière modification
    Maj+Ctrl+Z Rétablir la modification précedente
    Ctrl+F Chercher une expression dans l'éditeur
    Maj+Ctrl+F Chercher et remplacer une expression par une autre
    F10 Ouvrir une documentation du langage

    RaccourciAction
    F1 Afficher cette aide
    Tab Indenter la sélection
    Maj+Tab Désindenter la sélection
    Ctrl+A Sélectionner le contenu de l'éditeur
    Ctrl+C Copier la sélection dans le presse-papier
    Ctrl+V Remplacer la sélection par le contenu du presse-papier
    Ctrl+X Supprimer la sélection et la copier dans le presse-papier
    Maj+Ctrl+R Chercher et remplacer une expression par une autre dans tout l'éditeur
    Une solution possible :

    On pourra calculer dans une requête imbriquée la fréquentation moyenne (AVG()) de spectateurs lors des matchs puis tester pour chaque match de l’équipe de France si le nombre de spectateurs est supérieur à cette moyenne.

    Requête SQL correspondante :

    SELECT id_locaux, stade, spectateurs
    FROM matchs
     WHERE id_locaux='FRA'
      AND spectateurs > (SELECT AVG(spectateurs)
                         FROM matchs);
    
  3. Sur une requête imbriquée (2/2)
    • Question
    • Solution

    Ecrire une requête SQL répondant à la question :

    • \(Q_1\) : « rechercher le nom,prenom et poste des joueurs irlandais qui ont été sélectionnés pour les matchs de leur equipe à l’extérieur et qui ont marqués plus d’essais que les joueurs sélectionnés pour les matchs de l’équipe d’Ecosse ».
    Votre réponse :
    sql : sixnations.sql
    
        
    >
    Output
    
                    

    Interpréteur

    MenuAction
    Ré-initialiser les sorties
    Faire apparaître le menu d'aide
    Interpréter le programme

    Editeur

    MenuRaccouciAction
    Ctrl+N Initialiser l'éditeur
    Ctrl+O Charger le contenu d'un fichier dans l'éditeur
    Ctrl+S Sauvegarder le contenu de l'éditeur dans un fichier
    Ctrl+P Imprimer le contenu de l'éditeur
    Ctrl+Z Annuler la dernière modification
    Maj+Ctrl+Z Rétablir la modification précedente
    Ctrl+F Chercher une expression dans l'éditeur
    Maj+Ctrl+F Chercher et remplacer une expression par une autre
    F10 Ouvrir une documentation du langage

    RaccourciAction
    F1 Afficher cette aide
    Tab Indenter la sélection
    Maj+Tab Désindenter la sélection
    Ctrl+A Sélectionner le contenu de l'éditeur
    Ctrl+C Copier la sélection dans le presse-papier
    Ctrl+V Remplacer la sélection par le contenu du presse-papier
    Ctrl+X Supprimer la sélection et la copier dans le presse-papier
    Maj+Ctrl+R Chercher et remplacer une expression par une autre dans tout l'éditeur
    Une solution possible :

    On cherchera d’abord, dans une requête imbriquée, la valeur maximale MAX() des essais marqués par les joueurs écossais sélectionnés pour les matchs de leur équipe.

    On peut utiliser ensuite la vue resultats pour récupérer les joueurs de l’équipe d’Irlande qui auraient marqués plus d’essais à l’extérieur que cette valeur maximale.

    Remarques :
    • on peut utiliser la vue resultats dans la requête externe qui a besoin d’informations liées aux tables de cette vue.
    • il ne faut pas utiliser la vue resultats dans la requête imbriquée. Les informations utiles pour trouver le maximum d’essais marqués par les écossais peuvent se trouver dans les tables joueurs, selections. La requête imbriquée n’a donc pas besoin d’utiliser la table matchs.

    Requête SQL correspondante :

    CREATE VIEW resultats AS
    SELECT id_locaux,id_visiteurs,jour,locaux_score,visiteurs_score,nom,prenom,position,id_equipe,essais,transformations, penalites
    FROM matchs NATURAL JOIN selections NATURAL JOIN joueurs
    WHERE essais > 0 OR transformations  > 0 OR penalites > 0;
    
    SELECT * FROM resultats;
    
    SELECT nom,prenom,position
    FROM resultats r
    WHERE r.id_visiteurs='IRL' AND r.id_equipe=r.id_visiteurs
      AND r.essais > (SELECT MAX(essais)
                      FROM selections NATURAL JOIN joueurs
                      WHERE joueurs.id_equipe='ECO');
    

Groupements

L’objectif de ces exercices est de savoir regrouper le informations et appliquer des fonctions d’agrégat sur ces regroupements « Au tournoi des six nations ».

4/4 GROUP BY, HAVING
  1. Groupement
    • Question
    • Solution

    Ecrire une requête SQL répondant à la question :

    • \(Q_1\) : « nom des joueurs, leur position et le nombre total de points marqués par les joueurs ».
    Votre réponse :
    sql : sixnations.sql
    
        
    >
    Output
    
                    

    Interpréteur

    MenuAction
    Ré-initialiser les sorties
    Faire apparaître le menu d'aide
    Interpréter le programme

    Editeur

    MenuRaccouciAction
    Ctrl+N Initialiser l'éditeur
    Ctrl+O Charger le contenu d'un fichier dans l'éditeur
    Ctrl+S Sauvegarder le contenu de l'éditeur dans un fichier
    Ctrl+P Imprimer le contenu de l'éditeur
    Ctrl+Z Annuler la dernière modification
    Maj+Ctrl+Z Rétablir la modification précedente
    Ctrl+F Chercher une expression dans l'éditeur
    Maj+Ctrl+F Chercher et remplacer une expression par une autre
    F10 Ouvrir une documentation du langage

    RaccourciAction
    F1 Afficher cette aide
    Tab Indenter la sélection
    Maj+Tab Désindenter la sélection
    Ctrl+A Sélectionner le contenu de l'éditeur
    Ctrl+C Copier la sélection dans le presse-papier
    Ctrl+V Remplacer la sélection par le contenu du presse-papier
    Ctrl+X Supprimer la sélection et la copier dans le presse-papier
    Maj+Ctrl+R Chercher et remplacer une expression par une autre dans tout l'éditeur
    Une solution possible :

    On fait d’abord un regroupement (GROUP BY) d’information par joueur (id_joueur)sélectionnés.

    On calcule ensuite la somme des points qu’ils ont marqués (essais:5 points,transformations:2 points, penalites:3 points).

    On retient dans le résultat final les nom,position du joueur et la somme des points qu’il a marqué.

    Requête SQL correspondante :

    SELECT nom, position, SUM(5*essais)+ SUM(2*transformations) + SUM(3*penalites) AS points
    FROM joueurs NATURAL JOIN selections
    GROUP BY id_joueur;
    
  2. Groupement et restriction
    • Question
    • Solution

    Ecrire une requête SQL répondant à la question :

    • \(Q_1\) : « nom des joueurs, leur position et le nombre total de points marqués pour les joueurs ayant fait au moins 2 matchs ».
    Votre réponse :
    sql : sixnations.sql
    
        
    >
    Output
    
                    

    Interpréteur

    MenuAction
    Ré-initialiser les sorties
    Faire apparaître le menu d'aide
    Interpréter le programme

    Editeur

    MenuRaccouciAction
    Ctrl+N Initialiser l'éditeur
    Ctrl+O Charger le contenu d'un fichier dans l'éditeur
    Ctrl+S Sauvegarder le contenu de l'éditeur dans un fichier
    Ctrl+P Imprimer le contenu de l'éditeur
    Ctrl+Z Annuler la dernière modification
    Maj+Ctrl+Z Rétablir la modification précedente
    Ctrl+F Chercher une expression dans l'éditeur
    Maj+Ctrl+F Chercher et remplacer une expression par une autre
    F10 Ouvrir une documentation du langage

    RaccourciAction
    F1 Afficher cette aide
    Tab Indenter la sélection
    Maj+Tab Désindenter la sélection
    Ctrl+A Sélectionner le contenu de l'éditeur
    Ctrl+C Copier la sélection dans le presse-papier
    Ctrl+V Remplacer la sélection par le contenu du presse-papier
    Ctrl+X Supprimer la sélection et la copier dans le presse-papier
    Maj+Ctrl+R Chercher et remplacer une expression par une autre dans tout l'éditeur
    Une solution possible :

    On fait un regroupement (GROUP BY) par joueur (id_joueur) sélectionné.

    On ne retient dans ces regroupements que les joueurs ayant été sélectionnées pour plus d’un match de leur équipe (HAVING COUNT(id_match) > 1).

    On récupère dans le résultat final le nom des joueurs, leur poste et les points qu’ils ont marqués (essais:5 points,transformations:2 points,penalites:3 points).

    Requête SQL correspondante :

    SELECT nom, position, COUNT(id_match) AS matchs, SUM(5*essais)+ SUM(2*transformations) + SUM(3*penalites) AS points
    FROM joueurs NATURAL JOIN selections
    GROUP BY id_joueur
    HAVING COUNT(id_match) > 1;
    
  3. Groupement et restriction avec requête imbriquée
    • Question
    • Solution
    Ecrire une requête SQL répondant à la question :
    • \(Q_1\) : « nom des joueurs, leur position et le nombre total de points marqués pour les joueurs ayant marqués le plus d’essais ».
    Votre réponse :
    sql : sixnations.sql
    
        
    >
    Output
    
                    

    Interpréteur

    MenuAction
    Ré-initialiser les sorties
    Faire apparaître le menu d'aide
    Interpréter le programme

    Editeur

    MenuRaccouciAction
    Ctrl+N Initialiser l'éditeur
    Ctrl+O Charger le contenu d'un fichier dans l'éditeur
    Ctrl+S Sauvegarder le contenu de l'éditeur dans un fichier
    Ctrl+P Imprimer le contenu de l'éditeur
    Ctrl+Z Annuler la dernière modification
    Maj+Ctrl+Z Rétablir la modification précedente
    Ctrl+F Chercher une expression dans l'éditeur
    Maj+Ctrl+F Chercher et remplacer une expression par une autre
    F10 Ouvrir une documentation du langage

    RaccourciAction
    F1 Afficher cette aide
    Tab Indenter la sélection
    Maj+Tab Désindenter la sélection
    Ctrl+A Sélectionner le contenu de l'éditeur
    Ctrl+C Copier la sélection dans le presse-papier
    Ctrl+V Remplacer la sélection par le contenu du presse-papier
    Ctrl+X Supprimer la sélection et la copier dans le presse-papier
    Maj+Ctrl+R Chercher et remplacer une expression par une autre dans tout l'éditeur
    Une solution possible :

    On fait un regroupement (GROUP BY) par joueur (id_joueur) sélectionnés.

    On ne retient dans ces regroupements que les joueurs ayant marqué le nombre maximal d’essais.

    On récupère dans le résultat final les nom,prenom,position et points marqués (essais:5 points,transformations:2 points,penalites:3 points) par ces joueurs.

    Requête SQL correspondante :

    SELECT nom, prenom,position, SUM(5*essais)+ SUM(2*transformations) + SUM(3*penalites)  AS points
    FROM joueurs NATURAL JOIN selections
    GROUP BY id_joueur
    HAVING essais = (SELECT MAX(essais) FROM selections);
    
  4. Restriction, groupement et restriction
    • Question
    • Solution
    Ecrire une requête SQL répondant à la question :
    • \(Q_1\) : « Rechercher le nom,prenom, position et score des joueurs de l’équipe d’Irlande ou d’Ecosse ayant fait au moins 2 matchs dans le tournoi des six nations ».
    Votre réponse :
    sql : sixnations.sql
    
        
    >
    Output
    
                    

    Interpréteur

    MenuAction
    Ré-initialiser les sorties
    Faire apparaître le menu d'aide
    Interpréter le programme

    Editeur

    MenuRaccouciAction
    Ctrl+N Initialiser l'éditeur
    Ctrl+O Charger le contenu d'un fichier dans l'éditeur
    Ctrl+S Sauvegarder le contenu de l'éditeur dans un fichier
    Ctrl+P Imprimer le contenu de l'éditeur
    Ctrl+Z Annuler la dernière modification
    Maj+Ctrl+Z Rétablir la modification précedente
    Ctrl+F Chercher une expression dans l'éditeur
    Maj+Ctrl+F Chercher et remplacer une expression par une autre
    F10 Ouvrir une documentation du langage

    RaccourciAction
    F1 Afficher cette aide
    Tab Indenter la sélection
    Maj+Tab Désindenter la sélection
    Ctrl+A Sélectionner le contenu de l'éditeur
    Ctrl+C Copier la sélection dans le presse-papier
    Ctrl+V Remplacer la sélection par le contenu du presse-papier
    Ctrl+X Supprimer la sélection et la copier dans le presse-papier
    Maj+Ctrl+R Chercher et remplacer une expression par une autre dans tout l'éditeur
    Une solution possible :

    On vérifie d’abord que ce sont bien des joueurs sélectionnés en équipe d’Irlande iu d’Ecosse.

    On fait ensuite un regroupement(GROUP BY) par joueur (id_joueur).

    On ne retient dans ces regroupements que les joueurs ayant était sélection plus d’une fois.

    On récupère dans le résultat final les noms d’équipes (id_equipe) et les nom,prenom,position et points marqués (essais:5 points,transformations:2 points,penalites:3 points) par les joueurs de ces équipes.

    Requête SQL correspondante :

    SELECT id_equipe,nom, prenom, position,SUM(5*essais)+ SUM(2*transformations) + SUM(3*penalites) AS points
    FROM joueurs NATURAL JOIN selections
    WHERE id_equipe IN ('IRL','ECO')
    GROUP BY id_joueur
    HAVING COUNT(id_match) > 1;
    

Arbres de requêtes

Sur une table

L’objectif de ces exercices est de savoir représenter sous forme d’arbre de requêtes les requêtes de base sur une seule table de la base de données « Au Tournoi des six nations ».

9/9 Aux pays des bières : SELECT, FROM, WHERE
  1. Vérification du contenu de la table 'equipes'
    • Question
    • Solution
    Construire un arbre de requêtes répondant à la question :
    • \(Q_1\) : « Rechercher les equipes du tournoi des six nations ».
    Votre réponse :
    Arbre de requêtes : graph363.json

    Tables

    Opérateurs unaires

    Opérateurs binaires

    Vue d'ensemble
    id_equipenom_equipepayscoach
    FRAXV de FranceFranceNoves
    ANGXV de la RoseAngleterreJones
    GALXV du PoireauPays de GallesHowley
    IRLXV du TrèfleIrlandeSchmidt
    ECOXV du ChardonEcosseCotter
    ITAAzzuriItalieO'shea
    Une solution possible :

    Récupérer les équipes : \(\displaystyle Q_1 = equipes\)

    Arbre de requêtes : sixnations-0-1.json

    Tables

    Opérateurs unaires

    Opérateurs binaires

    Vue d'ensemble
    id_equipenom_equipepayscoach
    FRAXV de FranceFranceNoves
    ANGXV de la RoseAngleterreJones
    GALXV du PoireauPays de GallesHowley
    IRLXV du TrèfleIrlandeSchmidt
    ECOXV du ChardonEcosseCotter
    ITAAzzuriItalieO'shea
  2. Vérification du contenu de la table 'joueurs'
    • Question
    • Solution
    Construire un arbre de requêtes répondant à la question :
    • \(Q_1\) : « Rechercher les joueurs du tournoi des six nations ».
    Votre réponse :
    Arbre de requêtes : graph370.json

    Tables

    Opérateurs unaires

    Opérateurs binaires

    Vue d'ensemble
    id_joueurid_equipenomprenompositionnationalitenaissancetaillepoids
    1ECOLaidlawGreg1/2 meleeEcosse1985-10-121.7580
    2ECOHoggStuartArriereEcosse1992-06-241.880
    3ECODunbarAlex3/4 centreEcosse1990-04-231.9180
    4ECORussellFinn1/2 ouvertureEcosse1992-09-231.8380
    5ECOSwinsonTim2eme ligneAngleterre1987-02-171.9580
    6ECOGrayRichie2eme ligneEcosse1989-08-242.0680
    7IRLEarlsKeith3/4 centreIrlande1987-10-021.880
    8IRLHendersonIain2eme ligneIrlande du Nord1992-02-211.9880
    9IRLJacksonPaddy1/2 ouvertureIrlande du Nord1990-04-051.7880
    10IRLStanderChristiaan Johan3eme ligne centreAfrique du Sud1992-01-051.8980
    11IRLGilroyCraig3/4 aileIrlande du Nord1991-03-111.8380
    12IRLRingroseGarry3/4 centreIrlande1995-01-261.8780
    13IRLBestRoryTalonneurIrlande du Nord1982-08-151.880
    14ANGTe'oBencentreNouvelle-Zélande1987-01-271.8980
    15ANGFarrellOwen3/4 centreAngleterre1991-09-241.8880
    16ANGDalyElliot3/4 centreAngleterre1992-10-081.8480
    17ANGYoungsTomTalonneurAngleterre1987-01-281.7580
    18ANGColeDanPilierAngleterre1987-05-091.9180
    19FRASlimaniRabahPilierFrance1989-10-181.7880
    20FRALopezCamille1/2 ouvertureFrance1989-04-031.7580
    21FRAFickouGael3/4 centreFrance1994-03-291.980
    22FRASpeddingScottArriereAfrique du Sud1986-05-041.8880
    23ITAGoriEdoardo1/2 meleeItalie1990-03-051.7880
    24ITACannaCarlo1/2 ouvertureItalie1992-08-251.9180
    25ITAParisseSergio3eme ligneArgentine1983-09-121.9680
    26GALDaviesJonathan3/4 centreAngleterre1988-04-051.8680
    27GALWilliamsLiam3/4 ailePays de Galles1991-04-091.8880
    28GALNorthGeorge3/4 aileAngleterre1992-04-131.9280
    29GALHalfpennyLeighArrierePays de Galles1988-12-221.7880
    30GALBiggarDan1/2 ouverturePays de Galles1989-10-161.8880
    Une solution possible :

    Récupérer les joueurs : \(\displaystyle Q_1 = joueurs\)

    Arbre de requêtes : sixnations-0-2.json

    Tables

    Opérateurs unaires

    Opérateurs binaires

    Vue d'ensemble
    id_joueurid_equipenomprenompositionnationalitenaissancetaillepoids
    1ECOLaidlawGreg1/2 meleeEcosse1985-10-121.7580
    2ECOHoggStuartArriereEcosse1992-06-241.880
    3ECODunbarAlex3/4 centreEcosse1990-04-231.9180
    4ECORussellFinn1/2 ouvertureEcosse1992-09-231.8380
    5ECOSwinsonTim2eme ligneAngleterre1987-02-171.9580
    6ECOGrayRichie2eme ligneEcosse1989-08-242.0680
    7IRLEarlsKeith3/4 centreIrlande1987-10-021.880
    8IRLHendersonIain2eme ligneIrlande du Nord1992-02-211.9880
    9IRLJacksonPaddy1/2 ouvertureIrlande du Nord1990-04-051.7880
    10IRLStanderChristiaan Johan3eme ligne centreAfrique du Sud1992-01-051.8980
    11IRLGilroyCraig3/4 aileIrlande du Nord1991-03-111.8380
    12IRLRingroseGarry3/4 centreIrlande1995-01-261.8780
    13IRLBestRoryTalonneurIrlande du Nord1982-08-151.880
    14ANGTe'oBencentreNouvelle-Zélande1987-01-271.8980
    15ANGFarrellOwen3/4 centreAngleterre1991-09-241.8880
    16ANGDalyElliot3/4 centreAngleterre1992-10-081.8480
    17ANGYoungsTomTalonneurAngleterre1987-01-281.7580
    18ANGColeDanPilierAngleterre1987-05-091.9180
    19FRASlimaniRabahPilierFrance1989-10-181.7880
    20FRALopezCamille1/2 ouvertureFrance1989-04-031.7580
    21FRAFickouGael3/4 centreFrance1994-03-291.980
    22FRASpeddingScottArriereAfrique du Sud1986-05-041.8880
    23ITAGoriEdoardo1/2 meleeItalie1990-03-051.7880
    24ITACannaCarlo1/2 ouvertureItalie1992-08-251.9180
    25ITAParisseSergio3eme ligneArgentine1983-09-121.9680
    26GALDaviesJonathan3/4 centreAngleterre1988-04-051.8680
    27GALWilliamsLiam3/4 ailePays de Galles1991-04-091.8880
    28GALNorthGeorge3/4 aileAngleterre1992-04-131.9280
    29GALHalfpennyLeighArrierePays de Galles1988-12-221.7880
    30GALBiggarDan1/2 ouverturePays de Galles1989-10-161.8880
  3. Vérification du contenu de la table 'matchs'
    • Question
    • Solution

    Construire un arbre de requêtes répondant à la question :

    • \(Q_1\) : « Rechercher les matchs du tournoi des six nations ».
    Votre réponse :
    Arbre de requêtes : graph377.json

    Tables

    Opérateurs unaires

    Opérateurs binaires

    Vue d'ensemble
    id_matchid_locauxid_visiteursjourhorairelocaux_scorevisiteurs_scorestadespectateurs
    1ECOIRL2017-02-0415:25:002722Murrayfield67144
    2ANGFRA2017-02-0417:50:001916Twickenham81902
    3ITAGAL2017-02-0515:00:00733Stadio olympico40986
    4ITAIRL2017-02-1115:25:001063Stadio olympico50197
    5GALANG2017-02-1117:50:001621Millennium Stadium74500
    6FRAECO2017-02-1216:00:002216Stade de France75283
    7ECOGAL2017-02-2515:25:00Murrayfield
    8IRLFRA2017-02-2517:50:00Aviva Stadium
    9ANGITA2017-02-2616:00:00Twickenham
    10GALIRL2017-03-1021:05:00Millennium Stadium
    11ITAFRA2017-03-1114:30:00Stadio olympico
    12ANGECO2017-03-1117:00:00Twickenham
    13ECOITA2017-03-1813:30:00Murrayfield
    14FRAGAL2017-03-1815:45:00Stade de France
    15IRLANG2017-03-1818:00:00Aviva Stadium
    Une solution possible :

    Récupérer les matchs : \(\displaystyle Q_1 = matchs\)

    Arbre de requêtes : sixnations-0-3.json

    Tables

    Opérateurs unaires

    Opérateurs binaires

    Vue d'ensemble
    id_matchid_locauxid_visiteursjourhorairelocaux_scorevisiteurs_scorestadespectateurs
    1ECOIRL2017-02-0415:25:002722Murrayfield67144
    2ANGFRA2017-02-0417:50:001916Twickenham81902
    3ITAGAL2017-02-0515:00:00733Stadio olympico40986
    4ITAIRL2017-02-1115:25:001063Stadio olympico50197
    5GALANG2017-02-1117:50:001621Millennium Stadium74500
    6FRAECO2017-02-1216:00:002216Stade de France75283
    7ECOGAL2017-02-2515:25:00Murrayfield
    8IRLFRA2017-02-2517:50:00Aviva Stadium
    9ANGITA2017-02-2616:00:00Twickenham
    10GALIRL2017-03-1021:05:00Millennium Stadium
    11ITAFRA2017-03-1114:30:00Stadio olympico
    12ANGECO2017-03-1117:00:00Twickenham
    13ECOITA2017-03-1813:30:00Murrayfield
    14FRAGAL2017-03-1815:45:00Stade de France
    15IRLANG2017-03-1818:00:00Aviva Stadium
  4. Vérification du contenu de la table 'selections'
    • Question
    • Solution

    Construire un arbre de requêtes répondant à la question :

    • \(Q_1\) : « Rechercher les selections de joueurs pour les matchs du tournoi des six nations ».
    Votre réponse :
    Arbre de requêtes : graph384.json

    Tables

    Opérateurs unaires

    Opérateurs binaires

    Vue d'ensemble
    id_joueurid_matchessaistransformationspenalites
    21200
    31100
    11032
    71100
    81100
    91121
    142100
    152013
    162001
    192100
    202013
    233100
    243010
    263100
    273100
    283100
    293034
    275100
    295013
    165100
    175100
    155013
    244011
    74200
    104300
    114300
    124100
    94090
    216100
    206015
    26100
    56100
    46002
    208000
    2011000
    2014000
    Une solution possible :

    Récupérer les sélections : \(\displaystyle Q_1 = selections\)

    Arbre de requêtes : sixnations-0-4.json

    Tables

    Opérateurs unaires

    Opérateurs binaires

    Vue d'ensemble
    id_joueurid_matchessaistransformationspenalites
    21200
    31100
    11032
    71100
    81100
    91121
    142100
    152013
    162001
    192100
    202013
    233100
    243010
    263100
    273100
    283100
    293034
    275100
    295013
    165100
    175100
    155013
    244011
    74200
    104300
    114300
    124100
    94090
    216100
    206015
    26100
    56100
    46002
    208000
    2011000
    2014000
  5. Projection
    • Question
    • Solution

    Construire un arbre de requêtes répondant à la question :

    • \(Q_1\) : « Rechercher les nom et prénom des joueurs du tournoi des six nations ».
    Votre réponse :
    Arbre de requêtes : graph391.json

    Tables

    Opérateurs unaires

    Opérateurs binaires

    Vue d'ensemble
    nomprenom
    LaidlawGreg
    HoggStuart
    DunbarAlex
    RussellFinn
    SwinsonTim
    GrayRichie
    EarlsKeith
    HendersonIain
    JacksonPaddy
    StanderChristiaan Johan
    GilroyCraig
    RingroseGarry
    BestRory
    Te'oBen
    FarrellOwen
    DalyElliot
    YoungsTom
    ColeDan
    SlimaniRabah
    LopezCamille
    FickouGael
    SpeddingScott
    GoriEdoardo
    CannaCarlo
    ParisseSergio
    DaviesJonathan
    WilliamsLiam
    NorthGeorge
    HalfpennyLeigh
    BiggarDan
    Une solution possible :

    On applique une projection (\(\Pi\)) sur les colonnes (nom,prenom) de la table des joueurs.

    Ecriture en algèbre relationnelle :

    • \(Q_1 = \Pi_{(nom,prenom)}(joueurs)\)
    Arbre de requêtes : sixnations-1.json

    Tables

    Opérateurs unaires

    Opérateurs binaires

    Vue d'ensemble
    nomprenom
    LaidlawGreg
    HoggStuart
    DunbarAlex
    RussellFinn
    SwinsonTim
    GrayRichie
    EarlsKeith
    HendersonIain
    JacksonPaddy
    StanderChristiaan Johan
    GilroyCraig
    RingroseGarry
    BestRory
    Te'oBen
    FarrellOwen
    DalyElliot
    YoungsTom
    ColeDan
    SlimaniRabah
    LopezCamille
    FickouGael
    SpeddingScott
    GoriEdoardo
    CannaCarlo
    ParisseSergio
    DaviesJonathan
    WilliamsLiam
    NorthGeorge
    HalfpennyLeigh
    BiggarDan
  6. Restriction
    • Question
    • Solution

    Construire un arbre de requêtes répondant à la question :

    • \(Q_1\) : « Rechercher les joueurs de l’équipe de France ».
    Votre réponse :
    Arbre de requêtes : graph398.json

    Tables

    Opérateurs unaires

    Opérateurs binaires

    Vue d'ensemble
    id_joueurid_equipenomprenompositionnationalitenaissancetaillepoids
    19FRASlimaniRabahPilierFrance1989-10-181.7880
    20FRALopezCamille1/2 ouvertureFrance1989-04-031.7580
    21FRAFickouGael3/4 centreFrance1994-03-291.980
    22FRASpeddingScottArriereAfrique du Sud1986-05-041.8880
    Une solution possible :

    On applique une restriction (\(\sigma\)) sur la table joueurs avec la condition [id_equipe='FRA'].

    Ecriture en algèbre relationnelle :
    • \(Q_1 = \sigma_{[id\_equipe='FRA']}(joueurs)\)
    Arbre de requêtes : sixnations-2.json

    Tables

    Opérateurs unaires

    Opérateurs binaires

    Vue d'ensemble
    id_joueurid_equipenomprenompositionnationalitenaissancetaillepoids
    19FRASlimaniRabahPilierFrance1989-10-181.7880
    20FRALopezCamille1/2 ouvertureFrance1989-04-031.7580
    21FRAFickouGael3/4 centreFrance1994-03-291.980
    22FRASpeddingScottArriereAfrique du Sud1986-05-041.8880
  7. Projection et Restriction
    • Question
    • Solution

    Construire un arbre de requêtes répondant à la question :

    • \(Q_1\) : « Rechercher les nom et prénom des joueurs de l’équipe de France ».
    Votre réponse :
    Arbre de requêtes : graph405.json

    Tables

    Opérateurs unaires

    Opérateurs binaires

    Vue d'ensemble
    nomprenom
    SlimaniRabah
    LopezCamille
    FickouGael
    SpeddingScott
    Une solution possible :

    On applique une projection (\(\Pi\)) sur les colonnes (nom,prenom) et une restriction (\(\sigma\)) sur la condition [id_equipe='FRA'] de la table joueurs.

    Ecriture en algèbre relationnelle :

    • \(Q_1 = \Pi_{(nom,prenom)}(\sigma_{[id\_equipe='FRA']}(joueurs))\).
    Arbre de requêtes : sixnations-3.json

    Tables

    Opérateurs unaires

    Opérateurs binaires

    Vue d'ensemble
    nomprenom
    SlimaniRabah
    LopezCamille
    FickouGael
    SpeddingScott
  8. Connecteur logique
    • Question
    • Solution

    Construire un arbre de requêtes répondant à la question :

    • \(Q_1\) : « Rechercher les matchs joués par l’équipe de France ».
    Votre réponse :
    Arbre de requêtes : graph412.json

    Tables

    Opérateurs unaires

    Opérateurs binaires

    Vue d'ensemble
    id_matchid_locauxid_visiteursjourhorairelocaux_scorevisiteurs_scorestadespectateurs
    2ANGFRA2017-02-0417:50:001916Twickenham81902
    6FRAECO2017-02-1216:00:002216Stade de France75283
    8IRLFRA2017-02-2517:50:00Aviva Stadium
    11ITAFRA2017-03-1114:30:00Stadio olympico
    14FRAGAL2017-03-1815:45:00Stade de France
    Une solution possible :

    On vérifie (\(\sigma\)) sur la table matchs que l’équipe qui joue à domicile ou (\(\lor\) : ou logique) l’équipe des visiteurs est bien l’équipe de France ([id_locaux='FRA' OR id_visiteurs='FRA'])

    Ecriture en algèbre relationnelle :

    • \(Q_1 = \sigma_{[id\_locaux='FRA' \; \lor \; id\_visiteurs='FRA']}(matchs)\).
    Arbre de requêtes : sixnations-4.json

    Tables

    Opérateurs unaires

    Opérateurs binaires

    Vue d'ensemble
    id_matchid_locauxid_visiteursjourhorairelocaux_scorevisiteurs_scorestadespectateurs
    2ANGFRA2017-02-0417:50:001916Twickenham81902
    6FRAECO2017-02-1216:00:002216Stade de France75283
    8IRLFRA2017-02-2517:50:00Aviva Stadium
    11ITAFRA2017-03-1114:30:00Stadio olympico
    14FRAGAL2017-03-1815:45:00Stade de France
  9. Connecteurs logiques
    • Question
    • Solution

    Construire un arbre de requêtes répondant à la question :

    • \(Q_1\) : « Rechercher les matchs joués par l’équipe de France au mois de mars ».
    Votre réponse :
    Arbre de requêtes : graph419.json

    Tables

    Opérateurs unaires

    Opérateurs binaires

    Vue d'ensemble
    id_matchid_locauxid_visiteursjourhorairelocaux_scorevisiteurs_scorestadespectateurs
    11ITAFRA2017-03-1114:30:00Stadio olympico
    14FRAGAL2017-03-1815:45:00Stade de France
    Une solution possible :

    On vérifie (\(\sigma\)) sur la table matchs que l’équipe qui joue à domicile ou (\(\lor\) : ou logique) l’équipe des visiteurs est bien l’équipe de France et (\(\land\) : et logique) que les matchs sont ceux du mois de mars.

    Ecriture en algèbre relationnelle :
    • \(Q_1 = \sigma_{[(id\_locaux='FRA' \; \lor \; id\_visiteurs='FRA') \; \land \; month(jour)='03']}(matchs)\).

    Attention à la priorité du connecteur logique \(\land\) sur le \(\lor\) (de même que la multiplication l’est sur l’addition)

    La requête :
    • \(Q_1 = \sigma_{[id\_locaux='FRA' \; \lor \; id\_visiteurs='FRA' \; \land \; month(jour)='03']}(matchs)\)

    donnerai comme résultat … les matchs à domicile de l’équipe de France et (\(\lor\) : ou logique) les matchs que l’équipe de France a joué à l’extérieur au mois de mars.

    Arbre de requêtes : sixnations-5.json

    Tables

    Opérateurs unaires

    Opérateurs binaires

    Vue d'ensemble
    id_matchid_locauxid_visiteursjourhorairelocaux_scorevisiteurs_scorestadespectateurs
    11ITAFRA2017-03-1114:30:00Stadio olympico
    14FRAGAL2017-03-1815:45:00Stade de France

Sur plusieurs tables

L’objectif de ces exercices est de savoir représenter sous forme d’arbre de requêtes une requête sur une plusieurs tables de la base de données « Au Tournoi des six nations ».

2/2 Au Tournoi des six nations : INNER, NATURAL, OUTER
  1. Produit cartésien et restriction
    • Question
    • Solution

    Construire un arbre de requêtes répondant à la question :

    • \(Q_1\) : « Rechercher les informations sur les matchs et les joueurs des équipes qui ont marqués (essais,transformations, penalites) ».

    Le résultat sera trié par l’identifiant des équipes qui jouent à domicile et le nom de joueurs qui ont marqués

    Votre réponse :
    Arbre de requêtes : graph427.json

    Tables

    Opérateurs unaires

    Opérateurs binaires

    Vue d'ensemble
    id_matchid_locauxid_visiteursjourhorairelocaux_scorevisiteurs_scorestadespectateursid_joueurid_equipenomprenompositionnationalitenaissancetaillepoidsessaistransformationspenalites
    1ECOIRL2017-02-0415:25:002722Murrayfield671442ECOHoggStuartArriereEcosse1992-06-241.880200
    1ECOIRL2017-02-0415:25:002722Murrayfield671443ECODunbarAlex3/4 centreEcosse1990-04-231.9180100
    1ECOIRL2017-02-0415:25:002722Murrayfield671441ECOLaidlawGreg1/2 meleeEcosse1985-10-121.7580032
    1ECOIRL2017-02-0415:25:002722Murrayfield671447IRLEarlsKeith3/4 centreIrlande1987-10-021.880100
    1ECOIRL2017-02-0415:25:002722Murrayfield671448IRLHendersonIain2eme ligneIrlande du Nord1992-02-211.9880100
    1ECOIRL2017-02-0415:25:002722Murrayfield671449IRLJacksonPaddy1/2 ouvertureIrlande du Nord1990-04-051.7880121
    2ANGFRA2017-02-0417:50:001916Twickenham8190214ANGTe'oBencentreNouvelle-Zélande1987-01-271.8980100
    2ANGFRA2017-02-0417:50:001916Twickenham8190215ANGFarrellOwen3/4 centreAngleterre1991-09-241.8880013
    2ANGFRA2017-02-0417:50:001916Twickenham8190216ANGDalyElliot3/4 centreAngleterre1992-10-081.8480001
    2ANGFRA2017-02-0417:50:001916Twickenham8190219FRASlimaniRabahPilierFrance1989-10-181.7880100
    2ANGFRA2017-02-0417:50:001916Twickenham8190220FRALopezCamille1/2 ouvertureFrance1989-04-031.7580013
    3ITAGAL2017-02-0515:00:00733Stadio olympico4098623ITAGoriEdoardo1/2 meleeItalie1990-03-051.7880100
    3ITAGAL2017-02-0515:00:00733Stadio olympico4098624ITACannaCarlo1/2 ouvertureItalie1992-08-251.9180010
    3ITAGAL2017-02-0515:00:00733Stadio olympico4098626GALDaviesJonathan3/4 centreAngleterre1988-04-051.8680100
    3ITAGAL2017-02-0515:00:00733Stadio olympico4098627GALWilliamsLiam3/4 ailePays de Galles1991-04-091.8880100
    3ITAGAL2017-02-0515:00:00733Stadio olympico4098628GALNorthGeorge3/4 aileAngleterre1992-04-131.9280100
    3ITAGAL2017-02-0515:00:00733Stadio olympico4098629GALHalfpennyLeighArrierePays de Galles1988-12-221.7880034
    5GALANG2017-02-1117:50:001621Millennium Stadium7450027GALWilliamsLiam3/4 ailePays de Galles1991-04-091.8880100
    5GALANG2017-02-1117:50:001621Millennium Stadium7450029GALHalfpennyLeighArrierePays de Galles1988-12-221.7880013
    5GALANG2017-02-1117:50:001621Millennium Stadium7450016ANGDalyElliot3/4 centreAngleterre1992-10-081.8480100
    5GALANG2017-02-1117:50:001621Millennium Stadium7450017ANGYoungsTomTalonneurAngleterre1987-01-281.7580100
    5GALANG2017-02-1117:50:001621Millennium Stadium7450015ANGFarrellOwen3/4 centreAngleterre1991-09-241.8880013
    4ITAIRL2017-02-1115:25:001063Stadio olympico5019724ITACannaCarlo1/2 ouvertureItalie1992-08-251.9180011
    4ITAIRL2017-02-1115:25:001063Stadio olympico501977IRLEarlsKeith3/4 centreIrlande1987-10-021.880200
    4ITAIRL2017-02-1115:25:001063Stadio olympico5019710IRLStanderChristiaan Johan3eme ligne centreAfrique du Sud1992-01-051.8980300
    4ITAIRL2017-02-1115:25:001063Stadio olympico5019711IRLGilroyCraig3/4 aileIrlande du Nord1991-03-111.8380300
    4ITAIRL2017-02-1115:25:001063Stadio olympico5019712IRLRingroseGarry3/4 centreIrlande1995-01-261.8780100
    4ITAIRL2017-02-1115:25:001063Stadio olympico501979IRLJacksonPaddy1/2 ouvertureIrlande du Nord1990-04-051.7880090
    6FRAECO2017-02-1216:00:002216Stade de France7528321FRAFickouGael3/4 centreFrance1994-03-291.980100
    6FRAECO2017-02-1216:00:002216Stade de France7528320FRALopezCamille1/2 ouvertureFrance1989-04-031.7580015
    6FRAECO2017-02-1216:00:002216Stade de France752832ECOHoggStuartArriereEcosse1992-06-241.880100
    6FRAECO2017-02-1216:00:002216Stade de France752835ECOSwinsonTim2eme ligneAngleterre1987-02-171.9580100
    6FRAECO2017-02-1216:00:002216Stade de France752834ECORussellFinn1/2 ouvertureEcosse1992-09-231.8380002
    Une solution possible :

    On peut faire un produit cartésien (\(\times\)) entre les tables matchs,selections,joueurs en vérifiant que chaque joueur de l’ensemble des joueurs est bien lié aux matchs par les selections. On récupère seulement les joueurs qui ont marqués des essais,transformations ou penalités.

    Ecriture en algèbre relationnelle :

    • \(R_1 = \sigma_{[essais > 0 \lor transformations > 0 \lor penalites > 0]}(selections)\)
    • \(T_1 = \times(R_1,joueurs)\)
    • \(R_2 = \sigma_{[R_1.id\_joueur=joueurs.id\_joueur]}(T_1)\)
    • \(T_2 = \times(matchs,R_2)\)
    • \(Q_1 = \sigma_{[matchs.id\_match=R_2.id\_match]}(T_2)\)

    N.B. : Lors de l’écriture de la requête, attention à la priorité du \(\land\) logique sur le \(\lor\) logique .

    On peut aussi faire une jointure naturelle (\(\Join_{[]}\)) puisque les matchs sont liés aux joueurs par des noms de colonnes communes (id_match,id_joueur) sur la table selections.

    Ecriture en algèbre relationnelle :

    • \(R_1 = \sigma_{[essais > 0 \lor transformations > 0 \lor penalites > 0]}(selections)\)
    • \(NJ_1 = \Join_{[]}(R_1,joueurs)\)
    • \(NJ_2 = \Join_{[]}(matchs,NJ_1)\)
    Arbre de requêtes : sixnations-6.json

    Tables

    Opérateurs unaires

    Opérateurs binaires

    Vue d'ensemble
    id_matchid_locauxid_visiteursjourhorairelocaux_scorevisiteurs_scorestadespectateursid_joueurid_equipenomprenompositionnationalitenaissancetaillepoidsessaistransformationspenalites
    1ECOIRL2017-02-0415:25:002722Murrayfield671442ECOHoggStuartArriereEcosse1992-06-241.880200
    1ECOIRL2017-02-0415:25:002722Murrayfield671443ECODunbarAlex3/4 centreEcosse1990-04-231.9180100
    1ECOIRL2017-02-0415:25:002722Murrayfield671441ECOLaidlawGreg1/2 meleeEcosse1985-10-121.7580032
    1ECOIRL2017-02-0415:25:002722Murrayfield671447IRLEarlsKeith3/4 centreIrlande1987-10-021.880100
    1ECOIRL2017-02-0415:25:002722Murrayfield671448IRLHendersonIain2eme ligneIrlande du Nord1992-02-211.9880100
    1ECOIRL2017-02-0415:25:002722Murrayfield671449IRLJacksonPaddy1/2 ouvertureIrlande du Nord1990-04-051.7880121
    2ANGFRA2017-02-0417:50:001916Twickenham8190214ANGTe'oBencentreNouvelle-Zélande1987-01-271.8980100
    2ANGFRA2017-02-0417:50:001916Twickenham8190215ANGFarrellOwen3/4 centreAngleterre1991-09-241.8880013
    2ANGFRA2017-02-0417:50:001916Twickenham8190216ANGDalyElliot3/4 centreAngleterre1992-10-081.8480001
    2ANGFRA2017-02-0417:50:001916Twickenham8190219FRASlimaniRabahPilierFrance1989-10-181.7880100
    2ANGFRA2017-02-0417:50:001916Twickenham8190220FRALopezCamille1/2 ouvertureFrance1989-04-031.7580013
    3ITAGAL2017-02-0515:00:00733Stadio olympico4098623ITAGoriEdoardo1/2 meleeItalie1990-03-051.7880100
    3ITAGAL2017-02-0515:00:00733Stadio olympico4098624ITACannaCarlo1/2 ouvertureItalie1992-08-251.9180010
    3ITAGAL2017-02-0515:00:00733Stadio olympico4098626GALDaviesJonathan3/4 centreAngleterre1988-04-051.8680100
    3ITAGAL2017-02-0515:00:00733Stadio olympico4098627GALWilliamsLiam3/4 ailePays de Galles1991-04-091.8880100
    3ITAGAL2017-02-0515:00:00733Stadio olympico4098628GALNorthGeorge3/4 aileAngleterre1992-04-131.9280100
    3ITAGAL2017-02-0515:00:00733Stadio olympico4098629GALHalfpennyLeighArrierePays de Galles1988-12-221.7880034
    5GALANG2017-02-1117:50:001621Millennium Stadium7450027GALWilliamsLiam3/4 ailePays de Galles1991-04-091.8880100
    5GALANG2017-02-1117:50:001621Millennium Stadium7450029GALHalfpennyLeighArrierePays de Galles1988-12-221.7880013
    5GALANG2017-02-1117:50:001621Millennium Stadium7450016ANGDalyElliot3/4 centreAngleterre1992-10-081.8480100
    5GALANG2017-02-1117:50:001621Millennium Stadium7450017ANGYoungsTomTalonneurAngleterre1987-01-281.7580100
    5GALANG2017-02-1117:50:001621Millennium Stadium7450015ANGFarrellOwen3/4 centreAngleterre1991-09-241.8880013
    4ITAIRL2017-02-1115:25:001063Stadio olympico5019724ITACannaCarlo1/2 ouvertureItalie1992-08-251.9180011
    4ITAIRL2017-02-1115:25:001063Stadio olympico501977IRLEarlsKeith3/4 centreIrlande1987-10-021.880200
    4ITAIRL2017-02-1115:25:001063Stadio olympico5019710IRLStanderChristiaan Johan3eme ligne centreAfrique du Sud1992-01-051.8980300
    4ITAIRL2017-02-1115:25:001063Stadio olympico5019711IRLGilroyCraig3/4 aileIrlande du Nord1991-03-111.8380300
    4ITAIRL2017-02-1115:25:001063Stadio olympico5019712IRLRingroseGarry3/4 centreIrlande1995-01-261.8780100
    4ITAIRL2017-02-1115:25:001063Stadio olympico501979IRLJacksonPaddy1/2 ouvertureIrlande du Nord1990-04-051.7880090
    6FRAECO2017-02-1216:00:002216Stade de France7528321FRAFickouGael3/4 centreFrance1994-03-291.980100
    6FRAECO2017-02-1216:00:002216Stade de France7528320FRALopezCamille1/2 ouvertureFrance1989-04-031.7580015
    6FRAECO2017-02-1216:00:002216Stade de France752832ECOHoggStuartArriereEcosse1992-06-241.880100
    6FRAECO2017-02-1216:00:002216Stade de France752835ECOSwinsonTim2eme ligneAngleterre1987-02-171.9580100
    6FRAECO2017-02-1216:00:002216Stade de France752834ECORussellFinn1/2 ouvertureEcosse1992-09-231.8380002
  2. Création de vue
    • Question
    • Solution
    Construire un arbre de requêtes pour créer une vue (\(resultats\)) sur les informations “métier” permettant de visualiser les résultats des matchs du tournoi des six nations :
    • les matchs : (id_locaux,id_visiteurs,jour,locaux_score, visiteurs_score)
    • les joueurs des équipes : (nom, id_equipe)
    • qui ont marqués : essais,transformations, penalites.
    Votre réponse :
    Arbre de requêtes : graph434.json

    Tables

    Opérateurs unaires

    Opérateurs binaires

    Vue d'ensemble
    id_locauxid_visiteursjourlocaux_scorevisiteurs_scorenomid_equipeessaistransformationspenalites
    ECOIRL2017-02-042722HoggECO200
    ECOIRL2017-02-042722DunbarECO100
    ECOIRL2017-02-042722LaidlawECO032
    ECOIRL2017-02-042722EarlsIRL100
    ECOIRL2017-02-042722HendersonIRL100
    ECOIRL2017-02-042722JacksonIRL121
    ANGFRA2017-02-041916Te'oANG100
    ANGFRA2017-02-041916FarrellANG013
    ANGFRA2017-02-041916DalyANG001
    ANGFRA2017-02-041916SlimaniFRA100
    ANGFRA2017-02-041916LopezFRA013
    ITAGAL2017-02-05733GoriITA100
    ITAGAL2017-02-05733CannaITA010
    ITAGAL2017-02-05733DaviesGAL100
    ITAGAL2017-02-05733WilliamsGAL100
    ITAGAL2017-02-05733NorthGAL100
    ITAGAL2017-02-05733HalfpennyGAL034
    GALANG2017-02-111621WilliamsGAL100
    GALANG2017-02-111621HalfpennyGAL013
    GALANG2017-02-111621DalyANG100
    GALANG2017-02-111621YoungsANG100
    GALANG2017-02-111621FarrellANG013
    ITAIRL2017-02-111063CannaITA011
    ITAIRL2017-02-111063EarlsIRL200
    ITAIRL2017-02-111063StanderIRL300
    ITAIRL2017-02-111063GilroyIRL300
    ITAIRL2017-02-111063RingroseIRL100
    ITAIRL2017-02-111063JacksonIRL090
    FRAECO2017-02-122216FickouFRA100
    FRAECO2017-02-122216LopezFRA015
    FRAECO2017-02-122216HoggECO100
    FRAECO2017-02-122216SwinsonECO100
    FRAECO2017-02-122216RussellECO002
    Une solution possible :

    Ecriture en algèbre relationnelle de la requête à mettre dans une vue :

    • \(NJ_1 = \Join_{[]}(selections,joueurs)\)
    • \(NJ_2 = \Join_{[]}(matchs,NJ_1)\)
    • \(R_1 = \sigma_{[essais > 0 \lor transformations > 0 \lor penalites > 0]}(NJ_2)\)
    • \(Q_1 = \Pi_{(id\_locaux, id\_visiteurs, jour, .., essais,transformations, penalites)}(R_1)\)
    Arbre de requêtes : sixnations-7.json

    Tables

    Opérateurs unaires

    Opérateurs binaires

    Vue d'ensemble
    id_locauxid_visiteursjourlocaux_scorevisiteurs_scorenomid_equipeessaistransformationspenalites
    ECOIRL2017-02-042722HoggECO200
    ECOIRL2017-02-042722DunbarECO100
    ECOIRL2017-02-042722LaidlawECO032
    ECOIRL2017-02-042722EarlsIRL100
    ECOIRL2017-02-042722HendersonIRL100
    ECOIRL2017-02-042722JacksonIRL121
    ANGFRA2017-02-041916Te'oANG100
    ANGFRA2017-02-041916FarrellANG013
    ANGFRA2017-02-041916DalyANG001
    ANGFRA2017-02-041916SlimaniFRA100
    ANGFRA2017-02-041916LopezFRA013
    ITAGAL2017-02-05733GoriITA100
    ITAGAL2017-02-05733CannaITA010
    ITAGAL2017-02-05733DaviesGAL100
    ITAGAL2017-02-05733WilliamsGAL100
    ITAGAL2017-02-05733NorthGAL100
    ITAGAL2017-02-05733HalfpennyGAL034
    GALANG2017-02-111621WilliamsGAL100
    GALANG2017-02-111621HalfpennyGAL013
    GALANG2017-02-111621DalyANG100
    GALANG2017-02-111621YoungsANG100
    GALANG2017-02-111621FarrellANG013
    ITAIRL2017-02-111063CannaITA011
    ITAIRL2017-02-111063EarlsIRL200
    ITAIRL2017-02-111063StanderIRL300
    ITAIRL2017-02-111063GilroyIRL300
    ITAIRL2017-02-111063RingroseIRL100
    ITAIRL2017-02-111063JacksonIRL090
    FRAECO2017-02-122216FickouFRA100
    FRAECO2017-02-122216LopezFRA015
    FRAECO2017-02-122216HoggECO100
    FRAECO2017-02-122216SwinsonECO100
    FRAECO2017-02-122216RussellECO002

Opérations ensemblistes

L’objectif de ces exercices est de savoir représenter sous forme d’arbre de requêtes des opérations ensemblistes (\(\cup,\cap,\setminus\)) « Au Tournoi des six nations ».

3/3 Union, Intersection, Différence
  1. Union
    • Question
    • Solution

    Construire un arbre de requêtes répondant à la question :

    • \(Q_1\) : « récupérer les noms du coach et des joueurs du XV de France ».
    Votre réponse :
    Arbre de requêtes : graph442.json

    Tables

    Opérateurs unaires

    Opérateurs binaires

    Vue d'ensemble
    coach
    Fickou
    Lopez
    Noves
    Slimani
    Spedding
    Une solution possible :

    On fait une union (\(\cup\)) entre la requête permettant de récupérer le nom du coach du XV de France dans l’ensemble des equipes et celle pour rechercher les joueurs de l’équipe du XV de France dans l’ensemble des joueurs.

    Ecriture en algèbre relationnelle :

    • \(R_1 = \sigma_{[id\_equipe='FRA']}(equipes)\)
    • \(P_1 = \Pi_{(coach)}(R_1)\)
    • \(R_2 = \sigma_{[id\_equipe='FRA']}(joueur)\)
    • \(P_2 = \Pi_{(nom)}(R_2)\)
    • \(Q_1 = \cup(P_1,P_2)\)
    Arbre de requêtes : sixnations-8.json

    Tables

    Opérateurs unaires

    Opérateurs binaires

    Vue d'ensemble
    coach
    Fickou
    Lopez
    Noves
    Slimani
    Spedding
  2. Intersection
    • Question
    • Solution

    Construire un arbre de requêtes répondant à la question :

    • \(Q_1\) : « récupérer les joueurs qui ont été selectionnés dans le XV de France pendant le tournoi des 6 nations ».
    Votre réponse :
    Arbre de requêtes : graph449.json

    Tables

    Opérateurs unaires

    Opérateurs binaires

    Vue d'ensemble
    nom
    Fickou
    Lopez
    Slimani
    Une solution possible :

    On fait une intersection (\(\cap\)) entre la requête permettant de récupérer le nom des joueurs du XV de France dans joueurs et celle permettant de récupérer le nom des joueurs qui ont été sélectionnés (jointure naturelle entre les tables joueurs,selections).

    Ecriture en algèbre relationnelle :

    • \(R_1 = \sigma_{[id\_equipe='FRA']}(joueurs)\)
    • \(P_1 = \Pi_{(nom)}(R_1)\)
    • \(NJ_1 = \Join_{[]}(joueurs,selections)\)
    • \(P_2 = \Pi_{(nom)}(NJ_1)\)
    • \(Q_1 = \cap(P_1,P_2)\)
    Arbre de requêtes : sixnations-9.json

    Tables

    Opérateurs unaires

    Opérateurs binaires

    Vue d'ensemble
    nom
    Fickou
    Lopez
    Slimani
  3. Différence
    • Question
    • Solution

    Construire un arbre de requêtes répondant à la question :

    • \(Q_1\) : « récupérer les joueurs qui n’ont pas été selectionnés dans le XV de France pendant le tournoi des 6 nations ».
    Votre réponse :
    Arbre de requêtes : graph456.json

    Tables

    Opérateurs unaires

    Opérateurs binaires

    Vue d'ensemble
    nom
    Spedding
    Une solution possible :

    On fait une différence (\(\setminus\)) entre la requête permettant de récupérer le nom des joueurs du XV de France dans joueurs et celle permettant de récupérer le nom des joueurs qui ont été sélectionnés (jointure naturelle entre les tables joueurs,selections).

    Ecriture en algèbre relationnelle :

    • \(R_1 = \sigma_{[id\_equipe='FRA']}(joueurs)\)
    • \(P_1 = \Pi_{(nom)}(R_1)\)
    • \(NJ_1 = \Join_{[]}(joueurs,selections)\)
    • \(R_2 = \sigma_{[id\_equipe='FRA']}(NJ_1)\)
    • \(P_2 = \Pi_{(nom)}(R_2)\)
    • \(Q_1 = \setminus(P_1,P_2)\)
    Arbre de requêtes : sixnations-10.json

    Tables

    Opérateurs unaires

    Opérateurs binaires

    Vue d'ensemble
    nom
    Spedding

Division relationnelle

1/1 Au Tournoi des Six Nations : division relationnelle
  1. GROUP BY, HAVING, COUNT
    • Question
    • Solution

    Construire un arbre de requêtes répondant à la question :

    • \(Q_1\) : « Rechercher le nom des joueurs qui ont été sélectionnés pour tous les matchs de leur équipe ».
    Votre réponse :
    Arbre de requêtes : graph464.json

    Tables

    Opérateurs unaires

    Opérateurs binaires

    Vue d'ensemble
    id_equipenom
    FRALopez
    Une solution possible :

    On peut mettre en œuvre la division relationnelle pour récupérer les noms des joueurs qui ont été sélectionnées pour tous les matchs de leur équipe en récupérant d’abord les joueurs ayant été sélectionnés :

    • \(NJ=\Join_{[]}(joueurs,selections)\)

    puis en les regroupant par leur nom et leur identifiant d’équipe :

    • GROUP BY id_equipe,nom

    puis en vérifiant (clause HAVING) que le nombre de matchs (id_match) des joueurs sélectionnés est égal au nombre total de matchs de leur équipe :

    COUNT(id_match) = (
                       SELECT COUNT(id_match)
                       FROM matchs
                       WHERE id_locaux=id_equipe OR id_visiteurs=id_equipe
                      )
    

    Ecriture en algèbre relationnelle :

    • \(Q = G_{[COUNT(id\_match) = (SELECT \; COUNT(id\_match) \; FROM \; matchs \; WHERE \; id\_locaux=id\_equipe \; OR \; id\_visiteurs=id\_equipe)]}^{(id_equipe,nom)}(\Join_{[]}(joueurs,selections))\).

    Le symbole \(G\) représente l’opérateur de regroupement appliqué sur la table services :

    • en exposant : attributs de regroupement (GROUP BY)
    • en indice : critère de restriction (clause HAVING) sur les regroupements.
    Arbre de requêtes : sixnations-11-3.json

    Tables

    Opérateurs unaires

    Opérateurs binaires

    Vue d'ensemble
    id_equipenom
    FRALopez

Fonctions d’agrégat

L’objectif de ces exercices est de savoir appliquer des fonctions d’agrégat sur les recherches « Au tournoi des six nations ».

2/2 COUNT, SUM, MAX, MIN, AVG
  1. Sur une requête simple
    • Question
    • Solution

    Construire un arbre de requêtes répondant à la question :

    • \(Q_1\) : «Quel a été l’affluence moyenne sur tous les matchs du tournoi des six nations ? ».
    Votre réponse :
    Arbre de requêtes : graph472.json

    Tables

    Opérateurs unaires

    Opérateurs binaires

    Vue d'ensemble
    SUM(spectateurs)/COUNT(*)
    65002
    Une solution possible :

    On pourra appliquer la fonction AVG() sur la table des matchs.

    On pourrait aussi calculer la somme (SUM()) des affluences divisée par le nombre (COUNT()) de matchs joués.

    Ecriture en algèbre relationnelle :

    • \(R = \sigma_{[spectateurs \; IS \; NOT \; NULL]}(matchs)\)
    • \(Q_1 = \Pi_{(SUM(spectateurs)/COUNT(*))}(R)\)
    Arbre de requêtes : sixnations-13.json

    Tables

    Opérateurs unaires

    Opérateurs binaires

    Vue d'ensemble
    SUM(spectateurs)/COUNT(*)
    65002
  2. Sur une requête imbriquée (1/2)
    • Question
    • Solution

    Construire un arbre de requêtes répondant à la question :

    • \(Q_1\) : « Rechercher le nom des équipes jouant à domicile, le nom de leur stade et le nombre de spectateurs pour les matchs qui ont une affluence supérieure à la moyenne de fréquentation lors des matchs».
    Votre réponse :
    Arbre de requêtes : graph479.json

    Tables

    Opérateurs unaires

    Opérateurs binaires

    Vue d'ensemble
    id_locauxstadespectateurs
    FRAStade de France75283
    Une solution possible :

    On pourra calculer dans une requête imbriquée la fréquentation moyenne (AVG()) de spectateurs lors des matchs puis tester pour chaque match de l’équipe de France si le nombre de spectateurs est supérieur à cette moyenne.

    Ecriture en algèbre relationnelle :

    • \(AVG = \Pi_{AVG(spectateurs)}(matchs)\)
    • \(R = \sigma_{[spectateurs > AVG ]}(matchs)\)
    • \(Q_1 = \Pi_{(id_locaux, stade, spectateurs)}(R)\)
    Arbre de requêtes : sixnations-14.json

    Tables

    Opérateurs unaires

    Opérateurs binaires

    Vue d'ensemble
    id_locauxstadespectateurs
    FRAStade de France75283

Groupements

L’objectif de ces exercices est de savoir regrouper le informations et appliquer des fonctions d’agrégat sur ces regroupements « Au tournoi des six nations ».

2/2 GROUP BY, HAVING
  1. Groupement
    • Question
    • Solution

    Construire un arbre de requêtes répondant à la question :

    • \(Q_1\) : « nom des joueurs, leur position et le nombre total de points marqués par les joueurs ».
    Votre réponse :
    Arbre de requêtes : graph487.json

    Tables

    Opérateurs unaires

    Opérateurs binaires

    Vue d'ensemble
    id_joueurnompositionpoints
    1Laidlaw1/2 melee12
    2HoggArriere15
    3Dunbar3/4 centre5
    4Russell1/2 ouverture6
    5Swinson2eme ligne5
    7Earls3/4 centre15
    8Henderson2eme ligne5
    9Jackson1/2 ouverture30
    10Stander3eme ligne centre15
    11Gilroy3/4 aile15
    12Ringrose3/4 centre5
    14Te'ocentre5
    15Farrell3/4 centre22
    16Daly3/4 centre8
    17YoungsTalonneur5
    19SlimaniPilier5
    20Lopez1/2 ouverture28
    21Fickou3/4 centre5
    23Gori1/2 melee5
    24Canna1/2 ouverture7
    26Davies3/4 centre5
    27Williams3/4 aile10
    28North3/4 aile5
    29HalfpennyArriere29
    Une solution possible :

    On fait d’abord un regroupement (GROUP BY) d’information par joueur (id_joueur)sélectionnés.

    On calcule ensuite la somme des points qu’ils ont marqués (essais:5 points,transformations:2 points, penalites:3 points).

    On retient dans le résultat final les nom,position du joueur et la somme des points qu’il a marqué.

    Ecriture en algèbre relationnelle :

    Arbre de requêtes : sixnations-16.json

    Tables

    Opérateurs unaires

    Opérateurs binaires

    Vue d'ensemble
    id_joueurnompositionpoints
    1Laidlaw1/2 melee12
    2HoggArriere15
    3Dunbar3/4 centre5
    4Russell1/2 ouverture6
    5Swinson2eme ligne5
    7Earls3/4 centre15
    8Henderson2eme ligne5
    9Jackson1/2 ouverture30
    10Stander3eme ligne centre15
    11Gilroy3/4 aile15
    12Ringrose3/4 centre5
    14Te'ocentre5
    15Farrell3/4 centre22
    16Daly3/4 centre8
    17YoungsTalonneur5
    19SlimaniPilier5
    20Lopez1/2 ouverture28
    21Fickou3/4 centre5
    23Gori1/2 melee5
    24Canna1/2 ouverture7
    26Davies3/4 centre5
    27Williams3/4 aile10
    28North3/4 aile5
    29HalfpennyArriere29
  2. Groupement et restriction
    • Question
    • Solution

    Construire un arbre de requêtes répondant à la question :

    • \(Q_1\) : « nom des joueurs, leur position et le nombre total de points marqués pour les joueurs ayant fait au moins 2 matchs ».
    Votre réponse :
    Arbre de requêtes : graph494.json

    Tables

    Opérateurs unaires

    Opérateurs binaires

    Vue d'ensemble
    id_joueurnompositionmatchspoints
    2HoggArriere215
    7Earls3/4 centre215
    9Jackson1/2 ouverture230
    15Farrell3/4 centre222
    16Daly3/4 centre28
    20Lopez1/2 ouverture528
    24Canna1/2 ouverture27
    27Williams3/4 aile210
    29HalfpennyArriere229
    Une solution possible :

    On fait un regroupement (GROUP BY) par joueur (id_joueur) sélectionné.

    On ne retient dans ces regroupements que les joueurs ayant été sélectionnées pour plus d’un match de leur équipe.

    On récupère dans le résultat final le nom des joueurs, leur poste et les points qu’ils ont marqués (essais:5 points,transformations:2 points,penalites:3 points).

    Ecriture en algèbre relationnelle :

    Arbre de requêtes : sixnations-17.json

    Tables

    Opérateurs unaires

    Opérateurs binaires

    Vue d'ensemble
    id_joueurnompositionmatchspoints
    2HoggArriere215
    7Earls3/4 centre215
    9Jackson1/2 ouverture230
    15Farrell3/4 centre222
    16Daly3/4 centre28
    20Lopez1/2 ouverture528
    24Canna1/2 ouverture27
    27Williams3/4 aile210
    29HalfpennyArriere229
 
Systèmes d'Information : Au tournoi des Six Nations, 13 avr. 2023.