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¶
- de combien de tables est constituée la BDR ''ol'' ?
- décriver comment chaque table est structurée.
- lister les Clubs de L1.
- lister les Matchs.
- lister les joueurs (Table ''joueurs'') simplement par leur Nom, Prénom et Date de naissance.
- même question mais en n'affichant que l'année de naissance et non la date complète.
- classer les clubs par ordre alphabétique.
- classer les joueurs par numéro de maillot
- même question en ne gardant que les joueurs dont le numéro est inférieur à 10 et nés avant 1980.
- lister les joueurs (Nom, prénom et date de naissance de la Table ''joueurs'') nés entre 1980 et 1985.
- lister les joueurs dont le nom commencent par une lettre entre E (inclus) et N (exclus).
- lister par ordre décroissant les années de naissance distinctes des joueurs.
- Quel est le joueur (Nom, Prénom, Date de naissance) le plus vieux ? Le plus jeune ?
- Combien y-a-t'il de joueurs nés après le 15 mai 1984 ?
- 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''.
- lister les gardiens de l'OL
- combien de matchs ont été joués à domicile par l'OL ?
- combien de matchs ont été joués jusqu'ici par l'OL ?
- lister les noms des buteurs
- même question mais en indiquant en plus le nombre de buts marqués par chacun
- lister les matchs avec les noms des clubs en classant par date
- combien de buts l'OL a-t'il marqué ? Combien en a-t'il encaissé ?
- l'OL a-t'il encaissé plus de buts à domicile ou à l'extérieur ?
- Quel est le meilleur buteur de l'OL ?
- Quel est le score du match OL-FC Nantes ?
- 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)