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!