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

Napisane przez: Sofian Maabout ( )
Liczba odpowiedzi: 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

W odpowiedzi na Sofian Maabout

Re: Ouverture du bal au forum BD Bloc4 DIU

Napisane przez: 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))
W odpowiedzi na Sofian Maabout

Re: Ouverture du bal au forum BD Bloc4 DIU

Napisane przez: Xavier Dupin ( )
Une question : le INNER JOIN est donc inutile ?
W odpowiedzi na Xavier Dupin

Re: Ouverture du bal au forum BD Bloc4 DIU

Napisane przez: 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.
W odpowiedzi na Sofian Maabout

Re: Ouverture du bal au forum BD Bloc4 DIU

Napisane przez: 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.
W odpowiedzi na Xavier Dupin

Re: Ouverture du bal au forum BD Bloc4 DIU

Napisane przez: 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 ?
W odpowiedzi na Sofian Maabout

Re: Ouverture du bal au forum BD Bloc4 DIU

Napisane przez: 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 

W odpowiedzi na Xavier Dupin

Re: Ouverture du bal au forum BD Bloc4 DIU

Napisane przez: 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.
W odpowiedzi na Sofian Maabout

Re: Ouverture du bal au forum BD Bloc4 DIU

Napisane przez: 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 ?
Załącznik ($a)
W odpowiedzi na Xavier Dupin

Re: Ouverture du bal au forum BD Bloc4 DIU

Napisane przez: 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. 


W odpowiedzi na Xavier Dupin

Re: Ouverture du bal au forum BD Bloc4 DIU

Napisane przez: 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
W odpowiedzi na Sofian Maabout

Re: Ouverture du bal au forum BD Bloc4 DIU

Napisane przez: Jean Pierre Gardette ( )

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

Załącznik ($a)
W odpowiedzi na Jean Pierre Gardette

Re: Ouverture du bal au forum BD Bloc4 DIU

Napisane przez: Sofian Maabout ( )
Vous avez dû dupliquer les insertions dans immeuble.
Faites: select * from Immeuble
W odpowiedzi na Sofian Maabout

Re: Ouverture du bal au forum BD Bloc4 DIU

Napisane przez: 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 ?
W odpowiedzi na Jean Pierre Gardette

Re: Ouverture du bal au forum BD Bloc4 DIU

Napisane przez: 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.

W odpowiedzi na Sofian Maabout

Re: Ouverture du bal au forum BD Bloc4 DIU

Napisane przez: Xavier Dupin ( )

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

Załącznik ($a)
Załącznik ($a)
W odpowiedzi na Xavier Dupin

Re: Ouverture du bal au forum BD Bloc4 DIU

Napisane przez: 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.
W odpowiedzi na Akka Zemmari

Re: Ouverture du bal au forum BD Bloc4 DIU

Napisane przez: 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é ! 

W odpowiedzi na Xavier Dupin

Re: Ouverture du bal au forum BD Bloc4 DIU

Napisane przez: Sofian Maabout ( )

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

W odpowiedzi na Xavier Dupin

Re: Ouverture du bal au forum BD Bloc4 DIU

Napisane przez: 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
W odpowiedzi na Sofian Maabout

Re: Ouverture du bal au forum BD Bloc4 DIU

Napisane przez: 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

W odpowiedzi na Sofian Maabout

Re: Ouverture du bal au forum BD Bloc4 DIU

Napisane przez: 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?