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

MaaboutSofian -
回帖数: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

回复MaaboutSofian

Re: Ouverture du bal au forum BD Bloc4 DIU

AumaireOlivier -
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))
回复MaaboutSofian

Re: Ouverture du bal au forum BD Bloc4 DIU

DupinXavier -
Une question : le INNER JOIN est donc inutile ?
回复DupinXavier

Re: Ouverture du bal au forum BD Bloc4 DIU

MaaboutSofian -
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.
回复MaaboutSofian

Re: Ouverture du bal au forum BD Bloc4 DIU

DupinXavier -
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.
回复DupinXavier

Re: Ouverture du bal au forum BD Bloc4 DIU

MaaboutSofian -
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 ?
回复MaaboutSofian

Re: Ouverture du bal au forum BD Bloc4 DIU

DupinXavier -

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 

回复DupinXavier

Re: Ouverture du bal au forum BD Bloc4 DIU

MaaboutSofian -
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.
回复MaaboutSofian

Re: Ouverture du bal au forum BD Bloc4 DIU

DupinXavier -

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


回复MaaboutSofian

Re: Ouverture du bal au forum BD Bloc4 DIU

DupinXavier -
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 ?
附件 Capture.PNG
回复DupinXavier

Re: Ouverture du bal au forum BD Bloc4 DIU

ZemmariAkka -

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. 


回复DupinXavier

Re: Ouverture du bal au forum BD Bloc4 DIU

MaaboutSofian -
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
回复MaaboutSofian

Re: Ouverture du bal au forum BD Bloc4 DIU

GardetteJean Pierre -

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

附件 BDD1.jpg
回复GardetteJean Pierre

Re: Ouverture du bal au forum BD Bloc4 DIU

MaaboutSofian -
Vous avez dû dupliquer les insertions dans immeuble.
Faites: select * from Immeuble
回复MaaboutSofian

Re: Ouverture du bal au forum BD Bloc4 DIU

GardetteJean Pierre -
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 ?
回复GardetteJean Pierre

Re: Ouverture du bal au forum BD Bloc4 DIU

ZemmariAkka -

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.

回复MaaboutSofian

Re: Ouverture du bal au forum BD Bloc4 DIU

DupinXavier -

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

附件 Capture1.PNG
附件 Capture2.PNG
回复DupinXavier

Re: Ouverture du bal au forum BD Bloc4 DIU

ZemmariAkka -
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.
回复ZemmariAkka

Re: Ouverture du bal au forum BD Bloc4 DIU

DupinXavier -

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é ! 

回复DupinXavier

Re: Ouverture du bal au forum BD Bloc4 DIU

MaaboutSofian -

Vous éviterez donc à demander aux élèves d'écrire cette requête 微笑  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). 

回复DupinXavier

Re: Ouverture du bal au forum BD Bloc4 DIU

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

Vous obtiendrez
------------------------
|Apparts_De_Koudalou|
------------------------
4
回复MaaboutSofian

Re: Ouverture du bal au forum BD Bloc4 DIU

DupinXavier -

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

回复MaaboutSofian

Re: Ouverture du bal au forum BD Bloc4 DIU

BarusseauBenoit -
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?

回复MaaboutSofian

Re: Ouverture du bal au forum BD Bloc4 DIU

RodriguezStephane -

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