IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

SQL Oracle Discussion :

Question SQL débutant - count / clé étrangère


Sujet :

SQL Oracle

  1. #1
    Nouveau membre du Club
    Inscrit en
    Juin 2008
    Messages
    95
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 95
    Points : 34
    Points
    34
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 ^^

  2. #2
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 453
    Points : 18 388
    Points
    18 388
    Par défaut
    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 !

  3. #3
    Nouveau membre du Club
    Inscrit en
    Juin 2008
    Messages
    95
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 95
    Points : 34
    Points
    34
    Par défaut
    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 ?

  4. #4
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 453
    Points : 18 388
    Points
    18 388
    Par défaut
    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.
    nom n'est pas null
    se traduit :
    et
    se traduit :
    si le booléen B est égal à true
    se traduit :
    sinon
    se traduit :
    je renvoie toutes les entrées
    se traduit :
    Donc en compilant tout ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    select perso_id, nom, prenom
      from t_perso
     where (:b = 1 and nom is not null)
        or  :b = 0
    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

Discussions similaires

  1. question de débutant sur SQL
    Par looping dans le forum Bases de données
    Réponses: 1
    Dernier message: 14/03/2009, 10h33
  2. Question de débutant en Sql
    Par dryzd dans le forum Langage SQL
    Réponses: 4
    Dernier message: 25/02/2009, 15h54
  3. Questions sur la création d'une BDD en SQL (débutant)
    Par CleeM dans le forum Langage SQL
    Réponses: 10
    Dernier message: 14/06/2007, 15h14
  4. [MS sql] (débutant) distinct et count
    Par damn dans le forum Langage SQL
    Réponses: 2
    Dernier message: 31/05/2005, 13h25
  5. PL/Sql Débutant question
    Par Guld dans le forum Langage SQL
    Réponses: 2
    Dernier message: 22/02/2004, 17h48

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo