TP papier et machine

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

TP papier et machine

Messagepar COLELLA » lun. 20 août 2018 13:43

Bonjour,

J'ai plusieurs questions concernant le "TP papier".

Exercices simples :
Question 2 :


"Donnez le prénom de tous les étudiants dont le nom est "Martin"."

Réponse :

SELECT PRENOM Pourquoi n'est-ce pas E.PRENOM ? comme dans les exemples précédents ou la question 3
FROM ETUDIANT E
WHERE E.NOM = "Martin"

Exercices avec jointures :

Question 3 : Cours sans inscrits

"Donnez les CODE_COURS des cours n'ayant aucun inscrit. Indice : En SQL, on va chercher à trouver les NC des cours qui ont au moins un inscrit, et chercher les cours qui ne sont pas dans cet ensemble."

SELECT CODE_COURS

FROM COURS C

WHERE C.NC NOT IN

(

SELECT I.NC

FROM INSCRIT I

)

Je n'ai pas compris la procédure de la négation NOT IN, ni la boucle qui suit. Que fait la boucle décrite entre parenthèses exactement ? Je ne comprends pas le sens de cette syntaxe.

Question 4 : Noms des étudiants inscrits en INF101 en 2012 ou 2013

Noms des étudiants inscrits en INFO101 (INFO101 représente le CODE_COURS)en 2012 ou 2013.

SELECT NOM Comme précédemment, pourquoi n'est-ce pas E.NOM ? Quand doit-on l'écrire ?

FROM ETUDIANTS E, COURS C, INSCRIT I

WHERE

E.NE = I.NE

AND I.NC = C.NC

AND C.CODE_COURS = 'INFO101'

AND (I.ANNEE = 2012 OR I.ANNEE = 2013)

Requêtes agrégats

Exercice 2 : ECTS d'un étudiant


"Donnez le nombre d'ECTS obtenus par chaque étudiant, référencé par son (NE, NOM, PRENOM) dans une colonne appelée CREDITS. Rappel : les ECTS d'un cours ne sont obtenus que si la note de l'étudiant est supérieure ou égale à 10 pour le cours. Vous ne donnerez qu'une solution en SQL. Indice : La condition pour prendre en compte une note dépend de la note : il faudra donc faire apparaître cette condition dans le WHERE et non dans un HAVING, malgré le fait qu'on cherche à regrouper les notes d'un étudiant."

SELECT E.NE, E.NOM, E.PRENOM, SUM(C.ECTS) As CREDITS

FROM ETUDIANT E, COURS C, RESULTAT R

WHERE E.NE = R.NE

AND R.NC= C.NC

AND R.NOTE >= 10

GROUP BY E.NE, E.NOM, E.PRENOM

Aurait-on pû mettre "COUNT (DISTINCT(C.ECTS))? comme dans l'exemple du cours "Nombre total de films dans lequel chaque acteur a joué" ?



Exercice 3 : Un agrégat assez compliqué ...

"Calculer le nombre d'étudiants, ainsi que l'âge de l'étudiant le plus vieux reçu par module, pour les modules du département "Informatique" dont la moyenne globale est supérieure à 12. Ne donnez la requête qu'en SQL."


SELECT C.NC, COUNT(DISTINCT E.NE), MAX(E.AGE)

FROM ETUDIANT E, RESULTAT R, COURS C

WHERE E.NE = R.NE

AND R.NC = C.NC

AND C.DPT = "Informatique"

GROUP BY C.NC

HAVING AVG(R.NOTE) > 12


Pourquoi dans la ligne FROM n'ajoute-t-on pas la table INSCRIT ? En effet, il faut que les étudiants soient inscrits dans le module informatique pour avoir une note.


"TP machine"

J'ai installé intégralement mon environnement de travail. Néanmoins, lorsque j'enter une requête, je reçois un message d'erreur (exemple avec la requête 1). Comment faire ?

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

Salutations respectueuses,

Anna C.

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

Re: TP papier et machine

Messagepar Astrid Allemandou » mer. 2 janv. 2019 18:37

Exercices simples :
Question 2 :
Pourquoi n'est-ce pas E.PRENOM ? : cet attribut n'est présent qu'une seule fois donc il n'y a pas confusion. On aurait pu écrire E.PRENOM.

Exercices avec jointures :
Question 3 :
Dans les parenthèses, on a écrit la liste des NC qu'il y a dans la table Inscrit. C'est-à-dire la liste des cours où il y a au moins un inscrit.
Avec "WHERE C.NC NOT IN", on ne garde que les C.NC qui ne sont pas dans cette liste. C'est-à-dire les cours où il n'y a pas au moins un inscrit. C'est-à-dire les cours où il n'y aucun inscrit.

Requêtes agrégats :
Question 2 :
Non on n'aurait pas pu mettre COUNT, car cela aurait donné un nombre d'étudiants (plus précisément, le nombre de cours ayant des ECTS différents, bref ce n'est pas très intéressant).
COUNT compte un nombre de lignes, il ne calcule pas les nombres dans les données.

Question 3 :
La table Résultat permet déjà de faire le lien entre les attributs NE et NC. Plus besoin de la table Inscrit.


Pour ta question sur le TP machine, écris-nous le message d'erreur que tu obtiens ?

Cécile POISVERT
Messages : 3
Enregistré le : lun. 4 nov. 2019 12:19

Re: TP papier et machine

Messagepar Cécile POISVERT » jeu. 7 nov. 2019 13:05

Bonjour à tous,

je me permets de vous laisser un message ici pour vous rapporter deux problèmes que j'ai eu lors du passage sur la machine. Je suis assez novice dans cet univers donc j'espère que ce ne sont pas des erreurs que j'ai faite qui ont provoqué ces pb...en tout cas je me dis que ça peut servir à quelqu'un d'autre ;)

1) J'ai eu du mal à utiliser Easy PHP, les serveurs ne voulaient pas démarrer. J'avais deux erreurs du type "Undefined offset 3 in ' *le chemin dacces*\eds-dashbord\index.php on line "*un numero*""

Les solutions proposées ici
https://github.com/easyphp/easyphp-devserver/issues/112
n'ont pas suffit il a fallu que je fasse aussi le 4. de la page suivante
http://www.chuonthis.com/tips/2012/05/2 ... -counters/

2) Le chargement des données pour le TP machine a rencontré un pb pour exécuter le fichier bd-banque-simple-random-data-client.sql. Le fichier n'était lu qu'à partir du troisième caractère de la première ligne.
J'ai décalé de deux caractères la première ligne et cela a suffit a permettre au fichier de se charger correctement.

Merci pour votre travail, c'est une sacré chance de pouvoir suivre ce module!
Cécile


Retourner vers « Bases de données relationnelles »

Qui est en ligne

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