SQL
----------------------------------- -- RECHERCHE 2.2 ----------------------------------- -- Question 1 SELECT Modele, Marque, Annee FROM VOITURE WHERE Annee >= 2010 ORDER BY Annee ; -- Question 2 -- Version JOIN...ON SELECT Modele, Date FROM VOITURE JOIN EXPERIENCE ON VOITURE.id_voiture = EXPERIENCE.id_voiture WHERE (VOITURE.)Marque = 'Renault' -- Version sélection sur un produit cartésien SELECT Modele, Date FROM VOITURE, EXPERIENCE WHERE VOITURE.id_voiture = EXPERIENCE.id_voiture AND (VOITURE.)Marque = 'Renault' -- Question 3 (suite du DS avec calcul de charge) def Charge(id) : R = interroge( 'SELECT temps, intensite FROM DONNEES WHERE '+ str(id) +'= id_exp ORDER BY temps' ) #-- R est un tableau à double entrée de forme similaire à la table créée par la requête #-- Il suffit donc d''en extraire la 1ère colonne pour former la liste T #-- et la 2e pour la liste I T, I = R[:,0], R[:,1] #-- si tableau de type numpy.array #-- T, I = [ligne[0] for ligne in R], [ligne[1] for ligne in R] RETURN Trapeze(T, I) -- Question 4 ID = interroge("SELECT id_exp, Modele, Annee FROM VOITURE JOIN EXPERIENCE ON VOITURE.id_voiture = EXPERIENCE.id_voiture WHERE Marque = 'Toyota' ") FOR i IN range(len(ID)) : print(ID[i][1], ID[i][2], Charge(ID[i][0])) ----------------------------------------------------------------------------- -- MINES 2015 : Sujet 2.0 ----------------------------------------------------------------------------- -- Q 12 SELECT nSerie FROM testfin WHERE 0.4 < Imoy AND Imoy < 0.5 -- Q 13 : une jointure SELECT testfin.nSerie, Imoy, Iec, modele FROM testfin JOIN production ON testfin.nSerie = production.nSerie WHERE 0.4 < Imoy AND Imoy < 0.5 -- Q 14 : une agrégation SELECT modele, COUNT(Num) AS nbrValide FROM production GROUP BY modele -- Q 15 : une sous-requête -- (on peut aussi faire une différence ensembliste mais + dangereux ) SELECT nSerie, fichierMes FROM testfin WHERE nSerie NOT IN (SELECT nSerie FROM production) -- Permet d'analyser ce qui a empêché certaines imprimantes d'être mises en production ----------------------------------------------------------------- -- C I N E M A ------------------------------------------------------------------ -- Q1 SELECT NomCinema, AdresseCinema FROM CINEMA JOIN AFFICHE ON CINEMA.NumeroCinema = AFFICHE.NumeroCinema WHERE AFFICHE.Titre = 'Brigadoon' -- Q2 SELECT DISTINCT MetteurEnScene FROM FILM JOIN AFFICHE ON FILM.Titre = AFFICHE.Titre JOIN CINEMA ON CINEMA.NumeroCinema = AFFICHE.NumeroCinema WHERE CINEMA.NomCinema = 'Katorza' -- Q3 SELECT DISTINCT NomActeur FROM DISTRIBUTION JOIN AFFICHE ON DISTRIBUTION.Titre = AFFICHE.Titre JOIN CINEMA ON CINEMA.NumeroCinema = AFFICHE.NumeroCinema WHERE CINEMA.VilleCinema = 'Nantes' -- Q4 SELECT DISTINCT DISTRIBUTION.Titre FROM DISTRIBUTION JOIN AFFICHE ON DISTRIBUTION.Titre = AFFICHE.Titre JOIN CINEMA ON CINEMA.NumeroCinema = AFFICHE.NumeroCinema WHERE CINEMA.VilleCinema = 'Nantes' AND NomActeur = 'Fred ASTAIRE' -- Q6 SELECT DISTINCT CINEMA.NomCinema FROM CINEMA WHERE VilleCinema = 'Chavagne en Paillé' AND NumeroCinema NOT IN (SELECT AFFICHE.NumeroCinema FROM FILM, AFFICHE WHERE FILM.Titre = AFFICHE.Titre AND FILM.Genre = 'SciFi') -- Q7 SELECT COUNT(*) AS NbCinemas FROM CINEMA WHERE VilleCinema = 'Kermeurzac h' -- Q8 SELECT NumeroCinema, COUNT(*) AS NbFilms FROM AFFICHE GROUP BY NumeroCinema -- Q9 SELECT NumeroCinema FROM AFFICHE GROUP BY NumeroCinema HAVING COUNT(*) >= 2