Bureau des Etudiants
Vous souhaitez réagir à ce message ? Créez un compte en quelques clics ou connectez-vous pour continuer.
Connexion

Récupérer mon mot de passe

Mai 2024
LunMarMerJeuVenSamDim
  12345
6789101112
13141516171819
20212223242526
2728293031  

Calendrier Calendrier

Le Deal du moment : -20%
Ecran PC GIGABYTE 28″ LED M28U 4K ( IPS, 1 ms, ...
Voir le deal
399 €

Correction par Sophie Toulouse

2 participants

Aller en bas

Correction par Sophie Toulouse Empty Correction par Sophie Toulouse

Message par ayoub Dim 12 Déc - 17:53

Bonjour et bon dimanche de révision bonne nouvelle Sophie Toulouse proffesseur de td en sql a trés gentillement accepté de nous faire parvenir des correction pour certain td de sql aussi je vous les postes.

Pour ceux qui n'aurai toujours pas le schema de relation:

DROP TABLE projection CASCADE;
DROP TABLE jouer CASCADE;
DROP TABLE cinema CASCADE;
DROP TABLE film CASCADE;
DROP TABLE personne CASCADE;

CREATE TABLE personne
(
id_personne INTEGER,
nom VARCHAR NOT NULL,
prenom VARCHAR NOT NULL,
CONSTRAINT pk_personne PRIMARY KEY(id_personne)
);

CREATE TABLE film
(
id_film INTEGER,
id_realisateur INTEGER,
titre VARCHAR NOT NULL,
genre VARCHAR,
annee INTEGER,
CONSTRAINT pk_film PRIMARY KEY(id_film),
CONSTRAINT fk_film_personne FOREIGN KEY(id_realisateur) REFERENCES personne(id_personne) ON DELETE SET NULL,
CONSTRAINT ck_film_anne CHECK(annee > 0 OR annee IS NULL)
);

CREATE TABLE cinema
(
id_cinema INTEGER,
nom VARCHAR NOT NULL,
adresse VARCHAR,
CONSTRAINT pk_cinema PRIMARY KEY(id_cinema)
);

CREATE TABLE jouer
(
id_acteur INTEGER,
id_film INTEGER,
role VARCHAR,
CONSTRAINT pk_jouer PRIMARY KEY(id_acteur, id_film),
CONSTRAINT fk_jouer_personne FOREIGN KEY(id_acteur) REFERENCES personne(id_personne) ON DELETE CASCADE,
CONSTRAINT fk_jouer_film FOREIGN KEY(id_film) REFERENCES film(id_film) ON DELETE CASCADE
);

CREATE TABLE projection
(
id_cinema INTEGER,
id_film INTEGER,
jour DATE,
CONSTRAINT pk_projection PRIMARY KEY(id_cinema, id_film, jour),
CONSTRAINT fk_projection_cinema FOREIGN KEY(id_cinema) REFERENCES cinema(id_cinema) ON DELETE CASCADE,
CONSTRAINT fk_projection_film FOREIGN KEY(id_film) REFERENCES film(id_film) ON DELETE CASCADE
);

SET datestyle='DMY';

\copy personne FROM personne.txt
\copy cinema FROM cinema.txt
\copy film FROM film.txt
\copy jouer FROM jouer.txt
\copy projection FROM projection.txt



Tp6:

-- Q1 : tout sur toutes les personnes
SELECT 'Q1' AS question, * FROM personne;

-- Q2 : prénom de toutes les personnes
SELECT 'Q2' AS question, prenom FROM personne;

-- Q3 : prénom de toutes les personnes, ordonnés par ordre alphabétique des prénoms
SELECT 'Q3' AS question, prenom FROM personne ORDER BY prenom;

-- Q4 : tous les prénoms portés par l'ensemble des personnes
SELECT DISTINCT 'Q4-1' AS question, prenom FROM personne;
SELECT DISTINCT 'Q4-2' AS question, prenom FROM personne ORDER BY prenom;

-- Q5 : tout sur toutes les personnes dont le prénom est John
SELECT 'Q5' AS question, * FROM personne WHERE prenom = 'John';

-- Q6 : tous les noms portés par l'ensemble des personnes dont le prénom est John
SELECT DISTINCT 'Q6' AS question, nom FROM personne WHERE prenom = 'John';

-- Q7 : produit cartésien entre personne et film => nb_ligne de la relation == nb_ligne personne * nb_ligne film
-- => nombre de lignes retournées == nombre de ligne dans personne * nombre de lignes dans film
SELECT 'Q7' AS question, * FROM personne, film;
SELECT 'Q7 : vérification cardinalité' AS question, 'nb_personne == ' || nb_personne || ' * ' || 'nb_film == ' || nb_film || ' = ' || nb_personne * nb_film
FROM (SELECT COUNT(*) AS nb_personne FROM personne) AS cpt_personne, (SELECT COUNT(*) AS nb_film FROM film) AS cpt_film;

-- Q8 : tout sur les personnes ayant joué un rôle dans un film
-- => jointure entre personne et jouer sur jouer.id_acteur == personne.id_personne
SELECT DISTINCT 'Q8-1' AS question, personne.* FROM personne, jouer WHERE jouer.id_acteur = personne.id_personne;
SELECT 'Q8-2' AS question, * FROM personne WHERE id_personne IN (SELECT id_acteur FROM jouer);

-- Q9 : produit cartésien entre personne et "acteur"
-- => nombre de lignes retournées == nombre de ligne dans personne * nombre de lignes dans jouer
-- le nombre de lignes dans la relation R :
-- personne JOIN jouer ON id_personne = id_acteur
-- est égal au nombre de lignes de la relation jouer, car une et une seule personne correspond à un id_acteur donné
SELECT 'Q9' AS question, * FROM (SELECT DISTINCT personne.* FROM personne, jouer WHERE jouer.id_acteur = personne.id_personne) AS acteur, film;
SELECT 'Q9 : vérification cardinalité' AS question, 'nb_film == ' || nb_film || ' * ' || 'nb_acteur == ' || nb_acteur || ' = ' || nb_film * nb_acteur
FROM
(SELECT COUNT(id_film) AS nb_film FROM film) AS cpt_film,
(SELECT COUNT(DISTINCT id_acteur) AS nb_acteur FROM jouer) AS cpt_acteur;

-- Q10 : interprétations
-- le nombre de lignes == nomnbre de lignes de jouer (car une unique personne, ainsi qu'un unique film, correspond à chaque interprétation)
SELECT 'Q10' AS question, personne.nom, personne.prenom, jouer.role, film.titre
FROM personne, film, jouer
WHERE personne.id_personne = jouer.id_acteur AND film.id_film = jouer.id_film;

-- Q11 : interprétations "formatées"
SELECT 'Q11' AS question, personne.prenom || ' ' || personne.nom || ' a joué le rôle de ' || jouer.role || ' dans le film ' || film.titre AS liste_role
FROM personne, film, jouer
WHERE personne.id_personne = jouer.id_acteur AND film.id_film = jouer.id_film;

-- Q12 : films qui sont des drames
SELECT 'Q12' AS question, titre FROM film WHERE genre = 'Drame';

-- Q13 : films projetés en 2002
SELECT DISTINCT 'Q13-1' AS question, film.titre
FROM film, projection
WHERE film.id_film = projection.id_film
AND jour >= '01/01/2002' AND jour < '01/01/2003';

SELECT DISTINCT 'Q13-2' AS question, film.titre
FROM film, projection
WHERE film.id_film = projection.id_film
AND jour BETWEEN '01/01/2002' AND '31/12/2003';

SELECT DISTINCT 'Q13-3' AS question, film.titre
FROM film, projection
WHERE film.id_film = projection.id_film
AND EXTRACT('year' FROM projection.jour) = 2002;

-- Q14 : films réalisés par Lars von Trier
SELECT 'Q14' AS question, film.titre
FROM film, personne
WHERE film.id_realisateur = personne.id_personne
AND personne.nom = 'von Trier' AND personne.prenom = 'Lars';

-- Q15 : films projetés au cinéma le Fontenelle
SELECT DISTINCT 'Q15' AS question, film.titre
FROM film, projection, cinema
WHERE film.id_film = projection.id_film
AND cinema.id_cinema = projection.id_cinema
AND LOWER(cinema.nom) = 'le fontenelle';

-- Q16 : réalisateurs
SELECT DISTINCT 'Q16' AS question, personne.nom, personne.prenom
FROM personne, film
WHERE personne.id_personne = film.id_realisateur;

-- Q17 : acteurs
SELECT DISTINCT 'Q17' AS question, personne.nom, personne.prenom
FROM personne, jouer
WHERE personne.id_personne = jouer.id_acteur;

-- Q18 : acteurs réalisateurs
SELECT DISTINCT 'Q18-1' AS question, acteur.nom, acteur.prenom
FROM
(
SELECT DISTINCT personne.id_personne AS id_realisateur, personne.nom, personne.prenom
FROM personne, film
WHERE personne.id_personne = film.id_realisateur
) AS realisateur,
(
SELECT DISTINCT personne.id_personne AS id_acteur, personne.nom, personne.prenom
FROM personne, jouer
WHERE personne.id_personne = jouer.id_acteur
) AS acteur
WHERE acteur.id_acteur = realisateur.id_realisateur;

SELECT DISTINCT 'Q18-2' AS question, personne.nom, personne.prenom
FROM personne, film
WHERE personne.id_personne = film.id_realisateur
AND EXISTS
(
SELECT DISTINCT jouer.id_acteur
FROM jouer
WHERE personne.id_personne = jouer.id_acteur
);

SELECT DISTINCT 'Q18-3' AS question, personne.nom, personne.prenom
FROM personne, film, jouer
WHERE film.id_realisateur = personne.id_personne AND jouer.id_acteur = personne.id_personne;

-- Q19 : personne ayant joué dans un film projeté au Fontenelle depuis 2000
SELECT DISTINCT 'Q19' AS question, personne.nom, personne.prenom
FROM personne, jouer, projection, cinema
WHERE personne.id_personne = jouer.id_acteur
AND jouer.id_film = projection.id_film
AND cinema.id_cinema = projection.id_cinema
AND LOWER(cinema.nom) = 'le fontenelle' AND EXTRACT('year' FROM projection.jour) >= 2000;

-- Q20 : films dans lesquels Nicole Kidman a joué qui ont été projetés au Fontenelle
SELECT DISTINCT 'Q20' AS question, film.titre
FROM film, personne, jouer, projection, cinema
WHERE personne.id_personne = jouer.id_acteur
AND jouer.id_film = film.id_film
AND projection.id_film = film.id_film
AND cinema.id_cinema = projection.id_cinema
AND personne.prenom = 'Nicole' AND personne.nom = 'Kidman' AND LOWER(cinema.nom) = 'le fontenelle';

-- Q21 : prénoms contenant le caractère 's'
SELECT DISTINCT 'Q21' AS question, prenom FROM personne WHERE prenom ~ 's';

-- Q22 : prénoms contenant les caractères 's' ou 'S'
SELECT DISTINCT 'Q22-1' AS question, prenom FROM personne WHERE prenom ~* 's';
SELECT DISTINCT 'Q22-2' AS question, prenom FROM personne WHERE prenom ~ '[sS]';

-- Q23 : prénoms commençant par 's' ou 'S'
SELECT DISTINCT 'Q23' AS question, prenom FROM personne WHERE prenom ~* '^s';

-- Q24 : prénoms finissant par 's' ou 'S'
SELECT DISTINCT 'Q24' AS question, prenom FROM personne WHERE prenom ~* 's$';

-- Q25 : prénoms contenant 'e' ou 'E', mais ne commençant, et ne se terMINant pas par 'e', 'E'
SELECT DISTINCT 'Q25-e' AS question, prenom FROM personne WHERE prenom ~* '^[^e].*e.*[^e]$';
SELECT DISTINCT 'Q25-s' AS question, prenom FROM personne WHERE prenom ~* '^[^s].*s.*[^s]$';

-- Q26 : prénoms ne contenant pas les caractères 'e' et 'E'
SELECT DISTINCT 'Q26-1' AS question, prenom FROM personne WHERE prenom !~* 'e';
SELECT DISTINCT 'Q26-2' AS question, prenom FROM personne WHERE prenom ~* '^[^e]*$';

-- Q27 : prénoms contenant 'a' puis 'l' ou 'l' puis 'a' (sans tenir compte de la casse)
SELECT DISTINCT 'Q27' AS question, prenom FROM personne WHERE prenom ~* 'a.*l|l.*a';

-- Q28 : prénoms contenant 'an' ou 'on' (sans tenir compte de la casse)
SELECT DISTINCT 'Q28-1' AS question, prenom FROM personne WHERE prenom ~* '[ao]n';
SELECT DISTINCT 'Q28-2' AS question, prenom FROM personne WHERE prenom ~* 'an|on';
SELECT DISTINCT 'Q28-3' AS question, prenom FROM personne WHERE prenom ~* 'an' OR prenom ~* 'on';

-- Q29 : prénoms contenant 3 'e' (sans tenir compte de la casse)
SELECT DISTINCT 'Q29' AS question, titre FROM film WHERE titre ~ 'e.*e.*e';




Tp8:



-- Q1 : interprétations triées par personne
SELECT 'Q1' AS question, personne.nom, personne.prenom, film.titre, jouer.role
FROM (personne JOIN jouer ON jouer.id_acteur = personne.id_personne) NATURAL JOIN film
ORDER BY nom, prenom;

-- Q2 : nombre d'interprétations par acteur
SELECT 'Q2' AS question, personne.nom, personne.prenom, COUNT(jouer.id_film) AS nb_role
FROM personne JOIN jouer ON jouer.id_acteur = personne.id_personne
GROUP BY personne.id_personne, personne.nom, personne.prenom
ORDER BY nom, prenom;

-- Q3 : nombre d'interprétations + premier et dernier film par acteur
SELECT 'Q3' AS question, personne.nom, personne.prenom, COUNT(jouer.id_film) AS nb_role, MIN(film.annee) AS premier, MAX(film.annee) AS dernier
FROM (personne JOIN jouer ON jouer.id_acteur = personne.id_personne) JOIN film USING(id_film)
GROUP BY personne.id_personne, personne.nom, personne.prenom
ORDER BY nom, prenom;

-- Q4 : nombre d'interprétations + premier et dernier film par acteur ayant joué au moins 2 fois
SELECT 'Q4' AS question, personne.nom, personne.prenom, COUNT(jouer.id_film) AS nb_role, MIN(film.annee) AS premier, MAX(film.annee) AS dernier
FROM (personne JOIN jouer ON jouer.id_acteur = personne.id_personne) JOIN film USING(id_film)
GROUP BY personne.id_personne, personne.nom, personne.prenom
HAVING COUNT(jouer.role) >= 2
ORDER BY nom, prenom;

-- Q5 : acteurs dramatiques & nombre d'interprétations dramatiques
SELECT 'Q5' AS question, personne.nom, personne.prenom, COUNT(jouer.id_film) AS nb_drame
FROM (personne JOIN jouer ON jouer.id_acteur = personne.id_personne) JOIN film USING(id_film)
WHERE jouer.id_acteur = personne.id_personne AND jouer.id_film = film.id_film AND LOWER(film.genre) = 'drame'
GROUP BY personne.id_personne, personne.nom, personne.prenom
ORDER BY nom, prenom;

-- Q6 : acteurs dramatiques & nombre d'interprétations
SELECT 'Q6-1' AS question, personne.nom, personne.prenom, COUNT(jouer.id_film) AS nb_role
FROM (personne JOIN jouer ON jouer.id_acteur = personne.id_personne) JOIN film USING(id_film)
WHERE jouer.id_acteur IN
(
SELECT id_acteur
FROM jouer NATURAL JOIN film
WHERE LOWER(film.genre) = 'drame'
)
GROUP BY personne.id_personne, personne.nom, personne.prenom
ORDER BY personne.nom, personne.prenom;

SELECT 'Q6-2' AS question, personne.nom, personne.prenom, COUNT(jouer.role) AS nb_role
FROM (personne JOIN jouer ON jouer.id_acteur = personne.id_personne) JOIN film USING(id_film)
WHERE EXISTS
(
SELECT * FROM jouer NATURAL JOIN film
WHERE LOWER(film.genre) = 'drame' AND jouer.id_acteur = personne.id_personne
)
GROUP BY personne.id_personne, personne.nom, personne.prenom
ORDER BY personne.nom, personne.prenom;

SELECT DISTINCT 'Q6-3' AS question, personne.nom, personne.prenom, nb_role
FROM (personne JOIN jouer ON jouer.id_acteur = personne.id_personne) JOIN film USING(id_film) JOIN
(
SELECT id_acteur, COUNT(id_film) AS nb_role
FROM jouer
GROUP BY id_acteur
) AS role USING(id_acteur)
WHERE LOWER(film.genre) = 'drame';

-- Q7 : acteurs réalisateurs
SELECT DISTINCT 'Q7' AS question, personne.id_personne, personne.nom, personne.prenom
FROM personne JOIN film ON personne.id_personne = film.id_realisateur
INTERSECT
SELECT DISTINCT 'Q7' AS question, personne.id_personne, personne.nom, personne.prenom
FROM personne JOIN jouer ON personne.id_personne = jouer.id_acteur;

-- Q8 : réalisateurs de films de drames et de films d'épouvante
SELECT DISTINCT 'Q8' AS question, personne.id_personne, personne.nom, personne.prenom
FROM personne JOIN film ON personne.id_personne = film.id_realisateur
WHERE LOWER(film.genre) = 'drame'
INTERSECT
SELECT DISTINCT 'Q8' AS question, personne.id_personne, personne.nom, personne.prenom
FROM personne JOIN film ON personne.id_personne = film.id_realisateur
WHERE LOWER(film.genre) = 'epouvante';

-- Q9 : acteurs non dramatiques
SELECT DISTINCT 'Q9-1' AS question, personne.id_personne, personne.nom, personne.prenom
FROM personne JOIN jouer ON jouer.id_acteur = personne.id_personne
EXCEPT
SELECT DISTINCT 'Q9-1' AS question, personne.id_personne, personne.nom, personne.prenom
FROM personne JOIN jouer ON jouer.id_acteur = personne.id_personne NATURAL JOIN film
WHERE LOWER(film.genre) = 'drame';

SELECT DISTINCT 'Q9-2' AS question, personne.id_personne, personne.nom, personne.prenom
FROM personne JOIN jouer ON jouer.id_acteur = personne.id_personne
WHERE jouer.id_acteur NOT IN
(
SELECT DISTINCT jouer.id_acteur
FROM jouer NATURAL JOIN film
WHERE LOWER(film.genre) = 'drame'
);

-- Q10 : cinémas ayant projeté tous les films (division)
-- => on cherche les cinemas t.q. aucun film n'a pas été joué dans ce cinema
SELECT 'Q10-1' AS question, cinema.nom
FROM cinema
WHERE NOT EXISTS
(
SELECT id_film -- tous les films
FROM film
WHERE id_film NOT IN
(
SELECT id_film -- tous les films joués dans le cinéma d'identifiant cinema.id_cinema
FROM projection
WHERE projection.id_cinema = cinema.id_cinema
)
);

SELECT DISTINCT 'Q10-2' AS question, cinema.nom
FROM cinema NATURAL JOIN projection
GROUP BY cinema.id_cinema, cinema.nom
HAVING COUNT(DISTINCT projection.id_film) = (SELECT COUNT(film.id_film) FROM film);

-- Q11 : acteurs vus dans tous les cinémas (division)
-- => on cherche les acteurs t.q. aucun cinema n'a pas projeté un film dans lequel joue l'acteur
SELECT DISTINCT 'Q11-1' AS question, personne.nom, personne.prenom
FROM personne
WHERE NOT EXISTS
(
SELECT c1.id_cinema -- tous les cinemas
FROM cinema c1
WHERE c1.id_cinema NOT IN
(
SELECT c2.id_cinema -- tous les cinémas ayant passé un film dans lequel l'acteur a joué
FROM cinema c2 NATURAL JOIN projection NATURAL JOIN film NATURAL JOIN jouer
WHERE jouer.id_acteur = personne.id_personne
)
);

SELECT DISTINCT 'Q11-2' AS question, personne.id_personne, personne.nom, personne.prenom
FROM personne JOIN jouer ON personne.id_personne = jouer.id_acteur NATURAL JOIN projection
GROUP BY personne.id_personne, personne.nom, personne.prenom
HAVING COUNT(DISTINCT projection.id_cinema) = (SELECT COUNT(*) FROM cinema);

-- Q12 : films par réalisateur
SELECT 'Q12' AS question, personne.id_personne, personne.nom, personne.prenom, COUNT(film.id_realisateur) AS nb_film
FROM personne JOIN film ON (personne.id_personne = film.id_realisateur)
GROUP BY personne.id_personne, personne.nom, personne.prenom;

-- Q13 : plus grand nombre de films réalisés par un réalisateur
-- => /!\ : la sous-requête de la clause FROM doit avoir un alias
-- (et ce même si on n'utilise pas explicitement cet alias, ni dans la clause SELECT, ni dans la clause WHERE)
SELECT 'Q13-1' AS question, MAX(nb_film) AS plus_grand_nombre_film_realise FROM
(
SELECT COUNT(id_film) AS nb_film
FROM film
GROUP BY id_realisateur
) AS nb_film_par_real;

SELECT DISTINCT 'Q13-2' AS question, COUNT(film.id_film) AS max_nb_film
FROM film
GROUP BY film.id_realisateur
HAVING COUNT(id_film) >= ALL
(
SELECT COUNT(film.id_film)
FROM film
GROUP BY film.id_realisateur
);

-- Q14 : réalisateur(s) ayant réalisé le plus de film
SELECT 'Q14-1' AS question, personne.nom, personne.prenom, COUNT(film.id_film) AS nb_film
FROM personne JOIN film ON (personne.id_personne = film.id_realisateur)
GROUP BY personne.id_personne, personne.nom, personne.prenom
HAVING COUNT(film.id_film) >= ALL
(
SELECT COUNT(id_film)
FROM film
GROUP BY id_realisateur
);

SELECT 'Q14-2' AS question, personne.nom, personne.prenom, COUNT(film.id_film)
FROM personne JOIN film ON (personne.id_personne = film.id_realisateur)
GROUP BY personne.id_personne, personne.nom, personne.prenom
HAVING COUNT(film.id_film) =
(
SELECT MAX(nb_film)
FROM
(
SELECT COUNT(id_film) AS nb_film
FROM film
GROUP BY id_realisateur
) AS film_par_real
);

SELECT 'Q14-3' AS question, personne.nom, personne.prenom, real_max.nb_film
FROM personne JOIN
(
SELECT film.id_realisateur, COUNT(film.id_film) AS nb_film
FROM film
GROUP BY film.id_realisateur
HAVING COUNT(id_film) >= ALL
(
SELECT COUNT(film.id_film)
FROM film
GROUP BY film.id_realisateur
)
) AS real_max ON (real_max.id_realisateur = personne.id_personne);

-- Q15 : réalisateurs ayant réalisé au moins un film de même genre qu'un film réalisé par David Cronenberg, et le nombre de films qu'ils ont réalisés
SELECT 'Q15' AS question, p1.id_personne, p1.nom, p1.prenom, COUNT(f1.id_film) AS nb_film
FROM personne p1 JOIN film f1 ON (p1.id_personne = f1.id_realisateur)
WHERE EXISTS
(
SELECT DISTINCT genre
FROM film
WHERE film.id_realisateur = f1.id_realisateur
AND genre= ANY
(
SELECT DISTINCT genre
FROM film JOIN personne ON film.id_realisateur = personne.id_personne
WHERE LOWER(personne.prenom) = 'david' AND LOWER(personne.nom) = 'cronenberg'
)
)
GROUP BY p1.id_personne, p1.nom, p1.prenom;

-- Q16 : nombre de têtes d'affiche et réalisateur de chacun des films
SELECT 'Q16' AS question, film.titre, personne.nom, personne.prenom, COUNT(DISTINCT jouer.id_acteur) AS nb_tete_affiche
FROM film JOIN personne ON film.id_realisateur = personne.id_personne NATURAL JOIN jouer
GROUP BY film.id_film, film.titre, personne.nom, personne.prenom;

-- Q17 : prix moyen des films réalisés par réalisateur
SELECT 'Q17' AS question, realisation.nom, realisation.prenom, AVG(1000000 + 200000*realisation.nb_tete_affiche)
FROM
(
SELECT film.id_realisateur, personne.nom, personne.prenom, COUNT(jouer.id_acteur) AS nb_tete_affiche
FROM film JOIN personne ON film.id_realisateur = personne.id_personne NATURAL JOIN jouer
GROUP BY film.id_realisateur, film.id_film, personne.nom, personne.prenom
) AS realisation
GROUP BY realisation.id_realisateur, realisation.nom, realisation.prenom;

-- Q18 : acteurs ayant joué dans tous les Lars von Trier (division)
SELECT 'Q18' AS question, pA.nom, pA.prenom
FROM personne pA
JOIN jouer ON pA.id_personne = jouer.id_acteur
JOIN film USING (id_film)
JOIN personne pR ON pR.id_personne = film.id_realisateur
WHERE pR.nom = 'von Trier' AND pR.prenom = 'Lars'
GROUP BY pA.id_personne, pA.nom, pA.prenom
HAVING COUNT(jouer.id_film) =
(
SELECT COUNT(film.id_film)
FROM film JOIN personne ON film.id_realisateur = personne.id_personne
WHERE personne.nom = 'von Trier' AND personne.prenom = 'Lars'
);
ayoub
ayoub
Membre
Membre

Messages : 46
Date d'inscription : 04/12/2010

Revenir en haut Aller en bas

Correction par Sophie Toulouse Empty Re: Correction par Sophie Toulouse

Message par Invité Dim 12 Déc - 18:56

Qu'est ce qu'elle veut dire quand elle met ""Q" AS question" à chaque fois dans ses requêtes?

Invité
Invité


Revenir en haut Aller en bas

Correction par Sophie Toulouse Empty Re: Correction par Sophie Toulouse

Message par ayoub Dim 12 Déc - 19:16

Ba je prend le premiere exemple
SELECT 'Q1' AS question, personne.nom, personne.prenom, film.titre, jouer.role
FROM (personne JOIN jouer ON jouer.id_acteur = personne.id_personne) NATURAL JOIN film
ORDER BY nom, prenom;

SELECT 'Q1' AS question va me mettre dans le resultat de ma requete une colonne nommé question dans laquel pour chaque valeur j'aurai q1, c'est juste par souci de lisibilité
ayoub
ayoub
Membre
Membre

Messages : 46
Date d'inscription : 04/12/2010

Revenir en haut Aller en bas

Correction par Sophie Toulouse Empty Re: Correction par Sophie Toulouse

Message par Invité Dim 12 Déc - 19:47

Je ne suis pas sur d'avoir compris ce que tu as dit mais je crois que tu as raison.

Voila la réponse de la prof à ma question :

Bonjour Maxime,

"C'est juste une valeur constante pour indiquer la question dont il s'agit (ça permet de
s'y retrouver quand on exécute le script). Mais vous n'avez pas à mettre cette colonne
dans vos réponses."


Invité
Invité


Revenir en haut Aller en bas

Correction par Sophie Toulouse Empty Re: Correction par Sophie Toulouse

Message par ayoub Dim 12 Déc - 19:52

oue voila c'est par souci de lisibilité comme ça a chaque fois qu'on execute une requete on sait c'est la réponse a quel question.
ayoub
ayoub
Membre
Membre

Messages : 46
Date d'inscription : 04/12/2010

Revenir en haut Aller en bas

Correction par Sophie Toulouse Empty Re: Correction par Sophie Toulouse

Message par Roxarmy Dim 12 Déc - 23:23

Ha mince alors :-/ ya plus de sélection là :p
Sinon, sympa de sa part, zentil comme tout !

Roxarmy
Nouveau
Nouveau

Messages : 2
Date d'inscription : 12/12/2010

Revenir en haut Aller en bas

Correction par Sophie Toulouse Empty Re: Correction par Sophie Toulouse

Message par Roxarmy Lun 13 Déc - 19:59

Bon, Ayoub, si tu passes pas là, ou même qqun d'autre, qui peut expliquer la division ? (Dernier TP, qst 10) =)

Roxarmy
Nouveau
Nouveau

Messages : 2
Date d'inscription : 12/12/2010

Revenir en haut Aller en bas

Correction par Sophie Toulouse Empty Re: Correction par Sophie Toulouse

Message par ayoub Mar 14 Déc - 0:32

je te répondrai demain si tu le veux bien parce que par mail c'est pas trés possible de l'expliqué c'est le point le plus compliqué du cour
ayoub
ayoub
Membre
Membre

Messages : 46
Date d'inscription : 04/12/2010

Revenir en haut Aller en bas

Correction par Sophie Toulouse Empty Re: Correction par Sophie Toulouse

Message par Contenu sponsorisé


Contenu sponsorisé


Revenir en haut Aller en bas

Revenir en haut

- Sujets similaires

 
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum