Forum pour la partie Bases de données du Bloc 4

Ouverture du bal au forum BD Bloc4 DIU

Ouverture du bal au forum BD Bloc4 DIU

par Sofian Maabout,
Nombre de réponses : 26

Bonjour,

ceci pour annoncer officiellement l'ouverture du forum relatif à l'aspect Bases de Données.

Je comprends que la multiplication des canaux de discussion/échange ne simplifie pas les choses pour vous mais je suis malheureusement allergique à slack quand certains de mes collègues sont très à l'aise avec (je fais peut être partie de la vieille école).  Cependant, j'y vois un avantage dans le sens où les sujets abordés sont différents, du moins, devraient l'être.  

Bon courage à tous et ne pas hésiter à poser vos questions.

S. Maabout

En réponse à Sofian Maabout

Re: Ouverture du bal au forum BD Bloc4 DIU

par Olivier Aumaire,
3d je propose ca (si qqun peut vérifier: Pi profession,superficie(sigma occupant=rachel(personne jointure renommage nomgerant en nom (immeuble) jointure appart jointure occupant))
En réponse à Sofian Maabout

Re: Ouverture du bal au forum BD Bloc4 DIU

par Xavier Dupin,
Une question : le INNER JOIN est donc inutile ?
En réponse à Xavier Dupin

Re: Ouverture du bal au forum BD Bloc4 DIU

par Sofian Maabout,
INNER JOIN complètement inutile. Personnellement, je n'en parle jamais à mes étudiants. Historiquement, ça a été ajouté à la syntaxe SQL pour signifier au système (SGBD) que notre requête utilise une jointure non pas un produit cartésien. Il pourra exploiter cette information pour évaluer plus rapidement la requête. Et là on aborde le sujet de comment le SGBD fait-il pour évaluer "efficacement" les requêtes. Sans donner trop de détails, effectuer un produit cartésien suivi d'une sélection afin de réaliser une jointure est bien plus couteux (en temps d'exécution) que de réaliser une jointure. Les anciens SGBD n'étaient pas assez intelligents pour "deviner" que telle requête a besoin d'une jointure. Il fallait le leur dire explicitement en utilisant INNER JOIN. Actuellement, tous sont capables de "deviner" l'existence de jointure.
En réponse à Sofian Maabout

Re: Ouverture du bal au forum BD Bloc4 DIU

par Xavier Dupin,
Je viens de regarder le programme et les requetes SQL sont : SELECT, FROM, WHERE, JOIN
Cela signifie qu'il faut parler de JOIN car au bac, les élèves risquent d'en avoir.
En réponse à Xavier Dupin

Re: Ouverture du bal au forum BD Bloc4 DIU

par Sofian Maabout,
Je pense, et ce n'est que l'avis de quelqu'un qui n'a pas participé à la conception du programme, qu'il vaut mieux entrainer les élèves à utiliser SQL sans JOIN. Une fois qu'ils ont compris que ... FROM R1, R2 WHERE R1.A=R2.A ... n'est rien d'autre qu'une jointure, on pourra leur introduire la notation ... FROM R1 INNER JOIN R2 ON R1.A=R2.A pour dire que c'est une autre manière d'exprimer la même chose.
Bon courage pour expliquer/justifier l'intérêt de cette deuxième notation. Noter que pour l'algèbre, la justification était la simplification de l'écriture des requêtes et rien d'autre.

PS: Le seul intérêt de ce type de notation c'est quand on veut faire une "jointure externe" [LEFT ou RIGHT] OUTER JOIN. Opération non abordée dans le cours et à ma connaissance hors programme.
PPS: D'ailleurs, dans le programme c'est JOIN ou bien INNER JOIN ?
En réponse à Sofian Maabout

Re: Ouverture du bal au forum BD Bloc4 DIU

par Xavier Dupin,

Merci

Dans le programme c'est JOIN dont il est question. J'avais regardé le bouquin de Terminale NSI qui est sorti et dedans il parlait uniquement de INNER JOIN et je pensais même que c'était la même chose.

Xavier 

En réponse à Xavier Dupin

Re: Ouverture du bal au forum BD Bloc4 DIU

par Sofian Maabout,
Personnellement, je connais INNER JOIN et OUTER JOIN mais JOIN tout court je ne connais pas. Donc écrire dans le programme que JOIN doit être enseigné sans autre précision (INNER et OUTER ou seulement INNER) ce n'est pas suffisament précis.
En réponse à Sofian Maabout

Re: Ouverture du bal au forum BD Bloc4 DIU

par Xavier Dupin,

Dans ce manuel de NSI, ils ne parlent que de INNER JOIN en disant que INNER est facultatif.


En réponse à Sofian Maabout

Re: Ouverture du bal au forum BD Bloc4 DIU

par Xavier Dupin,
Question 2c des exos SQL
Avec cette requete, j'obtiens les professions de Doug et de Ross malgré la demande que NomOccupant='Rachel'
Où est mon oubli ?
Annexe Capture.PNG
En réponse à Xavier Dupin

Re: Ouverture du bal au forum BD Bloc4 DIU

par Akka Zemmari,

Je pense que vous avez juste oublié une jointure entre Personne et Occupant. Du coup, le résultat de votre requête est d'abord un produit cartésien entre la jointure de Immeuble et Personne ET la table Occupant. 


En réponse à Xavier Dupin

Re: Ouverture du bal au forum BD Bloc4 DIU

par Sofian Maabout,
La condition "NomOccupant = 'Rachel' " permet de sélectionner l'enregistrement de Occupant qui correspond à Rachel mais cet enregistrement sera associé à tous les immeubles. Vous avez ajouté une condition pour n'associer chaque immeuble qu'à la personne qui le gère mais vous n'avez pas ajouté de condition qui permet de n'associer à chaque occupant (et préciisément Rachel) à l'immeuble où il/elle habite.
Règle souvent vraie (à moins de vouloir effectuer un produit), si j'ai n tables dans la clause FROM, il y a au moins n-1 conditions de jointure dans la clause WHERE. Ici, on a 3 tables et on ne veut pas les associer n'importe comment:
*/ Chaque immeuble à la personne qui le gère (votre condition)
*/ Chaque Occupant au bon immeuble => Occupant.NomImmeuble = Immeuble.NomImmeuble
En réponse à Sofian Maabout

Re: Ouverture du bal au forum BD Bloc4 DIU

par Jean Pierre Gardette,

Bonjour, Je ne comprends pas pourquoi j'obtiens un doublon avec cette requête..

Annexe BDD1.jpg
En réponse à Jean Pierre Gardette

Re: Ouverture du bal au forum BD Bloc4 DIU

par Sofian Maabout,
Vous avez dû dupliquer les insertions dans immeuble.
Faites: select * from Immeuble
En réponse à Sofian Maabout

Re: Ouverture du bal au forum BD Bloc4 DIU

par Jean Pierre Gardette,
Je voudrais réinjecter le fichier creation_BD_immo mais je n'arrive pas à supprimer la base de donnée dans postgre. Comment procéder ?
En réponse à Jean Pierre Gardette

Re: Ouverture du bal au forum BD Bloc4 DIU

par Akka Zemmari,

Vous pouvez commencer par supprimer les tables :

drop table Immeuble;

drop table Appart;

drop table Personne;

drop table Occupant;

Ensuite, vous relancez le script et ça devrait être bon.

En réponse à Sofian Maabout

Re: Ouverture du bal au forum BD Bloc4 DIU

par Xavier Dupin,

Le compteur Count comptabilise tous les apparts et pas seulement immeuble par immeuble

Annexe Capture1.PNG
Annexe Capture2.PNG
En réponse à Xavier Dupin

Re: Ouverture du bal au forum BD Bloc4 DIU

par Akka Zemmari,
Il vous manque une clause GROUP BY pour avoir le compte immeuble par immeuble.
Donc la bonne requête est :
SELECT NomImmeuble, COUNT(NoAppart)
FROM Appart
GROUP BY NomImmeuble.
En réponse à Akka Zemmari

Re: Ouverture du bal au forum BD Bloc4 DIU

par Xavier Dupin,

J'ai fini par comprendre que c'était avec GROUP BY mais comme ce n'est pas au programme de la Terminale NSI, j'essayais de le faire sans. Mais je n'y suis pas arrivé ! 

En réponse à Xavier Dupin

Re: Ouverture du bal au forum BD Bloc4 DIU

par Sofian Maabout,

Vous éviterez donc à demander aux élèves d'écrire cette requête sourire  Mon impression est que si l'on prend la partie SQL du programme, c'est finalement un sous-ensemble de l'algèbre relationnelle (ex: pas d'union pas de différence). 

En réponse à Xavier Dupin

Re: Ouverture du bal au forum BD Bloc4 DIU

par Sofian Maabout,
Vous pourriez par contre faire:
SELECT COUNT(NoAppart) AS NB_Apparts_De_Koudalou
FROM Appart
WHERE NomImmeuble = 'Koudalou'

Vous obtiendrez
------------------------
|Apparts_De_Koudalou|
------------------------
4
En réponse à Sofian Maabout

Re: Ouverture du bal au forum BD Bloc4 DIU

par Xavier Dupin,

Merci

C'est ce que j'avais réussi à faire mais c'est quand je remplaçais NomImmeuble='Koudalou' par NomImmeuble IN (SELECT NomImmeuble FROM Immeuble), c'était là que le comptage s'effectuait sur tout.

Il est vrai que le programme ne parle pas d'EXCEPT ou d'UNION. Et donc ces exemples là seront aussi à mettre de côté (ou à faire avec les élèves qui avancent vite).

Merci bcp

En réponse à Sofian Maabout

Re: Ouverture du bal au forum BD Bloc4 DIU

par Benoit Barusseau,
Bonjour, pour la question g.
Cela fonctionne avec SELECT NomImmeuble
FROM Immeuble
EXCEPT(
SELECT NomImmeuble
FROM (
SELECT DISTINCT Noappart, NomImmeuble
FROM Appart

EXCEPT

SELECT DISTINCT Noappart, NomImmeuble
FROM Occupant)
As T
)

Mais 1) n'y aurait-il pas une syntaxe plus simple?
2) quelles sont les regles de syntaxe , indentation etc?

En réponse à Sofian Maabout

Re: Ouverture du bal au forum BD Bloc4 DIU

par Stephane Rodriguez,

Avez-vous une petite base de donnée qui permettent de tester les commandes SQL de la vidéos?
Merci.