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 :

Division relationnelle


Sujet :

Langage SQL

  1. #1
    Nouveau membre du Club
    Étudiant
    Inscrit en
    Novembre 2009
    Messages
    74
    Détails du profil
    Informations personnelles :
    Âge : 36

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2009
    Messages : 74
    Points : 39
    Points
    39
    Par défaut Division relationnelle
    scp j'ai des difficulté à comprendre la division relationnel avec l'opérateur exists
    j'ai ce schéma relationnel:
    CLIENT(code,nom,prenom,localite,num_tel,categorie)
    COMMANDE(num_cmd,#code,date_cmd)
    ARTICLE(ref_article,designation,prix_ht,tva)
    ligne_cmd(#num_cmd,#ref_article,quantite,remise)
    CHIFFRE_AFFAIRE(jouree,montant)

    ils ont demandés d'écrire une requete permettant d'afficher les produits qui sont commandés dans toutes les localités
    il s'agit de la division relatillele j'ai écrit cette requete elle est fonctionnelle
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    select ref_article,count(ref_article)
     
    from(select localite,ref_article
            from ligne_cmd,article,commande,client
            where client.code=commande.code and commande.num_cmd=ligne_cmd.num_cmd and ligne_cmd.ref_article=article.ref_article
            group by localite,ref_article)
     
    group by ref_article
    having count(ref_article)=(select count(distinct localite) from client);
    mais je cherche a une solution avec exists étant donné qu'ils n'ont pas donner une table localité

  2. #2
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 768
    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 768
    Points : 52 719
    Points
    52 719
    Billets dans le blog
    5
    Par défaut
    Pour l'expliquer à mes élèves, je prends l'accent marseillais et j'imite Raimu dans la trilogie Pagnolesque… :

    " Eh pauvre couillon, je te certifie, heu… qu'il n'existe, heu... pas un seul produit, heu... pour lequel il n'existe pas, heu... une seule ville, heu... dans laquelle, heu... tu va trouver ce produit !"



    Notez dans ma phrase le double NOT EXISTS....

    Au passage, votre requête originale devrait être récrite comme suit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    SELECT ref_article
    FROM   (SELECT DISTINCT localite, ref_article
            FROM   ligne_cmd AS LC
                   JOIN article AS A    ON LC.ref_article = A.ref_article
                   JOIN commande AS CD  ON C.num_cmd = LC.num_cmd
                   JOIN client AS C     ON C.code = CD.code) AS T
    GROUP  BY ref_article
    HAVING COUNT(DISTINCT ref_article) = (SELECT count(distinct localite) 
                                          FROM   client);
    1) deux GROUP BY inutiles
    2) absence de DISTINC dans le premier comptage
    3) les jointures s'écrivent avec des JOIN depuis la norme SQL 2 datant de 1992... presque 40 ans !!! Recyclez votre prof s'il vous a enseigné cette abomination….

    A +

    PS lisez mon cours sur le sujet : https://sqlpro.developpez.com/cours/divrelationnelle/
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  3. #3
    Nouveau membre du Club
    Étudiant
    Inscrit en
    Novembre 2009
    Messages
    74
    Détails du profil
    Informations personnelles :
    Âge : 36

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2009
    Messages : 74
    Points : 39
    Points
    39
    Par défaut
    mais pourquoi le having s'il n'existe pas de group by ?

  4. #4
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 768
    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 768
    Points : 52 719
    Points
    52 719
    Billets dans le blog
    5
    Par défaut
    Citation Envoyé par emna1987 Voir le message
    mais pourquoi le having s'il n'existe pas de group by ?
    Erreur de ma part en copiant les lignes… Rectifiée dans le message original !

    Désolé

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

Discussions similaires

  1. Réponses: 1
    Dernier message: 04/07/2012, 09h08
  2. La division relationnelle (exists) ?
    Par delphino7 dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 10/09/2010, 00h45
  3. Réponses: 4
    Dernier message: 03/01/2009, 14h15
  4. [Division relationnelle] Comparaison sur plusieurs tuples
    Par jowsuket dans le forum Langage SQL
    Réponses: 4
    Dernier message: 30/04/2008, 15h49
  5. Division relationnelle : problème avec les doublons
    Par ced dans le forum Langage SQL
    Réponses: 4
    Dernier message: 11/12/2007, 16h49

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