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 :

Je ne comprends pas cette requête SQL


Sujet :

Langage SQL

  1. #1
    Membre à l'essai
    Inscrit en
    Mars 2009
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 9
    Points : 13
    Points
    13
    Par défaut Je ne comprends pas cette requête SQL
    salut,
    le schéma:
    Location (Personne, Voiture, DateDebut, DateFin)
    Accident (Personne, Voiture, Date)

    Que représente la requête SQL suivante:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    SELECT T.Personne
    FROM Location T
    WHERE NOT EXISTS ( SELECT *
                                  FROM Location U 
                                  WHERE U.Personne=T.Personne
                                    AND NOT EXISTS ( SELECT *
                                                            FROM Accident V
                                                            WHERE V.Personne=U.Personne
                                                              AND V.Voiture=U.Voiture));
    a. les personnes ayant eu des accidents avec des voitures qu'elle ont louées.
    b. les personnes ayant toujours eu des accidents avec les voitures qu'elle ont louées.
    c. les personnes ayant loué des voitures et ayant fait des accidents.
    d. les personnes ayant eu des accidents avec toutes les voitures qu'elle ont louées.

    Et je ne comprends pas la différence entre la requête au dessus et la requête suivante:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT T.Personne
    FROM Location T
    WHERE EXISTS ( SELECT *
                                FROM Accident V
                                WHERE V.Personne=T.Personne
                                AND V.Voiture=T.Voiture));
    Merci.

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 286
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 286
    Points : 12 988
    Points
    12 988
    Par défaut
    Bonsoir,
    Je dirai que la requête renvoie les locations pour lesquelles il n'existe pas de location ayant la même personne et pour lesquelles il n'y a pas d'accident avec la même personne et la même voiture.
    Bref on cherche toutes les locations des personnes qui ont eu au moins un accident avec une voiture louée.
    La deuxième renvoie toutes les locations pour lesquelles la voiture n'a pas fini contre un arbre

    Donc en gros, si je loue un break et une roadster, et que j'envoie le deuxième dans le décor, la première requête renvoie mes deux locations et la deuxième seulement le roadster.

    Tatayo.

  3. #3
    Membre à l'essai
    Inscrit en
    Mars 2009
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 9
    Points : 13
    Points
    13
    Par défaut
    Citation Envoyé par tatayo Voir le message
    Bonsoir,
    Je dirai que la requête renvoie les locations pour lesquelles il n'existe pas de location ayant la même personne et pour lesquelles il n'y a pas d'accident avec la même personne et la même voiture.
    Bref on cherche toutes les locations des personnes qui ont eu au moins un accident avec une voiture louée.
    La deuxième renvoie toutes les locations pour lesquelles la voiture n'a pas fini contre un arbre

    Donc en gros, si je loue un break et une roadster, et que j'envoie le deuxième dans le décor, la première requête renvoie mes deux locations et la deuxième seulement le roadster.

    Tatayo.
    Merci mais,
    S'il vous plaît La bonne réponse est l'un des réponses posées (a ou b ou c ou d)

  4. #4
    Membre éprouvé Avatar de Oishiiii
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2009
    Messages
    508
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Ain (Rhône Alpes)

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

    Informations forums :
    Inscription : Août 2009
    Messages : 508
    Points : 1 107
    Points
    1 107
    Par défaut
    Bonsoir,
    Citation Envoyé par khalildz Voir le message
    Que représente la requête SQL suivante:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    SELECT T.Personne
    FROM Location T
    WHERE NOT EXISTS ( SELECT *
                                  FROM Location U 
                                  WHERE U.Personne=T.Personne
                                    AND NOT EXISTS ( SELECT *
                                                            FROM Accident V
                                                            WHERE V.Personne=U.Personne
                                                              AND V.Voiture=U.Voiture));
    Il s'agit d'une opération de division relationnelle.

    Afficher les personnes pour lesquelles il n'existe pas une seule Location pour laquelle il n'y a pas d'accident.
    Autrement dit:
    Afficher les personnes qui ont toujours eu un accident avec leurs locations.

    Cela se teste facilement. Créez les deux tables, quelques lignes et lancez la requête.

    Citation Envoyé par khalildz Voir le message
    Et je ne comprends pas la différence entre la requête au dessus et la requête suivante:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT T.Personne
    FROM Location T
    WHERE EXISTS ( SELECT *
                                FROM Accident V
                                WHERE V.Personne=T.Personne
                                AND V.Voiture=T.Voiture));
    Merci.
    Cette requête va retourner toutes les personnes qui ont eu au moins un accident, peu importe quelles aient eu une ou dix locations.

    Citation Envoyé par khalildz Voir le message
    a. les personnes ayant eu des accidents avec des voitures qu'elle ont louées.
    b. les personnes ayant toujours eu des accidents avec les voitures qu'elle ont louées.
    c. les personnes ayant loué des voitures et ayant fait des accidents.
    d. les personnes ayant eu des accidents avec toutes les voitures qu'elle ont louées.
    Pour moi les propositions B et D sont strictement équivalentes. Idem pour A et C. Est-ce normal ?

  5. #5
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 920
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 920
    Points : 51 712
    Points
    51 712
    Billets dans le blog
    6
    Par défaut
    C'est effectivement une des multiples forme de la division relationnelle. Lisez l'article que j'ai écrit à ce sujet :
    http://sqlpro.developpez.com/cours/divrelationnelle/

    A +

  6. #6
    Membre à l'essai
    Inscrit en
    Mars 2009
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 9
    Points : 13
    Points
    13
    Par défaut
    Merci beaucoup

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

Discussions similaires

  1. Je ne comprends pas cette ligne de code
    Par beegees dans le forum C++
    Réponses: 17
    Dernier message: 13/05/2008, 12h02
  2. Pourquoi cette requête SQL ne marche pas toujours
    Par Platon93 dans le forum Requêtes et SQL.
    Réponses: 17
    Dernier message: 14/12/2006, 18h29
  3. Comprend pas cette commande SED
    Par DIE dans le forum Shell et commandes GNU
    Réponses: 5
    Dernier message: 05/10/2006, 14h58
  4. Ne comprends pas une exception SQL
    Par n@n¤u dans le forum Outils
    Réponses: 3
    Dernier message: 13/07/2006, 14h04
  5. [Boolean]Je ne comprend pas cette instruction
    Par jcachico dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 13/01/2006, 17h25

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