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

Langage SQL Discussion :

Sélection des enregistrements d'une table


Sujet :

Langage SQL

  1. #1
    Membre régulier
    Inscrit en
    Septembre 2008
    Messages
    202
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 202
    Points : 76
    Points
    76
    Par défaut Sélection des enregistrements d'une table
    Bonjour
    s'il vous plais aidez moi mon responsable attends ma réponse .

    j'ai une table des eleves qui ont étudié 1er année, 2em année,3eme année,4eme anné dans notre cem ou établissement.
    moi je veux extraire seulement les élèves qui ont étudié chez nous seulement 2année, 3année et 4année.

    sachant que les champs de matables contien

    code_eleve code_niveau et d'autre champs .

    code_niveau====> les niveaus sont 1er année, 2em année,3eme année,4eme anné

    merci d'avace

  2. #2
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 080
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 080
    Points : 30 803
    Points
    30 803
    Par défaut
    Quelque chose comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    select  code_eleve
    from    matable
    where   code_niveau in (2, 3, 4)
        and code_eleve  not in
            (   select  code_eleve
                from    matable
                where   code_niveau = 1
            )
    group by code_eleve
    having  count(distinct code_niveau) = 3
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  3. #3
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 136
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 136
    Points : 38 909
    Points
    38 909
    Billets dans le blog
    9
    Par défaut
    ou encore

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    select  code_eleve
    from    matable MAIN
    where   code_niveau in (2, 3, 4)
      and   not exists
           (select  1
            from    matable SUBQ
            where  SUBQ.code_eleve = MAIN.code_eleve
              and  SUBQ.code_niveau = 1
           )
    group by code_eleve
    having  count(distinct code_niveau) = 3

    ou encore

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    select  T1.code_eleve
    from    matable T1
    left join matable T2
      on T2.code_eleve=T1.code_eleve
     and T2.code_niveau=1
    where   T1.code_niveau in (2, 3, 4)
      and   T2.code_eleve is null  
    group by code_eleve
    having  count(distinct code_niveau) = 3

    ou encore avec except...

  4. #4
    Membre régulier
    Inscrit en
    Septembre 2008
    Messages
    202
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 202
    Points : 76
    Points
    76
    Par défaut
    trés bien la 2eme requete a bien marché
    merci bcp

  5. #5
    Membre régulier
    Inscrit en
    Septembre 2008
    Messages
    202
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 202
    Points : 76
    Points
    76
    Par défaut
    Citation Envoyé par escartefigue Voir le message
    ou encore

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    select  code_eleve
    from    matable MAIN
    where   code_niveau in (2, 3, 4)
      and   not exists
           (select  1
            from    matable SUBQ
            where  SUBQ.code_eleve = MAIN.code_eleve
              and  SUBQ.code_niveau = 1
           )
    group by code_eleve
    having  count(distinct code_niveau) = 3

    ou encore

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    select  T1.code_eleve
    from    matable T1
    left join matable T2
      on T2.code_eleve=T1.code_eleve
     and T2.code_niveau=1
    where   T1.code_niveau in (2, 3, 4)
      and   T2.code_eleve is null  
    group by code_eleve
    having  count(distinct code_niveau) = 3

    ou encore avec except...
    voilà ce que j'ai fait
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    select  num_ins
    from    ins_glob_new1
     MAIN
    where   `ICODE` in (104, 204, 304,404)
      and   not exists
           (select  122,124
            from    ins_glob_new1
     SUBQ
            where  SUBQ.num_ins = MAIN.num_ins
              and  SUBQ.ICODE = 122  and  SUBQ.ICODE = 124
           )
    group by num_ins
    having  count(distinct ICODE) = 4

    il affiche ce message d'erreur

    SHOW TABLE STATUS LIKE 'SUBQ';


    MySQL a réponduocumentation

    #1046 - No database selected



    les code_niveaux sont
    104,204,304,404,122,124,212,213,214,216,218,237,312,313,314,316,318,337

  6. #6
    Membre régulier
    Inscrit en
    Septembre 2008
    Messages
    202
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 202
    Points : 76
    Points
    76
    Par défaut
    Merci beaucoup pour vos aides . j'ai executé et ça a marché

  7. #7
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 136
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 136
    Points : 38 909
    Points
    38 909
    Billets dans le blog
    9
    Par défaut
    Du coup, passez le sujet à "résolu" en utilisant le bouton prévu à cet effet (en bas de l'écran).

  8. #8
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 080
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 080
    Points : 30 803
    Points
    30 803
    Par défaut
    Avec cette requête tu veux rechercher les num_ins qui sont associés à tous les ICODE de la liste (104, 204, 304, 404) mais ni à 122 ni à 124 ?

    Toutefois, tel que tu l'as écrite ta requête rencontres un problème. En effet, à la ligne 11 l'expression SUBQ.ICODE = 122 and SUBQ.ICODE = 124 n'est jamais vraie.
    La colonne ICODE ne peut contenir qu'une seule valeur par ligne. Pour sélectionner les lignes qui contiennent l'une de ces deux valeurs, il faudrait écrire (SUBQ.ICODE = 122 or SUBQ.ICODE = 124) ou SUBQ.ICODE in (122, 124).
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  9. #9
    Membre régulier
    Inscrit en
    Septembre 2008
    Messages
    202
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 202
    Points : 76
    Points
    76
    Par défaut
    merci beaucoup pour l 'explication

  10. #10
    Membre régulier
    Inscrit en
    Septembre 2008
    Messages
    202
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 202
    Points : 76
    Points
    76
    Par défaut
    Citation Envoyé par escartefigue Voir le message
    ou encore

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    select  code_eleve
    from    matable MAIN
    where   code_niveau in (2, 3, 4)
      and   not exists
           (select  1
            from    matable SUBQ
            where  SUBQ.code_eleve = MAIN.code_eleve
              and  SUBQ.code_niveau = 1
           )
    group by code_eleve
    having  count(distinct code_niveau) = 3

    ou encore

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    select  T1.code_eleve
    from    matable T1
    left join matable T2
      on T2.code_eleve=T1.code_eleve
     and T2.code_niveau=1
    where   T1.code_niveau in (2, 3, 4)
      and   T2.code_eleve is null  
    group by code_eleve
    having  count(distinct code_niveau) = 3

    ou encore avec except...
    cette requete est pour afficher les eleves ça a bien marché .

    s'il vous plait

    je veux afficher le nombre au liu d'afficher les enregistrements.

    est ce que cette requette est juste
    num_ins c'est code_eleve
    niv c'est code niveau


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
     
    SELECT COUNT( * ) AS nbr_dbl,  `num_ins` 
    FROM 1am_a_3as
    GROUP BY  `num_ins` 
    HAVING COUNT( DISTINCT  `niv` ) =7

  11. #11
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 136
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 136
    Points : 38 909
    Points
    38 909
    Billets dans le blog
    9
    Par défaut
    Non, cette requête n'est pas correcte.

    Si vous voulez simplement compter le nombre d'élèves
    S'il n'y a qu'une seule fois un même élève dans la table, alors un comptage simple suffit :
    select count(*) from ma_table.

    S'il peut y avoir plusieurs fois le même élève dans la table, alors il faut compter les élèves distincts
    select count(distinct code_eleve) from ma_table.

    Si vous voulez compter le nombre d'élèves pour certains critères,
    il faut alors utiliser un regroupement et placer toutes les colonnes non agrégées à restituer dans la clause SELECT et la clause GROUP BY
    Ex : comptage du nombre d'élèves par niveau
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    select code_niveau 
         , count(code_eleve) 
    from ma_table
    group by code_niveau
    Toutes ces réponses sont certainement dans vos supports de cours, il s'agit de questions de base du langage SQL.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 3
    Dernier message: 06/04/2010, 12h56
  2. Taille des enregistrements d'une table
    Par Stbaurl dans le forum Décisions SGBD
    Réponses: 6
    Dernier message: 11/07/2006, 09h19
  3. Ordre de sélection des lignes sur une table DB2
    Par Pierre Formosa dans le forum DB2
    Réponses: 1
    Dernier message: 26/04/2006, 20h03
  4. [WD9] Cliquer sur des enregistrements dans une table
    Par oz80 dans le forum WinDev
    Réponses: 2
    Dernier message: 15/12/2005, 20h11
  5. Parcourir l'ensemble des enregistrements d'une table
    Par Aurèl90 dans le forum Access
    Réponses: 17
    Dernier message: 22/09/2005, 14h51

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