TD 1: Interrogations de bases de données

Préliminaires

(Re)Démarrage de la machine

  • Booter sur une machine avec un CD KNOPPIX (faire F12 au moment du redémarrage si besoin).

  • :!: Au moment du menu de démarrage du CD, faire knoppix lang=fr

MySQL

Pour pouvoir effectuer le TD, il faut tout d'abord démarrer le serveur MySQL et récupérer une base de données de référence.

Base de données de référence: ol.sql. La sauvegarder sous /tmp/ol.sql .

Sous une fenêtre console (:!: le %%$%% désigne le prompt de la commande -> à ne pas recopier !):

# passage en mode administrateur (Root)
$ su -

# démarrage du serveur
$ /etc/init.d/mysql start

# appel au client avec inclusion d'une base de données initiales
$ mysql < /tmp/ol.sql

# démarrage du TD, sélection de la BDR 'ol'
$ mysql
mysql> use ol;

Interrogation d'une table simple

  1. de combien de tables est constituée la BDR ol ?
  2. décriver comment chaque table est structurée.
  3. lister les Clubs de L1.
  4. lister les Matchs.
  5. lister les joueurs (Table joueurs) simplement par leur Nom, Prénom et Date de naissance.
  6. même question mais en n'affichant que l'année de naissance et non la date complète.
  7. classer les clubs par ordre alphabétique.
  8. classer les joueurs par numéro de maillot
  9. même question en ne gardant que les joueurs dont le numéro est inférieur à 10 et nés avant 1980.
  10. lister les joueurs (Nom, prénom et date de naissance de la Table joueurs) nés entre 1980 et 1985.
  11. lister les joueurs dont le nom commencent par une lettre entre E (inclus) et N (exclus).
  12. lister par ordre décroissant les années de naissance distinctes des joueurs.
  13. Quel est le joueur (Nom, Prénom, Date de naissance) le plus vieux ? Le plus jeune ?
  14. Combien y-a-t'il de joueurs nés après le 15 mai 1984 ?
  15. Quel est l'âge moyen (en année) des joueurs de l'OL ?

Interrogation multi-tabulaire

On utilisera dans la suite pour la table des joueurs la table Joueurs.

  1. lister les gardiens de l'OL
  2. combien de matchs ont été joués à domicile par l'OL ?
  3. combien de matchs ont été joués jusqu'ici par l'OL ?
  4. lister les noms des buteurs
  5. même question mais en indiquant en plus le nombre de buts marqués par chacun
  6. lister les matchs avec les noms des clubs en classant par date
  7. combien de buts l'OL a-t'il marqué ? Combien en a-t'il encaissé ?
  8. l'OL a-t'il encaissé plus de buts à domicile ou à l'extérieur ?
  9. Quel est le meilleur buteur de l'OL ?
  10. Quel est le score du match OL-FC Nantes ?
  11. Combien de points possède l'OL ? (rappel: 1 victoire = 3 points, 1 nul = 1 point, 1 défaite = 0 points)

Réponses

