Sakila Database Project
**!!REMEMBER!!**    
    
**SELECT * | col 1,col 2,.. col n**
    
**FROM Table_name**
    
**WHERE conditions**
    
**GROUP BY col 1, col 2,...**
    
**HAVING conditions**
    
**ORDER BY col 1, col 2,...**
    
**LIMIT n;**
#Importer les dépendances
 
# Se Connecter à la BDD Sakila
#TBD
 
# définir la fct sql_to_pandas
def sql_to_df(sql_query):
    # Use pandas to pass sql query using connection form SQLite3
    df = pd.read_sql(sql_query, con)
    # Show the resulting DataFrame
    return df
 
 
**1-**    
* Afficher les 5 premiers Records de la table Actor
query = #TBD
# Grab from first two columns
sql_to_df(query).head()
 
  
    
       | 
      first_name | 
      last_name | 
    
  
  
    
      | 0 | 
      PENELOPE | 
      GUINESS | 
    
    
      | 1 | 
      NICK | 
      WAHLBERG | 
    
    
      | 2 | 
      ED | 
      CHASE | 
    
    
      | 3 | 
      JENNIFER | 
      DAVIS | 
    
    
      | 4 | 
      JOHNNY | 
      LOLLOBRIGIDA | 
    
  
 
 
**2-**    
* Récupérer dans une colonne Actor_Name le full_name des acteurs sous le format: first_name + " " + last_name
query =#TBD
sql_to_df(query).head()
 
  
    
       | 
      Actor_Name | 
    
  
  
    
      | 0 | 
      PENELOPE GUINESS | 
    
    
      | 1 | 
      NICK WAHLBERG | 
    
    
      | 2 | 
      ED CHASE | 
    
    
      | 3 | 
      JENNIFER DAVIS | 
    
    
      | 4 | 
      JOHNNY LOLLOBRIGIDA | 
    
  
 
 
**3-**    
* Récupérer dans une colonne Actor_Name le full_name des acteurs sous le format: first_name en minuscule + "." + last_name en majuscule
SQL Syntaxes
SELECT
CONCAT(lower(first_name), '.', UPPER(last_name)) AS 'Actor Name'
 
FROM
actor;
query =#TBD
sql_to_df(query).head()
 
  
    
       | 
      Actor_Name | 
    
  
  
    
      | 0 | 
      penelope.GUINESS | 
    
    
      | 1 | 
      nick.WAHLBERG | 
    
    
      | 2 | 
      ed.CHASE | 
    
    
      | 3 | 
      jennifer.DAVIS | 
    
    
      | 4 | 
      johnny.LOLLOBRIGIDA | 
    
  
 
 
**4-**    
* Récupérer dans une colonne Actor_Name le full_name des acteurs sous le format: last_name en majuscule + "." + premiere lettre du first_name en majuscule
query =#TBD
sql_to_df(query).head()
 
  
    
       | 
      Actor_Name | 
    
  
  
    
      | 0 | 
      GUINESS.P | 
    
    
      | 1 | 
      WAHLBERG.N | 
    
    
      | 2 | 
      CHASE.E | 
    
    
      | 3 | 
      DAVIS.J | 
    
    
      | 4 | 
      LOLLOBRIGIDA.J | 
    
  
 
 
**5-**    
* Trouver le ou les acteurs appelé(s) "JENNIFER"
query =#TBD
sql_to_df(query).head()
 
  
    
       | 
      actor_id | 
      first_name | 
      last_name | 
    
  
  
    
      | 0 | 
      4 | 
      JENNIFER | 
      DAVIS | 
    
  
 
 
**6-**    
* Trouver les acteurs ayant des prénoms de 3 charactères.
query =#TBD
sql_to_df(query).head()
 
  
    
       | 
      actor_id | 
      first_name | 
      last_name | 
    
  
  
    
      | 0 | 
      9 | 
      JOE | 
      SWANK | 
    
    
      | 1 | 
      13 | 
      UMA | 
      WOOD | 
    
    
      | 2 | 
      18 | 
      DAN | 
      TORN | 
    
    
      | 3 | 
      19 | 
      BOB | 
      FAWCETT | 
    
    
      | 4 | 
      26 | 
      RIP | 
      CRAWFORD | 
    
  
 
 
