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 :

Requêtes sql complexes


Sujet :

Langage SQL

  1. #1
    Candidat au Club
    Inscrit en
    Décembre 2009
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Décembre 2009
    Messages : 6
    Points : 4
    Points
    4
    Par défaut Requêtes sql complexes
    salut à tous , j'ai une table personne ayant les champs (id, nom, piece_identite, date_de_naissance), mon premier problème est de repérer toutes les occurences de ma table ayant le champ piece_identite vide, le second problème est de repérer touts les noms de personnes utilisant plusieurs pièces d'identités et afficher toutes ces pièces, le troisième étant de repérer toutes les personnes partageant les mêmes numéros de pièces d'identités. merci d'avance je compte vraiment beaucoup sur vous.

  2. #2
    Expert éminent
    Avatar de StringBuilder
    Homme Profil pro
    Chef de projets
    Inscrit en
    Février 2010
    Messages
    4 170
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Rhône (Rhône Alpes)

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

    Informations forums :
    Inscription : Février 2010
    Messages : 4 170
    Points : 7 422
    Points
    7 422
    Billets dans le blog
    1
    Par défaut
    Peut-être avez-vous mal lu la charte du forum ? On ne fait pas vos exercices à votre place.

    Ensuite, les champs sont à la campagne, et les colonnes dans les tables.

    Quelques pistes :
    - Une personne qui n'a pas de pièce d'identité aura la colonne "piece_identite" remplie de valeurs nulles.

    - Pour la seconde question, le modèle que vous donnez est archi faux : il ne respecte absolument pas les règles de modélisation. En partant du principe que vous avez des doublons sur les noms des personnes, il vous faudra faire un count() groupé par les personnes, et une clause having pour ne garder que celles dont le count() est plus grand que 1

    - Pour la troisième, il faudra passer par une sous-requête : compter le nombre de fois que chaque numéro de pièce d'identité apparaît, ne conserver que ceux dont le count() sera supérieur à 1, puis filtrer la requête principale avec les numéros de pièces retenues.

  3. #3
    Expert éminent
    Avatar de StringBuilder
    Homme Profil pro
    Chef de projets
    Inscrit en
    Février 2010
    Messages
    4 170
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Rhône (Rhône Alpes)

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

    Informations forums :
    Inscription : Février 2010
    Messages : 4 170
    Points : 7 422
    Points
    7 422
    Billets dans le blog
    1
    Par défaut
    PS : En réalité, à cause de la stupidité affligeante de votre modèle de données, aucune des pistes que je vous ai donné ne sont suffisantes.

    - Pour le premier problème, une même personne peut avoir une ligne sans pièce d'identité, et des lignes avec : il faudrait donc rajouter une sous-requête de type "not exists"

    - Pour le second, une même personne peut avoir des lignes avec et sans pièces d'identité, et éventuellement des doublons dans les numéros de pièces : par conséquent, il faut filtrer dans la sous-requête les lignes qui n'ont pas de pièces, et faire un count(distinct) pour être sûr de ne compter qu'une seule fois chaque pièce

    - Pour le troisième, toujours le même problème : si une personne a deux fois la même pièce, il ne faudra pas la compter.

  4. #4
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 173
    Points : 5 345
    Points
    5 345
    Par défaut
    Bonjour,


    Du coup en allant un peu plus loin on pourrait proposer une nouvelle modélisation.


    Je suppose qu'une pièce d'identité est composé de :
    - cni
    - passeport
    - ???

    Bref, on en déduit déjà que l'on va avoir besoin d'un typage pour la pièce d'identité.

    Donc on recompose le MCD :
    Personne-0,n-------Possède------1,1-Piece_identité-1,1----Appartient----0,n-Type_piece_identité


    Concernant le MPD :
    PERSONNE(PER_ID, PER_NOM, PER_DATE_NAISSANCE, ...)
    TYPE_PIECE_IDENTITE(TPD_ID, TPD_DESCRIPTION, TPD_CODE, TPD_ORDRE,...)
    PIECE_IDENTITE(#PER_ID, #TPD_ID, PID_NUMERO, ...)

    Où, les colonnes en gras sont des PK et les colonnes préfixé d'un # des FK.


    Avec une telle normalisation vos 3 demandes deviennent triviales

    Edit : on pourrai pousser la chose plus loin, sachant qu'un type d'identité à surement un masque spécifique concernant la composition de son numéro.

    Mais là je vous laisserai aller sur le forum de modélisation.

  5. #5
    Candidat au Club
    Inscrit en
    Décembre 2009
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Décembre 2009
    Messages : 6
    Points : 4
    Points
    4
    Par défaut
    merci de ton aide, mais je n'ai pas besoin de modéliser à nouveau, ici pièce d'identité correspond juste au numéro d'un type de pièce propre à une structure et je parle juste du numéro de la pièce. j'ai juste besoin que tu te serve des données mises à ta disposition. entre temps je voudrais avoir des requêtes dans ce sens la. si tu as un cours qui parle des requêtes avancées ou si tu peux écrire ces requêtes fais moi signe

  6. #6
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 173
    Points : 5 345
    Points
    5 345
    Par défaut
    ici un blog : http://sqlpro.developpez.com/

    A gauche il y a un menu nommé : Initiation à SQL

    Tout est dedans.

    Revenez avec vos requêtes + explication du problème que vous rencontrez.

    Stringbuilder vous a déjà aiguillé sur les méthodes d'approche pour construire vos différentes requêtes.

  7. #7
    Membre expert

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Juin 2012
    Messages
    612
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Conseil

    Informations forums :
    Inscription : Juin 2012
    Messages : 612
    Points : 3 066
    Points
    3 066
    Par défaut
    Citation Envoyé par xaviermfx Voir le message
    mais je n'ai pas besoin de modéliser à nouveau
    Et pourtant, votre modèle est mauvais.

    Citation Envoyé par xaviermfx Voir le message
    j'ai juste besoin que tu te serve des données mises à ta disposition [...] si tu peux écrire ces requêtes fais moi signe
    Osé mais qui ne tente rien n'a rien

Discussions similaires

  1. requête sql complexe
    Par julien_d dans le forum SQL
    Réponses: 7
    Dernier message: 01/05/2007, 17h03
  2. Requète SQL complexe
    Par NicoNGRI dans le forum MS SQL Server
    Réponses: 7
    Dernier message: 01/08/2006, 10h10
  3. Requête sql complexe
    Par new_wave dans le forum Langage SQL
    Réponses: 1
    Dernier message: 03/01/2006, 11h55
  4. Requête SQL Complexe
    Par zut94 dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 25/11/2005, 20h53
  5. Requête SQL complexe. Comment faire ....
    Par BilTCD dans le forum Langage SQL
    Réponses: 4
    Dernier message: 05/11/2004, 16h18

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