Interrogation d'une table simple

  • de combien de tables est constituée la BDR ol ?
    mysql> show tables;
    +--------------+
    | Tables_in_ol |
    +--------------+
    | Buts         |
    | Club         |
    | Joueurs      |
    | Matchs       |
    | joueurs      |
    +--------------+
    5 rows in set (0.01 sec)
  • décriver comment chaque table est structurée.
    mysql> desc Buts;
    +-------------+------------+------+-----+---------+----------------+
    | Field       | Type       | Null | Key | Default | Extra          |
    +-------------+------------+------+-----+---------+----------------+
    | ButID       | int(11)    | NO   | PRI | NULL    | auto_increment |
    | ButeurID    | int(11)    | NO   | MUL | NULL    |                |
    | Minute      | int(11)    | NO   |     | NULL    |                |
    | Additionnel | int(11)    | YES  |     | NULL    |                |
    | CSC         | tinyint(1) | NO   |     | 0       |                |
    | MatchID     | int(11)    | NO   | MUL | NULL    |                |
    +-------------+------------+------+-----+---------+----------------+
    6 rows in set (0.00 sec)

    mysql> desc Club;
    +--------+--------------+------+-----+---------+----------------+
    | Field  | Type         | Null | Key | Default | Extra          |
    +--------+--------------+------+-----+---------+----------------+
    | ClubID | int(11)      | NO   | PRI | NULL    | auto_increment |
    | Nom    | varchar(100) | NO   |     | NULL    |                |
    +--------+--------------+------+-----+---------+----------------+
    2 rows in set (0.00 sec)

    mysql> desc Joueurs;
    +-------------------+--------------+------+-----+---------+----------------+
    | Field             | Type         | Null | Key | Default | Extra          |
    +-------------------+--------------+------+-----+---------+----------------+
    | JoueurID          | int(11)      | NO   | PRI | NULL    | auto_increment |
    | Numero            | int(11)      | NO   |     | NULL    |                |
    | Prenom            | varchar(100) | NO   |     | NULL    |                |
    | Nom               | varchar(100) | NO   |     | NULL    |                |
    | Poste             | varchar(100) | NO   |     | NULL    |                |
    | Date_de_naissance | date         | NO   |     | NULL    |                |
    | Nationalite       | varchar(3)   | NO   |     | NULL    |                |
    | ClubID            | int(11)      | NO   | MUL | NULL    |                |
    +-------------------+--------------+------+-----+---------+----------------+
    8 rows in set (0.00 sec)

    mysql> desc Matchs;
    +---------------+---------+------+-----+---------+----------------+
    | Field         | Type    | Null | Key | Default | Extra          |
    +---------------+---------+------+-----+---------+----------------+
    | MatchID       | int(11) | NO   | PRI | NULL    | auto_increment |
    | Domicile      | int(11) | NO   | MUL | NULL    |                |
    | Visiteur      | int(11) | NO   | MUL | NULL    |                |
    | Date_de_match | date    | NO   |     | NULL    |                |
    +---------------+---------+------+-----+---------+----------------+
    4 rows in set (0.00 sec)

    mysql> desc joueurs;
    +-------------------+--------------+------+-----+---------+-------+
    | Field             | Type         | Null | Key | Default | Extra |
    +-------------------+--------------+------+-----+---------+-------+
    | Numero            | int(11)      | YES  |     | NULL    |       |
    | Prenom            | varchar(100) | YES  |     | NULL    |       |
    | Nom               | varchar(100) | YES  |     | NULL    |       |
    | Poste             | varchar(100) | YES  |     | NULL    |       |
    | Date_de_naissance | date         | YES  |     | NULL    |       |
    | Nationalite       | char(3)      | YES  |     | NULL    |       |
    +-------------------+--------------+------+-----+---------+-------+
    6 rows in set (0.00 sec)
  • lister les Clubs de L1.
    mysql> select  * from Club;
    +--------+------------------------+
    | ClubID | Nom                    |
    +--------+------------------------+
    |      1 | Olympique Lyonnais     |
    |      2 | FC Nantes              |
    |      3 | AJ Auxerre             |
    |      4 | AS Monaco              |
    |      5 | AS Nancy Lorraine      |
    |      6 | Olympique de Marseille |
    |      7 | CS Sedan Ardennes      |
    |      8 | ES Troyes AC           |
    |      9 | FC Lorient             |
    |     10 | FC Sochaux             |
    |     11 | Girondins Bordeaux     |
    |     12 | Le Mans                |
    |     13 | Lille OSC              |
    |     14 | OGC Nice               |
    |     15 | Paris Saint-Germain    |
    |     16 | RC Lens                |
    |     17 | Rennes                 |
    |     18 | Saint-Etienne          |
    |     19 | Toulouse FC            |
    |     20 | Valenciennes           |
    +--------+------------------------+
    20 rows in set (0.00 sec)
  • lister les Matchs.
    mysql> select * from Matchs;
    +---------+----------+----------+---------------+
    | MatchID | Domicile | Visiteur | Date_de_match |
    +---------+----------+----------+---------------+
    |       1 |        1 |        2 | 2006-08-04    |
    |       3 |        1 |       19 | 2006-08-12    |
    |       4 |        1 |        8 | 2006-09-09    |
    |       5 |        1 |       13 | 2006-09-23    |
    |       6 |       11 |        1 | 2006-08-20    |
    |       7 |       14 |        1 | 2006-08-26    |
    |       8 |        9 |        1 | 2006-09-16    |
    +---------+----------+----------+---------------+
    7 rows in set (0.00 sec)
  • lister les joueurs (Table joueurs) simplement par leur Nom, Prénom et Date de naissance.
    mysql> select Nom, Prenom, Date_de_naissance from joueurs;
    +------------+-------------------------+-------------------+
    | Nom        | Prenom                  | Date_de_naissance |
    +------------+-------------------------+-------------------+
    | Coupet     | Gregory                 | 1972-12-31        |
    | Vercoutre  | Remy                    | 1980-06-26        |
    | Hartock    | Joan                    | 1987-02-17        |
    | Abidal     | Eric                    | 1979-07-11        |
    | Berthod    | Jeremy                  | 1984-04-24        |
    | Squillaci  | Sebastien               | 1980-08-11        |
    | Muller     | Patrick                 | 1976-12-17        |
    | Cris       | Cristiano Marques       | 1977-06-03        |
    | Benhamida  | Mourad                  | 1986-01-18        |
    | Clerc      | Francois                | 1983-04-18        |
    | Reveillere | Anthony                 | 1979-11-10        |
    | Cacapa     | Claudio Roberto         | 1976-05-29        |
    | Malouda    | Florent                 | 1980-06-13        |
    | Diarra     | Alou                    | 1981-07-15        |
    | Toulalan   | Jeremy                  | 1983-09-10        |
    | Idangar    | Sylvain                 | 1984-03-08        |
    | Hima       | Yacine                  | 1984-03-25        |
    | Kallstrom  | Kim                     | 1980-08-24        |
    | Juninho    | Pernambucano            | 1975-01-30        |
    | Mendes     | Tiago                   | 1981-05-02        |
    | Govou      | Sidney                  | 1979-07-27        |
    | Bettiol    | Gregory                 | 1986-03-30        |
    | Fred       | Frederico Chaves Guedes | 1983-10-03        |
    | Benzema    | Karim                   | 1987-12-19        |
    | Ben Arfa   | Hatem                   | 1987-03-07        |
    | Wiltord    | Sylvain                 | 1974-05-10        |
    | Carew      | John                    | 1979-09-05        |
    +------------+-------------------------+-------------------+
    27 rows in set (0.00 sec)
  • même question mais en n'affichant que l'année de naissance et non la date complète.
    mysql> SELECT Nom, Prenom, EXTRACT(YEAR FROM Date_de_naissance) AS Annee FROM joueurs;
    +------------+-------------------------+-------+
    | Nom        | Prenom                  | Annee |
    +------------+-------------------------+-------+
    | Coupet     | Gregory                 |  1972 |
    | Vercoutre  | Remy                    |  1980 |
    | Hartock    | Joan                    |  1987 |
    | Abidal     | Eric                    |  1979 |
    | Berthod    | Jeremy                  |  1984 |
    | Squillaci  | Sebastien               |  1980 |
    | Muller     | Patrick                 |  1976 |
    | Cris       | Cristiano Marques       |  1977 |
    | Benhamida  | Mourad                  |  1986 |
    | Clerc      | Francois                |  1983 |
    | Reveillere | Anthony                 |  1979 |
    | Cacapa     | Claudio Roberto         |  1976 |
    | Malouda    | Florent                 |  1980 |
    | Diarra     | Alou                    |  1981 |
    | Toulalan   | Jeremy                  |  1983 |
    | Idangar    | Sylvain                 |  1984 |
    | Hima       | Yacine                  |  1984 |
    | Kallstrom  | Kim                     |  1980 |
    | Juninho    | Pernambucano            |  1975 |
    | Mendes     | Tiago                   |  1981 |
    | Govou      | Sidney                  |  1979 |
    | Bettiol    | Gregory                 |  1986 |
    | Fred       | Frederico Chaves Guedes |  1983 |
    | Benzema    | Karim                   |  1987 |
    | Ben Arfa   | Hatem                   |  1987 |
    | Wiltord    | Sylvain                 |  1974 |
    | Carew      | John                    |  1979 |
    +------------+-------------------------+-------+
    27 rows in set (0.00 sec)
  • classer les clubs par ordre alphabétique.
    mysql> select Nom from Club ORDER BY Nom;
    +------------------------+
    | Nom                    |
    +------------------------+
    | AJ Auxerre             |
    | AS Monaco              |
    | AS Nancy Lorraine      |
    | CS Sedan Ardennes      |
    | ES Troyes AC           |
    | FC Lorient             |
    | FC Nantes              |
    | FC Sochaux             |
    | Girondins Bordeaux     |
    | Le Mans                |
    | Lille OSC              |
    | OGC Nice               |
    | Olympique de Marseille |
    | Olympique Lyonnais     |
    | Paris Saint-Germain    |
    | RC Lens                |
    | Rennes                 |
    | Saint-Etienne          |
    | Toulouse FC            |
    | Valenciennes           |
    +------------------------+
    20 rows in set (0.00 sec)
  • classer les joueurs par numéro de maillot
    mysql> select Nom, Prenom, Numero from joueurs order by 3;
    +------------+-------------------------+--------+
    | Nom        | Prenom                  | Numero |
    +------------+-------------------------+--------+
    | Coupet     | Gregory                 |      1 |
    | Clerc      | Francois                |      2 |
    | Cris       | Cristiano Marques       |      3 |
    | Muller     | Patrick                 |      4 |
    | Cacapa     | Claudio Roberto         |      5 |
    | Kallstrom  | Kim                     |      6 |
    | Juninho    | Pernambucano            |      8 |
    | Carew      | John                    |      9 |
    | Malouda    | Florent                 |     10 |
    | Fred       | Frederico Chaves Guedes |     11 |
    | Reveillere | Anthony                 |     12 |
    | Govou      | Sidney                  |     14 |
    | Diarra     | Alou                    |     15 |
    | Ben Arfa   | Hatem                   |     18 |
    | Benzema    | Karim                   |     19 |
    | Abidal     | Eric                    |     20 |
    | Mendes     | Tiago                   |     21 |
    | Wiltord    | Sylvain                 |     22 |
    | Berthod    | Jeremy                  |     23 |
    | Hartock    | Joan                    |     25 |
    | Toulalan   | Jeremy                  |     28 |
    | Squillaci  | Sebastien               |     29 |
    | Vercoutre  | Remy                    |     30 |
    | Hima       | Yacine                  |     31 |
    | Idangar    | Sylvain                 |     36 |
    | Benhamida  | Mourad                  |     38 |
    | Bettiol    | Gregory                 |     39 |
    +------------+-------------------------+--------+
    27 rows in set (0.00 sec)
  • même question en ne gardant que les joueurs dont le numéro est inférieur à 10 et nés avant 1980.
    mysql> select Nom, Prenom, Numero 
           from joueurs 
           where (Numero <=10) AND (Date_de_naissance < "1980-01-01") order by 3;
    +---------+-------------------+--------+
    | Nom     | Prenom            | Numero |
    +---------+-------------------+--------+
    | Coupet  | Gregory           |      1 |
    | Cris    | Cristiano Marques |      3 |
    | Muller  | Patrick           |      4 |
    | Cacapa  | Claudio Roberto   |      5 |
    | Juninho | Pernambucano      |      8 |
    | Carew   | John              |      9 |
    +---------+-------------------+--------+
    6 rows in set (0.00 sec)
  • lister les joueurs (Nom, prénom et date de naissance de la Table joueurs) nés entre 1980 et 1985.
    mysql> select Nom, Prenom, Date_de_naissance 
           from joueurs 
           where EXTRACT(YEAR FROM Date_de_naissance) between 1980 and 1985 order by 3 ;
    +-----------+-------------------------+-------------------+
    | Nom       | Prenom                  | Date_de_naissance |
    +-----------+-------------------------+-------------------+
    | Malouda   | Florent                 | 1980-06-13        |
    | Vercoutre | Remy                    | 1980-06-26        |
    | Squillaci | Sebastien               | 1980-08-11        |
    | Kallstrom | Kim                     | 1980-08-24        |
    | Mendes    | Tiago                   | 1981-05-02        |
    | Diarra    | Alou                    | 1981-07-15        |
    | Clerc     | Francois                | 1983-04-18        |
    | Toulalan  | Jeremy                  | 1983-09-10        |
    | Fred      | Frederico Chaves Guedes | 1983-10-03        |
    | Idangar   | Sylvain                 | 1984-03-08        |
    | Hima      | Yacine                  | 1984-03-25        |
    | Berthod   | Jeremy                  | 1984-04-24        |
    +-----------+-------------------------+-------------------+
    12 rows in set (0.00 sec)
  • lister les joueurs dont le nom commencent par une lettre entre E (inclus) et N (exclus).
    mysql> select Nom, Prenom from joueurs where nom between 'E' and 'N';
    +-----------+-------------------------+
    | Nom       | Prenom                  |
    +-----------+-------------------------+
    | Hartock   | Joan                    |
    | Muller    | Patrick                 |
    | Malouda   | Florent                 |
    | Idangar   | Sylvain                 |
    | Hima      | Yacine                  |
    | Kallstrom | Kim                     |
    | Juninho   | Pernambucano            |
    | Mendes    | Tiago                   |
    | Govou     | Sidney                  |
    | Fred      | Frederico Chaves Guedes |
    +-----------+-------------------------+
    10 rows in set (0.00 sec)
  • lister par ordre décroissant les années de naissance distinctes des joueurs.
    mysql> select DISTINCT EXTRACT(YEAR FROM Date_de_naissance) AS Annee FROM Joueurs ORDER BY 1 DESC;
    +-------+
    | Annee |
    +-------+
    |  1987 |
    |  1986 |
    |  1984 |
    |  1983 |
    |  1981 |
    |  1980 |
    |  1979 |
    |  1977 |
    |  1976 |
    |  1975 |
    |  1974 |
    |  1972 |
    +-------+
    12 rows in set (0.00 sec)
  • Quel est le joueur (Nom, Prénom, Date de naissance) le plus vieux ? Le plus jeune ?
mysql> select Nom, Prenom, Date_de_naissance from joueurs order by 3 limit 1;
+--------+---------+-------------------+
 | Nom | Prenom | Date_de_naissance | 
 | --- | ------ | ----------------- | 
+--------+---------+-------------------+
 | Coupet | Gregory | 1972-12-31 | 
 | ------ | ------- | ---------- | 
+--------+---------+-------------------+
1 row in set (0.00 sec)

mysql> select Nom, Prenom, Date_de_naissance from joueurs 
       where date_de_naissance=(select min(date_de_naissance) from joueurs);
+--------+---------+-------------------+
 | Nom | Prenom | Date_de_naissance | 
 | --- | ------ | ----------------- | 
+--------+---------+-------------------+
 | Coupet | Gregory | 1972-12-31 | 
 | ------ | ------- | ---------- | 
+--------+---------+-------------------+
1 row in set (0.00 sec)
mysql> select Nom, Prenom, Date_de_naissance from joueurs 
       where date_de_naissance=(select max(date_de_naissance) from joueurs);
+---------+--------+-------------------+
 | Nom | Prenom | Date_de_naissance | 
 | --- | ------ | ----------------- | 
+---------+--------+-------------------+
 | Benzema | Karim | 1987-12-19 | 
 | ------- | ----- | ---------- | 
