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 :

Aidez moi à comprendre une requête demandée svp


Sujet :

Langage SQL

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2015
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2015
    Messages : 2
    Points : 1
    Points
    1
    Par défaut Aidez moi à comprendre une requête demandée svp
    Bonjour
    Merci de prendre la peine de lire ma demande.
    Dans l'un des exercices de mon projet Base de données, la question est la suivante :

    "Afficher les noms des responsables des agences dans lesquelles il est impossible de louer
    un véhicule de catégorie voiture. Aucune voiture n’est disponible au moment où la requête
    est exécutée."

    La dernière phrase, est-elle juste une précision, ou je dois en tenir compte dans l'écriture de la requête ?
    Ci dessous, la requête que j'ai écrite et qui à mon avis est juste vu qu'elle est vérifiée de par mes insertions dans mes tables.

    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
    select employee.nom_employee
    from employee
    join agence 
    on employee.ID_AGENCE = agence.ID_AGENCE 
    where poste = 'responsable' and agence.id_agence in (
    select distinct agence.id_agence
    from agence
    join vehicule
    on agence.ID_AGENCE = vehicule.ID_AGENCE
    where vehicule.id_modele not in (
    select vehicule.ID_MODELE
    from vehicule
    join modele
    on vehicule.ID_MODELE=modele.ID_MODELE
    minus 
    select utilitaire.id_modele
    from UTILITAIRE)
    minus
     
    select distinct agence.id_agence
    from agence
    join vehicule
    on agence.ID_AGENCE = vehicule.ID_AGENCE
    where vehicule.id_modele in (
    select vehicule.ID_MODELE
    from vehicule
    join modele
    on vehicule.ID_MODELE=modele.ID_MODELE
    minus 
    select utilitaire.id_modele
    from UTILITAIRE)
    )
    ;

    Pour plus de précisions, mon projet est en pièce jointe et l'image représentant globalement mon mcd Nom : Capture.JPG
Affichages : 184
Taille : 129,0 Ko.


    Merci
    Images attachées Images attachées

  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,

    Vous pouvez effectivement répondre par des succession de requêtes minus ou except (selon le sgbd).
    Toutefois des tests d'existence seront certainement plus performants, même si on peut imaginer que les agences ne possèdent pas des millions de véhicules

    Voici une requete qui va dans ce sens, je n'ai pas pu tester car il aurait fallu créer toutes les tables

    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
    select EMP.nom_Employe
          ,AGC.nom_Agence
    From Employe as EMP
    Inner join Agence as AGC
       on AGC.id_agence      = EMP.id_agence     
      and AGC.id_responsable = EMP.id_employe
    Where not exists
         (select 1 
          from vehicule as VEH
          inner join modele as MOD
             on MOD.id_modele = VEH.id_modele
          left outer join utilitaire as UTI
             on UTI.modele = MOD.id_modele
          left outer join location as LOC
             on LOC.id_agence           = AGC.id_agence
            and LOC.num_immatriculation = AGC.num_immatriculation
          where VEH.id_agence = AGC.id_agence      
            and UTI.id_modele is null
            and (   LOC.date_restitution < curdate()
                 OR LOC.num_immatriculation isnull)
    Quelques remarques :
    • Vous ne devriez jamais définir vos identifiant en varchar, c'est très risqué pour les performances et peu pratique à l'usage

    • Vous ne devriez pas non plus utiliser du varchar pour des mesures (kilomètrage, prix etc...) mais des données numériques plus un identifiant de l'unité de mesure

    • Il n'est pas recommandé de nommer des colonnes ou des tables avec des accents, car ça vous oblige à coder les requetes avec des quotes, et ce n'est pas portable

    • Attention, certaines colonnes ont des underscore, d'autres des tirets

    • Rien n'indique comment on détermine la catégorie voiture, j'ai donc supposé que tout ce qui n'est pas utilitaire est de type voiture

    • La date du jour est à adapter en fonction de votre SGBD

    • Je préfère toujours préciser le type de jointure explicitement, c'est pourquoi j'ai remplacé "JOIN" par "INNER JOIN" ou "LEFT/RIGHT OUTER JOIN" selon

  3. #3
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2015
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2015
    Messages : 2
    Points : 1
    Points
    1
    Par défaut
    Bonsoir

    Merci énormément de votre réponse, cela m'aide beaucoup. Concernant le code que vous avez donné, j'ai essayé de l'adapter en fonction de mon DDL que je laisse ci dessous, afin que vous puissiez mieux m'aider. Il est un peu différent de la photo du MCD que j'ai postée car j'ai fait des petites modifications qui j'espère ne sont pas fausses.

    Je travaille avec SQL Developer.

    Par contre, il ne me reste que la requête 4 avec laquelle j'ai beaucoup de mal.

    Merci PROJET.sql

Discussions similaires

  1. [OpenOffice][Tableur] Aidez moi pour une macro dans calc svp !
    Par kakakikol dans le forum OpenOffice & LibreOffice
    Réponses: 1
    Dernier message: 28/10/2010, 09h41
  2. Réponses: 3
    Dernier message: 25/03/2008, 09h46
  3. Aidez moi pour une requête SQL server
    Par pop10 dans le forum MS SQL Server
    Réponses: 6
    Dernier message: 19/06/2007, 22h15
  4. aidez moi pour créer cette applet svp!
    Par walid2012 dans le forum JBuilder
    Réponses: 1
    Dernier message: 11/05/2006, 14h24
  5. AIdez moi à optimiser cette requete MySQL SVP
    Par petozak dans le forum Langage SQL
    Réponses: 4
    Dernier message: 13/09/2005, 15h16

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