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 :

[aide] Requete SQL s.v.p


Sujet :

Langage SQL

  1. #1
    Candidat au Club
    Inscrit en
    Avril 2010
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 3
    Points : 2
    Points
    2
    Par défaut [aide] Requete SQL s.v.p
    Salut les gars,

    Je suis entrain de reviser le module Base de Donnée,
    mais, je n'arrive pas à réaliser une opérations relationnelle, (ou la requête SQL correspand).

    Voici mon schéma relationnel:
    REPAS(INVITE,DATE).
    MENU(PLAT,DATE).
    PREFERENCE(PERSONNE,PLAT).

    La Requête demandée est:
    "Les invités qui ont assisté è tous les repas".

    J'aimerai bien avoir votre aide.
    Et un grand MERCI pour vous à l'avance!

    Cordialement!

  2. #2
    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 sarou Voir le message
    La Requête demandée est:
    "Les invités qui ont assisté è tous les repas".
    Il faut réaliser une division relationnelle.
    http://sqlpro.developpez.com/cours/divrelationnelle/

    Si le repas n'est caractérisé que par sa date, on a besoin ici que de la table repas (qui n'est certainement pas un modèle de normalisation).

    Voilà un exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    SELECT DISTINCT invite
    FROM repas AS inv
    WHERE NOT EXISTS 
      ( SELECT NULL
        FROM (
          SELECT DISTINCT dateRepas
          FROM repas ) AS dr
        WHERE NOT EXISTS
          ( SELECT NULL
            FROM repas
            WHERE dr.dateRepas = repas.daterepas
              AND inv.invite = repas.invite ) )
    Pour la tester sur PostgreSQL:
    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
     
    WITH repas(invite, dateRepas) AS (
      select 'pierre', '2010-05-01' union all
      select 'paul', '2010-05-01' union all
      select 'paul', '2010-05-02' union all
      select 'jean', '2010-05-04' union all
      select 'paul', '2010-05-04' union all
      select 'david', '2010-05-02' union all
      select 'pierre', '2010-05-02'
    )
    SELECT DISTINCT invite
    FROM repas AS inv
    WHERE NOT EXISTS 
      ( SELECT NULL
        FROM (
          SELECT DISTINCT dateRepas
          FROM repas ) AS dr
        WHERE NOT EXISTS
          ( SELECT NULL
            FROM repas
            WHERE dr.dateRepas = repas.daterepas
              AND inv.invite = repas.invite ) )

  3. #3
    Candidat au Club
    Inscrit en
    Avril 2010
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 3
    Points : 2
    Points
    2
    Par défaut
    Génial, j'ai essayé votre code sur le access et sa marche trés bien.

    Mais, comme je n'ai que qlq jours dés le départ du module BD, on a pas entamé le vrai SQL, j'aimerai bien savoir les relations algébriques corespandants, surtout le clause NOT EXIST je sais pas commant l'exprimer en algèbre relationnel.

    Je suis heureux de votre réponse!

    EDIT: j'ai besoin de qlq chose comme sa:
    R1. JOIN(REPAS,MENU);
    R2. PROJECT(R1,invité,plat);
    R3. PROJECT(R1,plat);
    R4. DIVISION(R2,R3);
    J'en suis pas sûr.

  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
    Tedd Codd a défini un opérateur de division dont on peut trouver la définition formelle donnée par Chris Date ici:
    http://www.dbdebunk.com/page/page/772076.htm

    Voici la traduction telle qu'elle est écrite dans Introduction aux bases de données (8ème édition):

    Soient les relations A et B, ayant respectivement les en-têtes {X, Y} et {Y}, où X et Y peuvent être composites.
    L'expression A DIVIDEBY B donne une relation dotée de l'en-tête {X} et d'un corps qui consiste en tous les n-uplets {X x} tel qu'un n-uplet {X x, Y y} apparaît dans A pour tout n-uplet {Y y} qui apparaît dans B.

    Donc l'en-tête du diviseur est un sous-ensemble de l'en-tête du dividende, et le résultat de l'opération est une relation dont l'en-tête est égale à l'en-tête du diviseur, moins l'en-tête du dividende.

    En supposant que votre opérateur DIVISION se comporte comme DIVIDEBY, pour trouver les invités qui ont participé à tous les repas, il suffirait de faire ceci:

    R1. PROJECT(REPAS, DATE)
    R2. DIVISION(REPAS, R1)

  5. #5
    Candidat au Club
    Inscrit en
    Avril 2010
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 3
    Points : 2
    Points
    2
    Par défaut
    Merci beaucoup Mr Oishiiii,

    Après j'ai bien compris le principe, j'ai trouvé la question evident ^^!

    y t il une requête directe qui fait la division (à essayer sur l'access)?

    Cordialement!

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

Discussions similaires

  1. [InterBase 6] Aide Requete SQL
    Par cyrilleT dans le forum Langage SQL
    Réponses: 9
    Dernier message: 20/06/2006, 10h45
  2. aide requete sql access 2000
    Par bab69 dans le forum Requêtes et SQL.
    Réponses: 5
    Dernier message: 13/05/2006, 20h56
  3. Aide requete SQL ou fonction VBA
    Par nykola7 dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 08/03/2006, 17h51
  4. Besoin d'aide requete sql
    Par dinde dans le forum Langage SQL
    Réponses: 1
    Dernier message: 12/10/2005, 09h09
  5. [Aide requete SQL]
    Par viny dans le forum PostgreSQL
    Réponses: 3
    Dernier message: 22/04/2005, 17h00

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