**7-**    
* Afficher les acteurs (actor_id, first_name, last_name, nbre char first_name, nbre char last_name )par ordre décroissant de longueur de prénoms
query =#TBD
sql_to_df(query).head()
 
  
    
       | 
      actor_id | 
      first_name | 
      last_name | 
      length(first_name) | 
      length(last_name) | 
    
  
  
    
      | 0 | 
      91 | 
      CHRISTOPHER | 
      BERRY | 
      11 | 
      5 | 
    
    
      | 1 | 
      163 | 
      CHRISTOPHER | 
      WEST | 
      11 | 
      4 | 
    
    
      | 2 | 
      10 | 
      CHRISTIAN | 
      GABLE | 
      9 | 
      5 | 
    
    
      | 3 | 
      58 | 
      CHRISTIAN | 
      AKROYD | 
      9 | 
      6 | 
    
    
      | 4 | 
      61 | 
      CHRISTIAN | 
      NEESON | 
      9 | 
      6 | 
    
  
 
 
**8-**    
* Afficher les acteurs (actor_id, first_name, last_name, nbre char first_name, nbre char last_name )par ordre décroissant de longueur de prénoms et croissant de longuer de noms
query =#TBD
sql_to_df(query).head()
 
  
    
       | 
      actor_id | 
      first_name | 
      last_name | 
      length(first_name) | 
      length(last_name) | 
    
  
  
    
      | 0 | 
      163 | 
      CHRISTOPHER | 
      WEST | 
      11 | 
      4 | 
    
    
      | 1 | 
      91 | 
      CHRISTOPHER | 
      BERRY | 
      11 | 
      5 | 
    
    
      | 2 | 
      109 | 
      SYLVESTER | 
      DERN | 
      9 | 
      4 | 
    
    
      | 3 | 
      10 | 
      CHRISTIAN | 
      GABLE | 
      9 | 
      5 | 
    
    
      | 4 | 
      58 | 
      CHRISTIAN | 
      AKROYD | 
      9 | 
      6 | 
    
  
 
 
**9-**    
* Trouver les acteurs ayant dans leurs last_names la chaine: "SON
query =#TBD
sql_to_df(query).head()
 
  
    
       | 
      actor_id | 
      first_name | 
      last_name | 
    
  
  
    
      | 0 | 
      6 | 
      BETTE | 
      NICHOLSON | 
    
    
      | 1 | 
      8 | 
      MATTHEW | 
      JOHANSSON | 
    
    
      | 2 | 
      61 | 
      CHRISTIAN | 
      NEESON | 
    
    
      | 3 | 
      62 | 
      JAYNE | 
      NEESON | 
    
    
      | 4 | 
      64 | 
      RAY | 
      JOHANSSON | 
    
  
 
 
**10-**    
* Trouver les acteurs ayant des last_names commençant par la chaine: "JOH"
query =#TBD
sql_to_df(query).head()
 
  
    
       | 
      actor_id | 
      first_name | 
      last_name | 
    
  
  
    
      | 0 | 
      8 | 
      MATTHEW | 
      JOHANSSON | 
    
    
      | 1 | 
      64 | 
      RAY | 
      JOHANSSON | 
    
    
      | 2 | 
      146 | 
      ALBERT | 
      JOHANSSON | 
    
  
 
 
**11-**    
*  Afficher par ordre alphabétique croissant les last_names et les first_names des acteurs ayant dans leurs last_names la chaine "LI"
query =#TBD
sql_to_df(query).head()
 
  
    
       | 
      actor_id | 
      first_name | 
      last_name | 
    
  
  
    
      | 0 | 
      86 | 
      GREG | 
      CHAPLIN | 
    
    
      | 1 | 
      82 | 
      WOODY | 
      JOLIE | 
    
    
      | 2 | 
      34 | 
      AUDREY | 
      OLIVIER | 
    
    
      | 3 | 
      15 | 
      CUBA | 
      OLIVIER | 
    
    
      | 4 | 
      172 | 
      GROUCHO | 
      WILLIAMS | 
    
  
 
 
