Académique Documents
Professionnel Documents
Culture Documents
TP 4
TP 4
GOUSSARD Jules
TP4
Exo 1 :
1]
a)
SELECT
S.nom AS nom_station,
R.VentMax,
R.dateRel AS date
FROM
releve R
INNER JOIN
station_meteo S ON R.idStation = S.idStation
WHERE
R.VentMax = (SELECT MAX(VentMax) FROM releve);
b)
SELECT
P.nom,
P.prenom
FROM
personne P
WHERE
P.idStation IN (
SELECT idStation
FROM personne
GROUP BY idStation
HAVING COUNT(idPersonne) = 1
);
2]
a)
SELECT
S.nom AS station,
MONTH(R.dateRel) AS mois,
YEAR(R.dateRel) AS annee,
SUM(R.PrecipJour) AS cumul
FROM
releve R
INNER JOIN
station_meteo S ON R.idStation = S.idStation
GROUP BY
station, annee, mois
ORDER BY
annee;
b)
SELECT
S.nom AS station,
YEAR(R.dateRel) AS annee,
ROUND(AVG(R.Tmax), 2) AS moyenne_Tmax
FROM
releve R
INNER JOIN
station_meteo S ON R.idStation = S.idStation
WHERE
MONTH(R.dateRel) = 8
GROUP BY
S.nom, YEAR(R.dateRel)
ORDER BY
YEAR(R.dateRel);
3]
a)
Les mots-clés "CREATE VIEW ... AS" permettent de créer une vue dans la base de données. La
vue ainsi créée s'appelle "moyennesMois" . Une vue est une requête préenregistrée qui peut
être utilisée comme une table virtuelle, offrant une perspective spécifique sur les données
existantes sans stocker physiquement les résultats, et sa durée de vie dépend de la gestion
de la base de données.
b)
c)
Cette requête tente d'insérer une nouvelle ligne dans la vue moyennesMois avec les valeurs
spécifiées. Cependant, les vues généralement ne supportent pas les opérations d'insertion
directe, et une erreur sera probablement générée en conséquence. Les vues sont
généralement utilisées pour interroger les données plutôt que pour effectuer des opérations
de modification directe.
d)
DROP VIEW IF EXISTS moyennesMois;
Exo 2 :
1)
Ce n’est pas possible car idPersonne est une clé étrangère dans d’autres tables, cela
empêcherait donc e fonctionnement de ces tables.
2)
DELETE FROM personne
WHERE idPersonne NOT IN (SELECT DISTINCT idPersonne FROM releve);
3)
INSERT INTO commune (numInsee, codePostal, nomCourt, nom, numDept)
VALUES ('13055', '13000', 'MAR', 'Marseille', '13')
ON DUPLICATE KEY UPDATE numInsee=numInsee;
5)
ALTER TABLE personne
ADD COLUMN email VARCHAR(255) DEFAULT NULL;
6)
La réaction serait nul puisque les contraintes CHECK sont utilisés pour vérifier des conditions
sur les valeurs d’une colonne, or la colonne ’email’ est nul.
Exo 3 :
1)
2)
a)
ALTER TABLE `image` ADD INDEX(`idPersonne`);
b)
c)
ALTER TABLE `image` ADD CONSTRAINT `cle1` FOREIGN KEY (`idPersonne`) REFERENCES
`personne`(`idPersonne`) ON DELETE RESTRICT ON UPDATE RESTRICT;
d)
ALTER TABLE `image` ADD CONSTRAINT `cle2` FOREIGN KEY (`idReleve`) REFERENCES
`releve`(`idReleve`) ON DELETE RESTRICT ON UPDATE RESTRICT;
4)
5)
6)
ALTER TABLE `releve` DROP `Tmoy`;
7)
a)
Il ne se passe rien.
b)
c)
d)
L’attribut c’est bien créé mais l’IdPersonne n’as pas été mis à jour. En effet il manquait le
‘COMMIT’ à alors que la requête possédait un ‘UPDATE’.
Exo 4 :
1)
SELECT station_meteo.nom AS station, YEAR(releve.dateRel) AS annee, COUNT(*) AS jours_d
e_pluie FROM releve JOIN station_meteo ON releve.idStation = station_meteo.idStation WH
ERE releve.precipJour > 5 GROUP BY station, annee ORDER BY annee, station;
3)
Exo 5 :
1)
SELECT idE
FROM Certifie
WHERE idA IN (SELECT idA FROM Avion WHERE nomA = 'Boeing');
2)
SELECT nomE
FROM Employes
WHERE idE IN (SELECT idE FROM Certifie WHERE idA IN (SELECT idA FROM Avion WHERE
nomA = 'Boeing'));
3)
SELECT noVol, de, vers, distance, hDepart, hArrivee
FROM Vols
WHERE EXISTS (
SELECT 1
FROM Certifie
WHERE Certifie.idE = Employes.idE
AND salaire > 6000
AND Vols.noVol = Certifie.noVol
);
4)
SELECT nomE
FROM Employes
WHERE idE IN (
SELECT idE
FROM Certifie
WHERE idA IN (SELECT idA FROM Avion WHERE DistanceAutonomieVol > 5000)
AND idA NOT IN (SELECT idA FROM Avion WHERE nomA LIKE 'Airbus%')
);
5)
SELECT idA
FROM Avion
WHERE DistanceAutonomieVol >= (
SELECT MAX(distance)
FROM Vols
WHERE de = 'Paris' AND vers = 'Sydney'
);
6)
SELECT idE
FROM Employes
WHERE salaire = (SELECT MAX(salaire) FROM Employes);
7)
SELECT idE
FROM Employes
WHERE salaire = (SELECT DISTINCT salaire FROM Employes ORDER BY salaire DESC LIMIT 1
OFFSET 1);
8)
SELECT idE
FROM Certifie
GROUP BY idE
ORDER BY COUNT(DISTINCT idA) DESC
LIMIT 1;
9)
SELECT idE
FROM Certifie
GROUP BY idE
HAVING COUNT(DISTINCT idA) = 3;