Précédent   Forum des professionnels en informatique > Bases de données > Oracle > SQL
SQL Forum d'entraide sur le SQL pour Oracle
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 18/11/2010, 21h46   #1
Invité régulier
 
Inscription : juin 2008
Messages : 86
Détails du profil
Informations forums :
Inscription : juin 2008
Messages : 86
Points : 5
Points : 5
Par défaut Question SQL débutant - count / clé étrangère

Bonjour,

Je suis débutant et j'ai une question pour compter des entrées dans une table, référencée par une clé étrangère.

Par exemple, j'aimerais savoir combien de maison a au total 1 personne, et j'ai deux tables :

T_PERSO(client_id, prenom, nom)
T_MAISON(maison_id, client_id)

Pour cela je fais :
Code :
1
2
3
  SELECT client_id, COUNT(*) C
    FROM T_MAISON
GROUP BY client_id
Ce qui me donne le nombre de maison par personne. Seulement cette table n'est pas nécessaire renseigné car toutes les personnes n'ont pas forcément une maison, donc cela ne correspond pas à ce que je veux faire : compter le nombre de maison pour chacun des clients.

Comment puis-je faire svp ?

Merci d'avance ^^
Goffer est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/11/2010, 22h16   #2
Modérateur
 
Homme Fabien
Ingénieur d'études en décisionnel
Inscription : septembre 2008
Messages : 5 680
Détails du profil
Informations personnelles :
Nom : Homme Fabien
Âge : 34
Localisation : France, Yvelines (Île de France)

Informations professionnelles :
Activité : Ingénieur d'études en décisionnel
Secteur : Arts - Culture

Informations forums :
Inscription : septembre 2008
Messages : 5 680
Points : 10 473
Points : 10 473
Envoyer un message via ICQ à Waldar Envoyer un message via Skype™ à Waldar
Il faut faire une jointure externe entre vos deux tables de manière à parcourir toutes les personnes même si elles n'ont pas de maison.

Voila pour le premier indice !
__________________
Email : http://scr.im/waldar
Waldar est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/11/2010, 20h25   #3
Invité régulier
 
Inscription : juin 2008
Messages : 86
Détails du profil
Informations forums :
Inscription : juin 2008
Messages : 86
Points : 5
Points : 5
Merci beaucoup Waldar j'ai réussi !

Maintenant je dois faire un filtre pour sortir les résultats d'une table en fonction de la valeur d'un booléen,

Ex :
T_PERSO,
perso_id | nom | prenom

Je voudrais filtrer les résultats pour n'obtenir que les entrées dont T_PERSO. nom n'est pas null, et uniquement si le booléen B est égal à true (sinon je renvoie toutes les entrées, même celle qui sont nuls). Je ne sais pas comment l'obtenir, est-ce que vous pouvez me donner une piste SVP ?

J'avais pensé à faire quelque chose avec les jointures externes / internes suivant la valeur du booléen, mais aucune idée de comment je peux réaliser ma condition.

ps : J'ai beaucoup de mal à raisonner en SQL, à la base je n'ai fais que des langages procéduraux, des conseils pour un noob ?
Goffer est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/11/2010, 20h55   #4
Modérateur
 
Homme Fabien
Ingénieur d'études en décisionnel
Inscription : septembre 2008
Messages : 5 680
Détails du profil
Informations personnelles :
Nom : Homme Fabien
Âge : 34
Localisation : France, Yvelines (Île de France)

Informations professionnelles :
Activité : Ingénieur d'études en décisionnel
Secteur : Arts - Culture

Informations forums :
Inscription : septembre 2008
Messages : 5 680
Points : 10 473
Points : 10 473
Envoyer un message via ICQ à Waldar Envoyer un message via Skype™ à Waldar
Le type booléen n'existe pas en SQL Oracle (mais il existe en PL/SQL, va comprendre).

Pour votre exemple, on va partir sur une variable :B qui vaut 1 (true) ou 0 (false)

En fait la restriction vous l'avez parfaitement exprimé, il suffit juste de la coder.
Citation:
nom n'est pas null
se traduit :
Citation:
et
se traduit :
Citation:
si le booléen B est égal à true
se traduit :
Citation:
sinon
se traduit :
Citation:
je renvoie toutes les entrées
se traduit :
Donc en compilant tout ceci :
Code :
1
2
3
4
SELECT perso_id, nom, prenom
  FROM t_perso
 WHERE (:b = 1 AND nom IS NOT NULL)
    OR  :b = 0
Citation:
ps : J'ai beaucoup de mal à raisonner en SQL, à la base je n'ai fais que des langages procéduraux, des conseils pour un noob ?
Si vous avez fait des maths, il faut penser "patate", c'est-à-dire ensembliste.
Ça c'est le conseil général. Le mieux c'est de pratiquer
__________________
Email : http://scr.im/waldar
Waldar est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 09h31.


 
 
 
 
Partenaires

Hébergement Web