**12-**    
*  Trouver dans la table country les countries "China", "Afghanistan", "Bangladesh"
query =#TBD
sql_to_df(query).head()
 
  
    
       | 
      country_id | 
      country | 
    
  
  
    
      | 0 | 
      1 | 
      Afghanistan | 
    
    
      | 1 | 
      12 | 
      Bangladesh | 
    
    
      | 2 | 
      23 | 
      China | 
    
  
 
 
**13-**    
* Trouver le nombre des acteurs ayant le meme last_name
* Afficher le resultat  par ordre décroissant
query =#TBD
sql_to_df(query).head()
 
  
    
       | 
      last_name | 
      Num Actors with Last Name | 
    
  
  
    
      | 0 | 
      KILMER | 
      5 | 
    
    
      | 1 | 
      NOLTE | 
      4 | 
    
    
      | 2 | 
      TEMPLE | 
      4 | 
    
    
      | 3 | 
      AKROYD | 
      3 | 
    
    
      | 4 | 
      ALLEN | 
      3 | 
    
  
 
 
**14-**    
* Trouver le nombre des acteurs ayant le meme last_name
* Afficher UNIQUEMENT les last_names communs à au moins 3 acteurs 
* Afficher par ordre alph. croissant
query =#TBD
sql_to_df(query).head()
 
  
    
       | 
      last_name | 
      Num Actors | 
    
  
  
    
      | 0 | 
      AKROYD | 
      3 | 
    
    
      | 1 | 
      ALLEN | 
      3 | 
    
    
      | 2 | 
      BERRY | 
      3 | 
    
    
      | 3 | 
      DAVIS | 
      3 | 
    
    
      | 4 | 
      DEGENERES | 
      3 | 
    
  
 
 
**15-**    
* Trouver le nombre des acteurs ayant le meme first_name Afficher le resultat par ordre alph. croissant
query =#TBD
sql_to_df(query).head()
 
  
    
       | 
      first_name | 
      Num Actors with Last Name | 
    
  
  
    
      | 0 | 
      ADAM | 
      2 | 
    
    
      | 1 | 
      AL | 
      1 | 
    
    
      | 2 | 
      ALAN | 
      1 | 
    
    
      | 3 | 
      ALBERT | 
      2 | 
    
    
      | 4 | 
      ALEC | 
      1 | 
    
  
 
 
**16-**    
* Corriger le first_name de l'acteur HARPO WILLIAMS qui était accidentellement inséré à GROUCHO WILLIAMS
query ="""
    SELECT * FROM actor 
    where last_name = 'WILLIAMS';"""
sql_to_df(query).head()
 
  
    
       | 
      actor_id | 
      first_name | 
      last_name | 
      last_update | 
    
  
  
    
      | 0 | 
      72 | 
      SEAN | 
      WILLIAMS | 
      2011-09-14 18:05:30 | 
    
    
      | 1 | 
      137 | 
      MORGAN | 
      WILLIAMS | 
      2011-09-14 18:05:31 | 
    
    
      | 2 | 
      172 | 
      GROUCHO | 
      WILLIAMS | 
      2011-09-14 18:05:32 | 
    
  
 
 
**17-**    
* Trouver les first_names,last names et l'adresse de chacun des membre staff 
    
RQ: utiliser join avec les tables staff & address:
query =#TBD
sql_to_df(query).head()
 
  
    
       | 
      first_name | 
      last_name | 
      address | 
    
  
  
    
      | 0 | 
      Mike | 
      Hillyer | 
      23 Workhaven Lane | 
    
    
      | 1 | 
      Jon | 
      Stephens | 
      1411 Lillydale Drive | 
    
  
 
 
**18-**    
* Afficher pour chaque membre du staff ,le total de ses salaires depuis Aout 2005. RQ: Utiliser les tables staff & payment.
query =#TBD
sql_to_df(query).head()
 
  
    
       | 
      staff_id | 
      first_name | 
      last_name | 
      Total Purchases | 
    
  
  
    
      | 0 | 
      1 | 
      Mike | 
      Hillyer | 
      33489.47 | 
    
    
      | 1 | 
      2 | 
      Jon | 
      Stephens | 
      33927.04 | 
    
  
 
 
**19-**    
* Afficher pour chaque film ,le nombre de ses acteurs
query =#TBD
sql_to_df(query).head()
 
  
    
       | 
      title | 
      Num Actors | 
    
  
  
    
      | 0 | 
      ACADEMY DINOSAUR | 
      10 | 
    
    
      | 1 | 
      ACE GOLDFINGER | 
      4 | 
    
    
      | 2 | 
      ADAPTATION HOLES | 
      5 | 
    
    
      | 3 | 
      AFFAIR PREJUDICE | 
      5 | 
    
    
      | 4 | 
      AFRICAN EGG | 
      5 | 
    
  
 
 
**20-**    
* Trouver le film intitulé "HUNCHBACK IMPOSSIBLE"
query =#TBD
sql_to_df(query).head()
 
 
**21-**    
* Combien de copies exist t il dans le systme d'inventaire pour le film Hunchback Impossible
query =#TBD
sql_to_df(query).head()
 
 
**22-**    
* Afficher les titres des films en anglais commençant par 'K' ou 'Q'
query =#TBD
sql_to_df(query).head()
 
  
    
       | 
      title | 
      language_id | 
    
  
  
    
      | 0 | 
      KANE EXORCIST | 
      1 | 
    
    
      | 1 | 
      KARATE MOON | 
      1 | 
    
    
      | 2 | 
      KENTUCKIAN GIANT | 
      1 | 
    
    
      | 3 | 
      KICK SAVANNAH | 
      1 | 
    
    
      | 4 | 
      KILL BROTHERHOOD | 
      1 | 
    
  
 
Bonus
   
* Afficher les first et last names des acteurs qui ont participé au film intitulé 'ACADEMY DINOSAUR'
query =#TBD
sql_to_df(query).head()
 
  
    
       | 
      first_name | 
      last_name | 
    
  
  
    
      | 0 | 
      PENELOPE | 
      GUINESS | 
    
    
      | 1 | 
      CHRISTIAN | 
      GABLE | 
    
    
      | 2 | 
      LUCILLE | 
      TRACY | 
    
    
      | 3 | 
      SANDRA | 
      PECK | 
    
    
      | 4 | 
      JOHNNY | 
      CAGE | 
    
  
 
    
* Trouver la liste des film catégorisés comme family films.
query =#TBD
sql_to_df(query).head()
 
  
    
       | 
      title | 
    
  
  
    
      | 0 | 
      AFRICAN EGG | 
    
    
      | 1 | 
      APACHE DIVINE | 
    
    
      | 2 | 
      ATLANTIS CAUSE | 
    
    
      | 3 | 
      BAKED CLEOPATRA | 
    
    
      | 4 | 
      BANG KWAI | 
    
  
 
    
* Afficher le top 5 des films les plus loués par ordre decroissant
query =#TBD
sql_to_df(query).head()
 
  
    
       | 
      title | 
      Num Rentals | 
    
  
  
    
      | 0 | 
      MOB DUFFEL | 
      16049 | 
    
    
      | 1 | 
      HUNCHBACK IMPOSSIBLE | 
      16048 | 
    
    
      | 2 | 
      ILLUSION AMELIE | 
      16047 | 
    
    
      | 3 | 
      VOYAGE LEGALLY | 
      16046 | 
    
    
      | 4 | 
      COMANCHEROS ENEMY | 
      16045 | 
    
  
 
    
* Afficher le chiffre d'affaire par store. RQ: le chiffre d'affaire = somme (amount)
query =#TBD
sql_to_df(query).head()
 
  
    
       | 
      store_id | 
      Total Amount ($) | 
    
  
  
    
      | 0 | 
      1 | 
      33489.47 | 
    
    
      | 1 | 
      2 | 
      33927.04 | 
    
  
 
    
* Lister par ordre décroissant le top 5 des catégories ayant le plus des revenues. 
    
RQ utiliser les tables : category, film_category, inventory, payment, et rental.
query =#TBD
sql_to_df(query).head()
 
  
    
       | 
      Category Name | 
      Revenue | 
    
  
  
    
      | 0 | 
      Sports | 
      5314.21 | 
    
    
      | 1 | 
      Sci-Fi | 
      4756.98 | 
    
    
      | 2 | 
      Animation | 
      4656.30 | 
    
    
      | 3 | 
      Drama | 
      4587.39 | 
    
    
      | 4 | 
      Comedy | 
      4383.58 | 
    
  
 
Bon travail!