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ête SQL compliquée


Sujet :

Langage SQL

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2016
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2016
    Messages : 9
    Points : 7
    Points
    7
    Par défaut Requête SQL compliquée
    Bonjour, dans le cadre d'un projet que je code en Java, je dois effectuer une recherche dans mon programme mais je n'arrive pas à la traduire en requête SQL.

    Voici la recherche: Liste des fiches de soin des animaux d’une espèce choisie(parmi les libellés présents dans la table Animal), produites dans une période choisie(entre 2 dates) et ayant reçu au moins une ordonnance d’un pharmacien choisi (parmi les noms des pharmaciens présents dans la table).

    et voici le script SQL de ma base de données:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    CREATE TABLE Pharmacien
    	(matricule numeric(2) constraint Pharmacien_pk Primary Key,
    	nom varchar(50) not null,
    	prenom varchar(20) not null,
    	email varchar(40) not null,
    	salaire numeric(6,2) not null);
     
    CREATE TABLE Prepose_a_l_accueil
    	(matricule numeric(4) constraint Prepose_pk Primary Key,
    	nom varchar(25) not null,
    	prenom varchar(10) not null);
     
    CREATE TABLE Fiche_Signaletique_Animal
    	(numRegistre numeric(6) constraint FicheSign_pk Primary Key,
    	nomAnimal varchar(20) not null,
    	espece varchar(25) not null,
    	couleurPelage varchar(15) not null,
    	couleurPeau varchar(15) not null,
    	aTatouage boolean not null,
    	aPuce boolean not null,
    	dateEntree date not null,
    	remarque varchar(500),
    	preposeAff numeric(4) not null,
    	constraint FicheSign_fk_Prepose foreign key(preposeAff) references Prepose_a_l_accueil);
     
    CREATE TABLE Ordonnance
    	(numeroOrd numeric(2) constraint Ordonnance_pk Primary Key,
    	dateEnvoi date not null,
    	etatOrd varchar(15) not null,
    	numRegistre numeric(2) not null,
    	animalAff numeric(6) not null,
    	constraint Ord_fk_FicheSign foreign key(animalAff) references Fiche_Signaletique_Animal,
    	constraint Ord_fk_Pharma foreign key(numRegistre) references Pharmacien);
     
    CREATE TABLE FicheSoin
    	(IDFiche numeric(7) constraint FicheSoin_pk Primary Key,
    	etatFicheSoin varchar(20) not null,
    	typeNourriture varchar(30) not null,
    	quantite numeric(4) not null,
    	heureRationnement time not null,
    	soinsBase varchar(200) not null,
    	dateProduction date not null,
    	animalAff numeric(6) not null,
    	soi_descrSoinAvance varchar(200),
    	soi_estRealise boolean,
    	constraint FicheSoin_fk_FicheSign foreign key(animalAff) references Fiche_Signaletique_Animal);

  2. #2
    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
    Bonjour,

    D'après le DDL que vous communiquez, ca devrait ressembler à ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
       select SO.IDFiche
            , SO.etatFicheSoin
            , SO.typeNourriture
            , SO.quantite
            , SO.heureRationnement
            , SO.soinsBase
            , SO.dateProduction
        from FicheSoin as SO
        inner join Fiche_Signaletique_Animal as AN
           on AN.numregistre = SO.animalAff
        where AN.nomAnimal in ('REX LE CHIEN', 'MINOU LE CHAT', 'CUICUI LE PINSON')
          and SO.dateProduction between &datedb and &datefn
          and exists
             (select 1
              from Ordonnance as OD
              inner join Pharmacien as PH
                 on PH.matricule = OD.numregistre 
              where OD.animalAff = SO.animalAff
                and PH.nom in ('Pharmacie dupon', 'Pharmacie durand', 'apothicaire martin'))
    MAIS :
    - vos définitions de contrainte semblent invalides, car les noms des colonnes étant différents entre table fille et table mère, il faut préciser le nom de la colonne de référence de la table mère
    (sauf si votre SGBD l'autorise, mais auquel cas quel est il et comment s'en sort il ?)
    - vos identifiants sont de type numéric, il est préférable de choisir du format binaire (small, int, ou bigint selon le nombre d'identifiants requis)
    - faire une recherche par libellé n'est pas très efficient et vous vous exposez aux doublons
    - les varchars de petite taille sont nuisibles aux performances, à remplacer avantageusement par du char

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2016
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2016
    Messages : 9
    Points : 7
    Points
    7
    Par défaut
    Bonjour, merci pour la réponse,

    Je travaille avec NetBeans , le SQL est donc sur server Derby.

    Et mon script a déjà été approuvé par mon professeur qui m'a juste demandé maintenant de rajouter la recherche qui est l'objet de cette discussion

  4. #4
    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
    Et bien votre formateur n'a pas été très regardant, car, comme mentionné dans mon 1er post, il manque le nom de la colonne de la table mère dans vos contraintes.
    C'est obligatoire dans la mesure où ce nom est différent entre les 2 tables

    Par exemple, il faut ajouter ce que j'ai mis en couleur dans l'extrait ci-dessous, sans quoi même si votre DDL ne plante pas (ce qui m'étonnerait fort) en tout cas la contrainte ne fonctionnera pas


    Code DDL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    CREATE TABLE Ordonnance
          (numeroOrd  numeric(2) 
              constraint Ordonnance_pk Primary Key,
           dateEnvoi  date not null,
           etatOrd   varchar(15) not null,
           numRegistre numeric(2) not null,
           animalAff numeric(6) not null,
           [. . .]
           constraint Ord_fk_Pharma 
              foreign key(numRegistre) 
              references Pharmacien(matricule));

    La colonne Numregisre n'existant pas dans la table pharmacien, il faut bien préciser qu'il s'agit de la colonne matricule de la table pharmacien

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

Discussions similaires

  1. Requête SQl compliquée
    Par mongilotti dans le forum SQL
    Réponses: 5
    Dernier message: 21/04/2010, 11h18
  2. requête sql compliquée
    Par root76 dans le forum Développement
    Réponses: 2
    Dernier message: 22/07/2009, 09h28
  3. Requête SQL compliquée
    Par fips1962 dans le forum Requêtes et SQL.
    Réponses: 3
    Dernier message: 22/05/2009, 18h52
  4. requête sql compliquée
    Par root76 dans le forum Langage SQL
    Réponses: 6
    Dernier message: 20/08/2007, 15h53
  5. requête sql compliquée
    Par caoutchouc dans le forum Langage SQL
    Réponses: 2
    Dernier message: 18/05/2007, 16h21

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