Question à propos des requêtes en SQL

Cette formation présente les fondements des bases de données relationnelles et enseigne l’écriture de requêtes SQL.

Modérateurs : Équipe sillages.info, Benjamin NGUYEN

COLELLA
Messages : 9
Enregistré le : jeu. 9 août 2018 07:07

Question à propos des requêtes en SQL

Messagepar COLELLA » mer. 15 août 2018 12:53

Bonjour, j'ai des questions à propos des requêtes SQL :

1 - Concernant un exercice sur des requêtes en SQL, dont l'énoncé est le suivant :

"Donnez, en SQL, algèbre relationnelle et calcul relationnel une requête pour trouver les noms des salles projetant un film de Hitchcock."

1 SELECT f.titre AS titre, s.salle AS cinema
2 FROM film f, seance s
3 WHERE f.idfilm = s.idfilm
4 AND f.directeur = 'Hitchcock'
5 AND s.horaire IS NOT NULL;

a - Je ne comprends pas en quoi la ligne 3 est utile, ni ce qu'elle signifie vraiment.

b - De plus, dans le calcul, on nous indique :

{ titre, salle ׀ ∃(idfilm, année, horaire), FILM (idfilm, titre, "Hitchcok", année)^SEANCE(idfilm, salle, horaire) }.

Pourquoi n'est-ce pas : "{ titre, salle ׀ ∃(idfilm, année, horaire), FILM (idfilm, idacteur, titre, "Hitchcok", année)^SEANCE(idfilm, salle, horaire) }, comme dans l'exemple "Titre d'un film avec la liste des identifiants de ses acteurs" ?

2 - Concernant cette fois les requêtes agrégats :

Exemple nommé : "Année de production la plus ancienne pour chaque acteur ayant joué dans au moins 3 films de Hitchcock.":

1 SELECT idacteur, MIN(annee)AS annee_debut
2 FROM film f NATURAL JOIN jouedans jd
3 WHERE f.directeur='Hitchcock'
4 GROUP BY idacteur
5 HAVING COUNT(*)> 2;

Ecriture algébrique :

π idacteur,annee_debut (σ COUNT (*) > 2 ρ MIN (année) → année_début)(idacteurƔ MIN(année), COUNT(*)( σDirecteur="Hitchcock" FILM ⋈ JOUEDANS))))

a - Ligne 1, pourquoi n'avons-nous pas SELECT idacteur AS id, MIN(annee)AS annee_debut, comme dans les exemples précédents ?

b - Je n'ai pas du tout compris l'écriture algébrique, pouvez-vous m'expliquer s'il vous plaît ?

Je vous remercie par avance et reste à votre écoute,

Salutations respectueuses,

Anna Colella

Nathalie VAN DE WIELE
Administrateur du site
Messages : 38
Enregistré le : ven. 9 juin 2017 09:24

Re: Question à propos des requêtes en SQL

Messagepar Nathalie VAN DE WIELE » mer. 15 août 2018 13:47

Merci de votre activité sur le forum, Anna. Nous invitons les apprenants à vous répondre directement s'il s'en trouve en ligne en cette période de vacances, période idéale pour avancer comme vous dans ce FLOT recommandé en prérequis du MOOC Fondamentaux pour le Big Data. Bonne continuation pour la suite de votre formation !
Nathalie, fondatrice de l'initiative sillages.info

Astrid Allemandou
Messages : 12
Enregistré le : sam. 22 déc. 2018 15:21

Re: Question à propos des requêtes en SQL

Messagepar Astrid Allemandou » dim. 30 déc. 2018 19:37

1-

a- Cette ligne sert à dire "on prend les n-uplets qui concernent le même film". Je pense que si cette ligne n'était pas là, le système sélectionnerait des n-uplets comme :
"1,Batman,Burton,1989,Rex,1,13h"
ET
"1,Batman,Burton,1989,Rocamadour,2,15h",
ce qui serait bien embêtant parce qu'il est faux de dire que Batman passe au Rocamadour à 15h (c'est le film 2 qui y passe).

b- Dans l'exemple "Titre d'un film avec la liste des identifiants de ses acteurs", c'est dans la table JOUEDANS qu'il y a idacteur. Dans la table Film, on a bien titre en 2ème.

2-

a- Quand il n'y a pas de fonction comme Min, le AS sert juste à renommer, pour avoir une belle table réponse. Ici, "idacteur" est bien comme titre de la colonne. On n'a pas fait le même choix que dans "Nbre total de films dans lequel chaque acteur a joué".

b- N'hésite pas à recopier l'expression et à regrouper les parenthèses deux par deux, pour voir où on commence. Ici :
- d'abord, on regroupe FILM et JOUEDANS (pour avoir tous les films et leurs acteurs)
- on sélectionne ceux que Hitchcock a dirigés
- grâce à l'opérateur d'agrégation, on ajoute deux attribut COUNT(*) et MIN(annee) qui vont respectivement, sur la liste des différents acteurs, donner la longueur de cette liste et le minimum de l'année pour chaque acteur
- on renomme MIN(annee) en annee_debut
- on ne prend que les n-uplets où COUNT(*) (le nombre de films de chaque acteur) est supérieur à 2
- et enfin, on prend les colonnes annee_debut et idacteur pour la table réponse.

En espérant avoir aidé !

Alban Crusson
Messages : 2
Enregistré le : lun. 27 mai 2019 16:01

Re: Question à propos des requêtes en SQL

Messagepar Alban Crusson » mer. 29 mai 2019 09:55

Bonjour,

J'ai également des questions concernant l'exercice "... trouver les noms des salles projetant un film de Hitchcock".

- Dans la requête SQL on projette uniquement "salle" et pour l'écriture algébrique et le calcul relationnel on projette "titre" et "salle".
Puisque qu'il est demandé uniquement le nom des salles, est ce que "titre" est nécessaire dans ces 2 formulations ?

- Lors de la création des tables, nous avons ajouté "horaire TIME(HH:MM) NOT NULL".
Pourquoi doit-on ajouter "AND s.horaire IS NOT NULL" dans la formulation SQL ?

Je vous remercie par avance pour vos réponses.
Cordialement,
AC

Astrid Allemandou
Messages : 12
Enregistré le : sam. 22 déc. 2018 15:21

Re: Question à propos des requêtes en SQL

Messagepar Astrid Allemandou » jeu. 13 juin 2019 17:58

1. Titre et salle sont bien donnés aussi dans la requête SQL. Le titre n'est pas explicitement demandé, mais il est évident à donner. Imaginez que l'on vous demande les salles dans lesquelles passent les films dans votre cinéma : si vous ne donnez qu'une liste de salles, on va vous regarder bizarrement ! Parce que le spectateur ne sait pas quel film passe dans quelle salle.

2. Je pense qu'il n'y en a effectivement pas besoin. Mais si on a un doute, ou qu'on risque de créer la table sans les mêmes paramètres, c'est plus sûr !


Retourner vers « Bases de données relationnelles »

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 1 invité