Cette page est concu pour un ordi

Site critiques film

MCD

MPD

SQL 1

            drop database critiques_de_film_saddek_touati;

create database critiques_de_film_saddek_touati;

use critiques_de_film_saddek_touati;

set names utf8;

CREATE TABLE genre (
  id INT UNSIGNED NOT NULL AUTO_INCREMENT,
  nom VARCHAR(50) NOT NULL,
  PRIMARY KEY (id)
);


CREATE TABLE realisateur (
  id INT UNSIGNED NOT NULL AUTO_INCREMENT,
  nom VARCHAR(50) NOT NULL,
  prenom VARCHAR(50) NOT NULL,
  PRIMARY KEY (id)
);


CREATE TABLE producteur (
  id INT UNSIGNED NOT NULL AUTO_INCREMENT,
  nom VARCHAR(50) NOT NULL,
  prenom VARCHAR(50) NOT NULL,
  PRIMARY KEY (id)
);


CREATE TABLE film (
  id INT UNSIGNED NOT NULL AUTO_INCREMENT,
  titre VARCHAR(100) NOT NULL,
  annee_de_production INT NOT NULL,
  synopsis_court VARCHAR(200) NOT NULL,
  duree INT NOT NULL,
  genre_id INT UNSIGNED NOT NULL,
  realisateur_id INT UNSIGNED NOT NULL,
  producteur_id INT UNSIGNED NOT NULL,
  couleur boolean not null default false,
  PRIMARY KEY (id)
);


CREATE TABLE acteur (
  id INT UNSIGNED NOT NULL AUTO_INCREMENT,
  nom VARCHAR(50) NOT NULL,
  prenom VARCHAR(50) NOT NULL,
  PRIMARY KEY (id)
);


CREATE TABLE usager (
  id INT UNSIGNED NOT NULL AUTO_INCREMENT,
  nom VARCHAR(50) NOT NULL,
  prenom VARCHAR(50) NOT NULL,
  nom_usager VARCHAR(50) NOT NULL UNIQUE,
  couriel VARCHAR(100) NOT NULL UNIQUE,
  mot_de_passe VARCHAR(100) NOT NULL,
  film_favorit_id INT UNSIGNED NULL,
  PRIMARY KEY (id)
);


CREATE TABLE platforme (
  id INT UNSIGNED NOT NULL AUTO_INCREMENT,
  nom VARCHAR(45) NOT NULL,
  PRIMARY KEY (id)
);


CREATE TABLE jouer (
  role VARCHAR(100) NOT NULL,
  film_id INT UNSIGNED NOT NULL,
  acteur_id INT UNSIGNED NOT NULL,
  PRIMARY KEY (film_id, acteur_id, role) ##role n'est pas sensible a la casse
);


CREATE TABLE critiquer (
  texte VARCHAR(500) NOT NULL,
  date DATETIME NOT NULL,
  note tinyint NOT NULL,
  platforme_id INT UNSIGNED NULL,
  film_id INT UNSIGNED NOT NULL,
  usager_id INT UNSIGNED NOT NULL,
  PRIMARY KEY (film_id, usager_id)
);


ALTER TABLE film ADD CONSTRAINT FOREIGN KEY (genre_id) REFERENCES GENRE (id);
ALTER TABLE film ADD CONSTRAINT FOREIGN KEY (realisateur_id) REFERENCES realisateur (id);
ALTER TABLE film ADD CONSTRAINT FOREIGN KEY (producteur_id) REFERENCES producteur (id);

ALTER TABLE usager ADD CONSTRAINT FOREIGN KEY (film_favorit_id) REFERENCES film (id);

ALTER TABLE jouer ADD CONSTRAINT FOREIGN KEY (film_id) REFERENCES film (id);
ALTER TABLE jouer ADD CONSTRAINT FOREIGN KEY (acteur_id) REFERENCES acteur (id);

ALTER TABLE critiquer ADD CONSTRAINT FOREIGN KEY (platforme_id) REFERENCES platforme (id);
ALTER TABLE critiquer ADD CONSTRAINT FOREIGN KEY (film_id) REFERENCES film (id);
ALTER TABLE critiquer ADD CONSTRAINT FOREIGN KEY (usager_id) REFERENCES usager (id);


INSERT INTO genre (nom) values ('Science-Fiction'), ('Drame'), ('Horreur');
INSERT INTO platforme(nom) values ('Blu-Ray'), ('DVD'), ('Netflix'), ('Crave');
INSERT INTO producteur(nom, prenom) values ('Ibn Afane', 'Othmane'), ('Ben Abi Taleb', 'Ali'), ('Azahraa', 'Fatima');
INSERT INTO realisateur(nom, prenom) values ('Touati', 'Saddek'), ('Ben Abdo Allah', 'Mohammed'), ('El Habachi', 'Bilal');
INSERT INTO acteur(nom, prenom) values ('Abou Zakaria', 'Abd Allah'), ('Assidik', 'Abu Bakre'), ('El Khatab', 'Omar');


INSERT INTO film(titre, annee_de_production, synopsis_court, duree, genre_id, realisateur_id, producteur_id, couleur)
select CONCAT('titre: ', ' ', realisateur.nom, ' - ', producteur.nom, ' ', genre.nom) as titre, ceil(rand()*42)+1980 as annee_de_production, CONCAT('synopsis: ', ' ', realisateur.nom, ' - ', producteur.nom ) as synopsis_court, ceil(rand()*60)+30 as duree, genre.id, realisateur.id, producteur.id, (round(rand()) = 1) as couleur from producteur cross join realisateur cross join genre;

INSERT INTO jouer(role, film_id, acteur_id)
select CONCAT('role: ', ' ', acteur.nom, ' - ', film.titre) role, film.id, acteur.id from acteur cross join film;

INSERT INTO usager(nom, prenom, nom_usager, couriel, mot_de_passe, film_favorit_id)
select 'Binto Khowailid', 'Khadidja', 'Khadidja', 'khadidja@email.com', 'mot_de_passe', null as film_favorit_id;

INSERT INTO usager(nom, prenom, nom_usager, couriel, mot_de_passe, film_favorit_id)
select 'Binto Abubakr', 'Aicha', 'Aicha', 'aicha@email.com', 'mot_de_passe', id from film order by rand() limit 1;
INSERT INTO usager(nom, prenom, nom_usager, couriel, mot_de_passe, film_favorit_id)
select 'Ben Ali', 'El Hassen', 'El Hassen', 'el_hassen@email.com', 'mot_de_passe', id from film order by rand() limit 1;

INSERT INTO critiquer(texte, date, note, film_id, usager_id, platforme_id)
select CONCAT('text: ', ' ', usager.nom_usager, ' - ', film.titre ) as text, now() - INTERVAL FLOOR( RAND( ) * 366) DAY annee_de_production, floor(rand()*6) note, film.id, usager.id, (select id from platforme order by rand() limit 1) from usager cross join film;


        

SQL 2

            use critiques_de_film_saddek_touati;

#1) 
select count(*) nombre_film from film where producteur_id = 1 and annee_de_production between 1990 and 2000;

#2)
select distinct nom, prenom from film join producteur on(producteur.id=producteur_id) where couleur and genre_id=(select id from genre where nom = 'Science-Fiction');

#3) 
select titre, role from film join jouer on (film.id=film_id) join acteur on (acteur.id=acteur_id) where annee_de_production not between 2000 and 2010 and nom='Assidik' and prenom='Abu Bakre'; ## on rajoute  order by film.id pour que les roles s'affiche successif

#4)
select texte, note from critiquer where year(date) = 2021 and film_id=(select id from film where titre='titre:  El Habachi - Azahraa Drame');

#5)
select titre, texte, nom_usager, concat(realisateur.nom, ' ', realisateur.prenom) nom_realisateur from film join realisateur on(realisateur.id=realisateur_id) left join critiquer on(film.id=film_id) left join usager on (usager.id=usager_id);

#6)
select count(*) nombre_de_critique, prenom, nom, couriel from critiquer join usager on(usager.id=usager_id) group by usager.id having nombre_de_critique > 2;

#7)
select (select max(note) from critiquer where film_id=film.id) note_maximale, titre, annee_de_production, concat(producteur.nom, ' ', producteur.prenom) nom_producteur, genre.nom from film join producteur on(producteur.id=producteur_id) join genre on (genre.id=genre_id);

#8)
select titre, count(*) nombre_note from film join critiquer on (film.id = film_id) join platforme on (platforme.id = platforme_id) where platforme.nom = 'Crave' group by film.id;

#9)
select titre, note_moyenne from film join genre on (genre.id = genre_id) join (select film_id, avg(note) note_moyenne, count(case when year(date)=2020 then 1 else null end) count_critique_2020 from critiquer group by film_id) critiquer on (film.id = film_id) where genre.nom = 'Science-Fiction' and count_critique_2020 >= 2 group by film.id;

#10)
select avg(note) moyenne_notes from critiquer join film on (film_id = film.id) join realisateur on(realisateur_id=realisateur.id) join usager on (usager_id=usager.id) where usager.nom = 'Guillaume' and usager.prenom = 'Harvey' and realisateur.nom = 'Steven' and realisateur.prenom = 'Spielberg';