Vous êtes sur la page 1sur 9

GANGNEUX Benjamin

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)

Haguenau Météo 12 1999 0.54839 6.65484 37.31290

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;

INSERT INTO station_meteo (nom, numInsee, altitude)


VALUES ('Météo Marseille', '13055', 5);
4)
UPDATE station_meteo
SET altitude = 6
WHERE nom = 'Météo Marseille';

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)

CREATE TABLE `meteo`.`image` (`idIlmage` INT UNSIGNED NOT NULL AUTO_INCREMENT ,


`libelle` VARCHAR(255) CHARACTER SET latin1 COLLATE latin1_swedish_ci NOT NULL ,
`image` TEXT CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL , `dateImg` DATE
NOT NULL , `idPersonne` INT UNSIGNED NOT NULL , `idReleve` BIGINT UNSIGNED NULL ,
PRIMARY KEY (`idIlmage`)) ENGINE = MyISAM;

2)

a)
ALTER TABLE `image` ADD INDEX(`idPersonne`);

b)

ALTER TABLE `image` ADD INDEX(`idReleve`);

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)

INSERT INTO `image` (`idIlmage`, `libelle`, `image`, `dateImg`, `idPersonne`, `idReleve`)

VALUES ('1', 'photo satellite tempête Lothar 26/12/1999', 'TP4\\26121999_satellite.jpg',


'1999-12-26 ', '3', '26'), ('2', 'Les vents de la tempête Lothar 26/12/1999',
'TP4\\26121999_vents.jpg', '1999-12-26', '1', '26');

INSERT INTO `image` (`idIlmage`, `libelle`, `image`, `dateImg`, `idPersonne`, `idReleve`)

VALUES ('3', 'photo satellite neige 26/12/1999', 'TP4\\04012003_satellite.jpg', '2003-01-04 ',


'5', NULL);

5)

SELECT dateImg, nom FROM `image` JOIN `personne` ON image.idPersonne =


personne.idPersonne;

6)
ALTER TABLE `releve` DROP `Tmoy`;

7)

a)
Il ne se passe rien.

b)

Cette fois le changement a bien été effectué.

c)

La transaction a bien été effectué.

d)

ALTER TABLE `personne` DROP `nbReleves`;

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;

Haguenau Météo 1999 13


Haguenau Météo 2000 97
Haguenau Météo 2001 57
Haguenau Météo 2002 10
Haguenau Météo 2003 5
Meteo_sud13 2003 52
Meteo_sud13 2004 4
2)
SELECT station_meteo.nom AS station, YEAR(releve.dateRel) AS annee FROM releve JOIN sta
tion_meteo ON releve.idStation = station_meteo.idStation WHERE releve.precipJour > 5 GRO
UP BY station, annee HAVING COUNT(*) < 10;

Haguenau Météo 2003


Meteo_sud13 2004

3)

SELECT commune.nom AS ville, DATE_FORMAT(releve.dateRel, '%m/%d') AS mois_date, YEA


R(releve.dateRel) AS annee, SUM(releve.PrecipJour) AS cumul_precipitations FROM releve J
OIN station_meteo ON releve.idStation = station_meteo.idStation JOIN commune ON station
_meteo.numInsee = commune.numInsee GROUP BY ville, mois_date, annee HAVING cumul_
precipitations > 1000;

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;

Vous aimerez peut-être aussi