Info MP/MP* : Révisions SQL

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