Précédent   Forum des professionnels en informatique > Bases de données > Langage SQL
Langage SQL Forum d'entraide sur le langage SQL et sur les questions liées à la conception de schéma (DDL). Cours SQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 17/01/2012, 21h41   #1
Candidat au titre de Membre du Club
 
Inscription : décembre 2008
Messages : 72
Détails du profil
Informations forums :
Inscription : décembre 2008
Messages : 72
Points : 10
Points : 10
Par défaut Question à propos de deux requêtes

bonjour;
je suis débutant en sql et j'ai un code que la prof a ecrit, le schéma de relation est (Film(titre,MeS,Acteur)), le but est de trouver les films avec leur MeS et leurs acteurs dans lesquels joue M-F Pisier(acteur) le code sql que la prof a écrit est :
Code :
1
2
3
SELECT F2.Titre, F2.MeS, F2.Acteur
FROM FILM AS F1, FILM AS F2
WHERE F1.Titre=F2.Titre AND F1.Acteur='M-F.Pisier'
mais je pense qu'on peut écrire plus facilement:
Code :
1
2
3
SELECT titre,MeS
FROM Film
WHERE Acteur='' M-F.Pisier"
je voudrais savoir pourquoi elle écrit de la première façon et non de la deuxième façon (est qu'il y a une raison).
merci
bensof1 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/01/2012, 22h26   #2
Candidat au titre de Membre du Club
 
Inscription : décembre 2008
Messages : 72
Détails du profil
Informations forums :
Inscription : décembre 2008
Messages : 72
Points : 10
Points : 10
mon deuxième problème c'est que la prof a écrit le code suivant:
Code :
1
2
3
4
 SELECT Acteur AS Personne fromFilm
WHERE Titre="marion"
union SELECT MeS AS Personne FROM FILM
WHERE Titre="Marion"
ici l'objectif est de trouver les personnes ayant participées au tournage du film Marion. ici on a une autre table en plus de la table film qui est programme(non ciné,titre,horaire)
bensof1 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/01/2012, 22h35   #3
Candidat au titre de Membre du Club
 
Inscription : décembre 2008
Messages : 72
Détails du profil
Informations forums :
Inscription : décembre 2008
Messages : 72
Points : 10
Points : 10
j'ai oublier d’écrire mon problème c'est pourquoi elle a renommé acteur en personne et n'a pas utilisé directement l'attribue acteur
merci
bensof1 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/01/2012, 08h37   #4
Membre émérite
 
Homme Olivier Dehorter
Ingenieur de recherche - Ecologue
Inscription : juin 2003
Messages : 700
Détails du profil
Informations personnelles :
Nom : Homme Olivier Dehorter
Localisation : France

Informations professionnelles :
Activité : Ingenieur de recherche - Ecologue

Informations forums :
Inscription : juin 2003
Messages : 700
Points : 844
Points : 844
Je te conseille de lire les tutoriaux réalisés par SQLPro. Ils sont très bien fait, donc tu y trouveras ton bonheur


Mais pense à lire aussi les règles de fonctionnement du forum (Quel SGBD utilises-tu ? ....)

1 -
Code :
1
2
3
SELECT F2.Titre, F2.MeS, F2.Acteur
FROM FILM AS F1, FILM AS F2
WHERE F1.Titre=F2.Titre AND F1.Acteur='M-F.Pisier'
Mais pourquoi, la connaissance dans l'éducation nationale s'est-elle arrêtée au XXeme siècle ? Cette écriture des jointures est totalement obsolète !

Sans description des tables, on ne peut pas dire si ta requête fonctionne (au vu du nom des tables, j'espère que non). La question est-ce que dans la table "Film", le nom des acteurs sont écrits en "clair" ou s'agit-il de la clé créée dans la table "Acteur" ?
Mais fais attention à la syntaxe !
WHERE Acteur='' M-F.Pisier". Tu utilises des ' et des "...


2- Je ne vois qu'une seule table utilisée "Film"
3 - C'est juste pour que le nom de la colonne soit cohérent avec l’objectif; ce n'est pas forcement des "Acteur" mais ce peut-être aussi des "MeS"
dehorter olivier est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 19/01/2012, 15h28   #5
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 11 029
Détails du profil
Informations personnelles :
Nom : Homme Philippe Leménager
Âge : 48
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Ingénieur d'études en informatique
Secteur : Enseignement

Informations forums :
Inscription : août 2006
Messages : 11 029
Points : 18 331
Points : 18 331
Envoyer un message via MSN à CinePhil
Citation:
Film(titre,MeS,Acteur)
Je suppose que "MeS" veut dire "metteur en scène" ?
Cette structure fait qu'il ne peut y avoir qu'un seul acteur par film ou alors il y a une grosse erreur de modélisation et la prof aurait besoin de se recycler sur la modélisation des données en plus de se recycler sur le SQL !

Citation:
le but est de trouver les films avec leur MeS et leurs acteurs dans lesquels joue M-F Pisier(acteur)
Si je comprends bien le besoin, il faut trouver tous les acteurs présents au côté de Marie-France Pisier dans les films où elle joue.

C'est pour ça qu'il faut une auto-jointure. Écrivons juste la requête correctement :
Code :
1
2
3
4
SELECT F2.Titre, F2.MeS, F2.Acteur
FROM FILM AS F1
INNER JOIN FILM AS F2 ON F1.Titre=F2.Titre
WHERE  F1.Acteur = 'M-F.Pisier'
L'instance F1 de la table sert à sélectionner les films où joue Marie-France Pisier et l'instance F2 sert à récupérer ses collègues acteurs dans ses films.

Une meilleure structure de données aurait été celle-ci :
film (flm_id, flm_titre, flm_metteur_en_scene...)
acteur (act_id, act_nom...)
act_jouer_film (ajf_id, ajf_film)
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique.
Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework...
« Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
À la maison comme au bureau, j'utilise Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française !
Linuxiens, comptez-vous !
CinePhil est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 06h32.


 
 
 
 
Partenaires

Hébergement Web