+---------+--------+-------------------+
1 row in set (0.00 sec)

mysql> select Nom, Prenom, Date_de_naissance from joueurs order by 3 desc limit 1;
+---------+--------+-------------------+
 | Nom | Prenom | Date_de_naissance | 
 | --- | ------ | ----------------- | 
+---------+--------+-------------------+
 | Benzema | Karim | 1987-12-19 | 
 | ------- | ----- | ---------- | 
+---------+--------+-------------------+
1 row in set (0.00 sec)
  • Combien y-a-t'il de joueurs nés après le 15 mai 1984 ?
    select count(*) from joueurs where Date_de_naissance >= '1984-05-15';
    +----------+
    | count(*) |
    +----------+
    |        5 |
    +----------+
    1 row in set (0.00 sec)
  • Quel est l'âge moyen (en année) des joueurs de l'OL ?
    mysql> select ROUND(2008-AVG(EXTRACT(YEAR FROM Date_de_naissance))) as "Age Moyen" from joueurs;
    +-----------+
    | Age Moyen |
    +-----------+
    |        27 |
    +-----------+
    1 row in set (0.00 sec)

Autre solution:

    mysql> select FROM_DAYS(AVG(DATEDIFF(current_date, date_de_naissance))) from Joueurs;
    +-----------------------------------------------------------+
    | FROM_DAYS(AVG(DATEDIFF(current_date, date_de_naissance))) |
    +-----------------------------------------------------------+
    | 0027-02-05                                                |
    +-----------------------------------------------------------+
    1 row in set (0.00 sec)

Interrogation multi-tabulaire

On utilisera dans la suite pour la table des joueurs la table Joueurs.

  • lister les gardiens de l'OL
    mysql> select J.Nom, J.Prenom, J.Poste, C.Nom as Equipe 
           from Joueurs J, Club C 
           where Poste='Gardien' and C.Nom='Olympique Lyonnais' and C.ClubID=J.ClubID;
    +-----------+---------+---------+--------------------+
    | Nom       | Prenom  | Poste   | Equipe             |
    +-----------+---------+---------+--------------------+
    | Coupet    | Gregory | Gardien | Olympique Lyonnais |
    | Vercoutre | Remy    | Gardien | Olympique Lyonnais |
    | Hartock   | Joan    | Gardien | Olympique Lyonnais |
    +-----------+---------+---------+--------------------+
    3 rows in set (0.00 sec)
  • combien de matchs ont été joués à domicile par l'OL ?
    mysql> select count(*) 
           from Matchs 
           where Domicile=(select clubid from Club where Nom='Olympique Lyonnais');
    +----------+
    | count(*) |
    +----------+
    |        4 |
    +----------+
    1 row in set (0.00 sec)

    mysql> select count(*) 
           from Matchs M, Club C 
           where C.Nom = 'Olympique Lyonnais' and C.ClubID=M.Domicile;
    +----------+
    | count(*) |
    +----------+
    |        4 |
    +----------+
    1 row in set (0.00 sec)
  • combien de matchs ont été joués jusqu'ici par l'OL ?
    mysql> select count(*) 
           from Matchs M, Club C 
           where C.Nom = 'Olympique Lyonnais' and (C.ClubID=M.Domicile or C.ClubID=M.Visiteur);
    +----------+
    | count(*) |
    +----------+
    |        7 |
    +----------+
    1 row in set (0.00 sec)
  • lister les noms des buteurs
    mysql> select distinct J.Nom from Joueurs J, Buts B where B.ButeurID=J.JoueurID;
    +-----------+
    | Nom       |
    +-----------+
    | Squillaci |
    | Cris      |
    | Malouda   |
    | Juninho   |
    | Mendes    |
    | Fred      |
    | Benzema   |
    | Wiltord   |
    | Boukhari  |
    | Fabinho   |
    | Faubert   |
    | Vahirua   |
    | Ciani     |
    +-----------+
    13 rows in set (0.00 sec)
  • même question mais en indiquant en plus le nombre de buts marqués par chacun
    mysql> select J.Nom, count(J.Nom) 
           from Joueurs J, Buts B 
           where B.ButeurID=J.JoueurID 
           group by J.Nom 
           order by 2 desc;
    +-----------+--------------+
    | Nom       | count(J.Nom) |
    +-----------+--------------+
    | Fred      |            5 |
    | Malouda   |            4 |
    | Benzema   |            3 |
    | Cris      |            2 |
    | Juninho   |            2 |
    | Mendes    |            2 |
    | Fabinho   |            1 |
    | Squillaci |            1 |
    | Faubert   |            1 |
    | Vahirua   |            1 |
    | Wiltord   |            1 |
    | Ciani     |            1 |
    | Boukhari  |            1 |
    +-----------+--------------+
    13 rows in set (0.00 sec)
  • lister les matchs avec les noms des clubs en classant par date
    mysql> select C1.Nom as Domicile, C2.Nom as Visiteur, M.Date_de_match  
           from Club C1, Club C2, Matchs M 
           where C1.ClubID=M.Domicile and C2.ClubID=Visiteur order by 3;
    +--------------------+--------------------+---------------+
    | Domicile           | Visiteur           | Date_de_match |
    +--------------------+--------------------+---------------+
    | Olympique Lyonnais | FC Nantes          | 2006-08-04    |
    | Olympique Lyonnais | Toulouse FC        | 2006-08-12    |
    | Girondins Bordeaux | Olympique Lyonnais | 2006-08-20    |
    | OGC Nice           | Olympique Lyonnais | 2006-08-26    |
    | Olympique Lyonnais | ES Troyes AC       | 2006-09-09    |
    | FC Lorient         | Olympique Lyonnais | 2006-09-16    |
    | Olympique Lyonnais | Lille OSC          | 2006-09-23    |
    +--------------------+--------------------+---------------+
    7 rows in set (0.00 sec)
  • combien de buts l'OL a-t'il marqué ? Combien en a-t'il encaissé ?
mysql> select count(*) 
       from Buts B, Club C, Joueurs J 
       where B.ButeurID=J.JoueurID and J.ClubID=C.ClubID and C.Nom='Olympique Lyonnais' and B.CSC=FALSE;
+----------+
 | count(*) | 
 | -------- | 
+----------+
 | 19 | 
 | -- | 
+----------+
1 row in set (0.00 sec)
mysql> select B.ButID, J.Nom, J.ClubID, C.ClubID, M.MatchID 
       from Buts B, Club C, Joueurs J, Matchs M 
       where C.ClubID in (M.Domicile, M.Visiteur) and C.Nom='Olympique Lyonnais' and 
             (J.ClubID `<>` C.ClubID or (J.ClubID = C.ClubID AND B.CSC=TRUE)) and 
             J.JoueurID=B.ButeurID and B.MatchID=M.MatchID;
+-------+----------+--------+--------+---------+
 | ButID | Nom | ClubID | ClubID | MatchID | 
 | ----- | --- | ------ | ------ | ------- | 
+-------+----------+--------+--------+---------+
 | 4  | Boukhari | 2  | 1 | 1 | 
 | -  | -------- | -  | - | - | 
 | 7  | Fabinho  | 19 | 1 | 3 | 
 | 26 | Cris     | 1  | 1 | 5 | 
 | 10 | Faubert  | 11 | 1 | 6 | 
 | 15 | Vahirua  | 14 | 1 | 7 | 
 | 21 | Ciani    | 9  | 1 | 8 | 
+-------+----------+--------+--------+---------+
6 rows in set (0.00 sec)

mysql> select count(*) as 'Buts encaisses' 
       from Buts B, Club C, Joueurs J, Matchs M 
       where C.ClubID in (M.Domicile, M.Visiteur) and C.Nom='Olympique Lyonnais' and 
             (J.ClubID `<>` C.ClubID or (J.ClubID = C.ClubID AND B.CSC=TRUE)) and 
             J.JoueurID=B.ButeurID and B.MatchID=M.MatchID;
+----------------+
 | Buts encaisses | 
 | -------------- | 
+----------------+
 | 6 | 
 | - | 
+----------------+
1 row in set (0.00 sec)
  • l'OL a-t'il encaissé plus de buts à domicile ou à l'extérieur ?
mysql> select count(*) as 'Buts encaisses' 
       from Buts B, Club C, Joueurs J, Matchs M 
       where C.ClubID in (M.Domicile) and C.Nom='Olympique Lyonnais' and 
             (J.ClubID `<>` C.ClubID or B.CSC=TRUE) and 
             J.JoueurID=B.ButeurID and B.MatchID=M.MatchID;
+----------------+
 | Buts encaisses | 
 | -------------- | 
+----------------+
 | 3 | 
 | - | 
+----------------+
1 row in set (0.00 sec)
mysql> select count(*) as 'Buts encaisses' 
       from Buts B, Club C, Joueurs J, Matchs M 
       where C.ClubID in (M.Visiteur) and C.Nom='Olympique Lyonnais' and 
             (J.ClubID `<>` C.ClubID or B.CSC=TRUE) and 
             J.JoueurID=B.ButeurID and B.MatchID=M.MatchID;
+----------------+
 | Buts encaisses | 
 | -------------- | 
+----------------+
 | 3 | 
 | - | 
+----------------+
1 row in set (0.00 sec)
  • Quel est le meilleur buteur de l'OL ?
    mysql> select J.Nom, count(J.Nom) 
           from Joueurs J, Buts B 
           where B.ButeurID=J.JoueurID 
           group by J.Nom 
           order by 2 desc limit 1;
    +------+--------------+
    | Nom  | count(J.Nom) |
    +------+--------------+
    | Fred |            5 |
    +------+--------------+
    1 row in set (0.00 sec)
  • Quel est le score du match OL-FC Nantes ?
    mysql> select C.Nom, count(*) as Score from Club C, Joueurs J, Matchs M, Buts B 
           where M.Domicile=(select ClubID from Club where Nom='Olympique Lyonnais') and 
                 M.Visiteur=(select ClubID from Club where Nom='FC Nantes') and 
                 B.MatchID=M.MatchID and 
                 J.JoueurID=B.ButeurID and 
                 J.ClubID=C.ClubID 
           group by C.ClubID;
    +--------------------+-------+
    | Nom                | Score |
    +--------------------+-------+
    | Olympique Lyonnais |     3 |
    | FC Nantes          |     1 |
    +--------------------+-------+
    2 rows in set (0.01 sec)