Skip to content

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 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 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 ysql> 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 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 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

    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 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 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 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) </mysql>

  • lister les joueurs (Nom, prénom et date de naissance de la Table ''joueurs'') nés entre 1980 et 1985.

    :::mysql

    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 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 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 ? <code mysql|le plus vieux> 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) </code>

<code mysql | le plus jeune> 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) </code>

  • Combien y-a-t'il de joueurs nés après le 15 mai 1984 ?

    :::mysql 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 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 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 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 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 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 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é ? <code mysql | Buts marqués> 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) </code> <code mysql | Buts encaissés (plus difficile ...)> 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) </code>

  • l'OL a-t'il encaissé plus de buts à domicile ou à l'extérieur ? <code mysql | buts encaissés à domicile> 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) </code> 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) </code>

  • Quel est le meilleur buteur de l'OL ?

    :::mysql 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 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)