Requetes SQL

Fermé
SnakeIn - 7 déc. 2006 à 09:01
 Profil bloqué - 7 déc. 2006 à 11:14
Bonjour,

Petites revisions Concours sql, Algebre rel. et language tuples
Soit les 2 tables suivantes :
Clubs (N°Club, Ville, capacite)
Personnes (N°pers, N°Club)


On demande, les clubs qui sont visités par au moins une personne :

AR : : (Symb. Pi) N°Club(Personne)

Tuples : {P.N°pers | (il existe au moins) P, Personnes }

Sql : Select distinct N°Perso
From Personnes ;

On demandes, les clubs qui ne sont fréquentés par aucune personne :

(Pi = projection en AR)

AR : (Pi) N°Perso(Clubs) / (Pi) N°Perso(Personnes)

Sql : Select distinct N°Perso
From Clubs
Where NOT IN (Select N°Perso From Personne )


Une petite dernière : (niveau au dessus)
on demande les Personnes ne fréquentant que des clubs non fréquentées par d’autres Peronnes.

AR : ?

tuples : ?
Sql : Select N°Perso
From Personnes
Where N°Perso EXIST (Select N°Perso From Personnes GroupBy N°Perso Having count (*) = 1);

J'aimerai votre avis, voir vos corrections sur les différentes requetes ? je dépoussière un peu mes cours de sql ca fait longtemps, par contre pour le tuple et l'ar je découvre un peu.

Merci
SnakeIn


Ps : j'ai fait mes requetes sans croiser les tables ? mais je ne pense pas que cela soit necessaire ?
A voir également:

4 réponses

Profil bloqué
7 déc. 2006 à 09:34
1ére requéte:
select distinct N°club from clubs c,personnes p
where n°club in(select n°club ,count(n°pers)nb
from personnes where nb<=1) and c.n°club=p.n°club;
0
select distinct nclub from personnes
0
Profil bloqué > slooptoo
7 déc. 2006 à 10:18
c'est vrai que j'ai cherché 1 peu trop loin.merci!!!
0
Profil bloqué
7 déc. 2006 à 09:39
2ére requéte:
select distinct N°club from clubs where NOT EXISTS(select N°club from club c,
Personnes p where c.n°club=p.n°club);
0
Profil bloqué
7 déc. 2006 à 09:47
3éme requéte:
select distinct N°pers from personnes p,club c
where c.n°club=p.n°club
and c.n°club=(select distinct N°club from clubs
where NOT EXISTS(select N°club from club c,
Personnes p where c.n°club=p.n°club);
0
Merci pour vos idées,

quand tu dis que tu as cherché trop loin, c'est pour la première, pas besoin de joindre les tables alors ?

Juste :select distinct nclub from personnes

Mais alors, pourquoi pour la question 2 on fait une jointure, je comprend pas ?? :( j'aimerai bien comprendre

merci
0
Profil bloqué
7 déc. 2006 à 11:14
en fait il faut faire l'opération ded soustraction (NOT EXISTS) :

tous les clubs-les clubs fréquentés par des personnes.

cette réponse est beaucoup plus simple
2éme requéte:
select distinct N°club from clubs
where NOT EXISTS(select distinct N°club from personnes);
0