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 bande dessinée


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 Requête SQL bande dessinée
    Bonjour à tous,
    j'ai le schéma relationnel suivant:

    Auteur(NumAuteur,NomAuteur,Nationalité)
    BD(NumBD,NomAlbum,Genre,Editeur,NumDessinateur#,NumScénariste#)
    Magasin(NumMag,NomMag,adresse,Téléphone,MatriculeResponsable#)
    catalogue(NumMag#,NumBD#,StockInitail,NBExempDispo,PrixVente)
    Employé(Matricule,NomEmp,Grade,salaire,NumMag#)

    je suis bloquée avec la requête sql suivante:
    Donner Le nom et l'adresse des magasins ou on peut acquérir immédiatement un exemplaire de toutes les bandes dessinées.
    est ce que quelqu'un peut m'aider pour écrire cette requête sql et merci!
    moi j'ai essayé cette requête
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    select NomMag,adresse
    from catalogue,Magasin
    where catalogue.NumMag=catalogue.NumMag and NumMag not in(select NumMag 
                                                                                                       from catalogue
                                                                                                          where stockInitial=0);

  2. #2
    Membre averti
    Homme Profil pro
    Ingénieur en études décisionnelles
    Inscrit en
    Février 2013
    Messages
    134
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Ingénieur en études décisionnelles

    Informations forums :
    Inscription : Février 2013
    Messages : 134
    Points : 351
    Points
    351
    Par défaut
    Bonsoir,

    Relis bien ta condition de jointure. Tu as "catalogue.NumMag=catalogue.NumMag". Tu ne joins pas ta table Magasin

  3. #3
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 772
    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 772
    Points : 52 737
    Points
    52 737
    Billets dans le blog
    5
    Par défaut
    Citation Envoyé par emna1987 Voir le message
    Donner Le nom et l'adresse des magasins ou on peut acquérir immédiatement un exemplaire de toutes les bandes dessinées.
    Il s'agit ni plus ni moins d'un cas de division relationnelle.

    Lisez mon cours à ce sujet : http://sqlpro.developpez.com/cours/divrelationnelle/

    Au besoin, offrez vous mon livre sur le langage SQL
    Nom : Couverture SQL Synthex 4e ed - 500.jpg
Affichages : 452
Taille : 77,8 Ko

    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/ * * * * *

  4. #4
    Membre éprouvé
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    956
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 956
    Points : 1 199
    Points
    1 199
    Par défaut
    Bonjour,
    Donner Le nom et l'adresse des magasins ou on peut acquérir immédiatement un exemplaire de toutes les bandes dessinées.
    Pour moi acquerir immédiatement un exemplaire, correspond à il y a un exemplaire disponible de toutes les bd dans le magasin.

    Toutes les bd correspond à toutes les bd qui se trouve dans la table BD. Or ta requête ne mentionne pas cette table.

    Je reformule la question ainsi.
    Donner le nom et l'adresse des magasins pour lesquels il n'existe pas de BD qui ne soient pas disponibles.
    A toi de mettre cela en SQL, car ici on aide les gens, on ne fait pas leur devoir.
    PS: une autre piste est de compter toutes les bd et toutes les bd disponibles.
    Cordialement
    Soazig

  5. #5
    Expert éminent
    Avatar de StringBuilder
    Homme Profil pro
    Chef de projets
    Inscrit en
    Février 2010
    Messages
    4 154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2010
    Messages : 4 154
    Points : 7 403
    Points
    7 403
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par SQLpro Voir le message
    Il s'agit ni plus ni moins d'un cas de division relationnelle.

    Lisez mon cours à ce sujet : http://sqlpro.developpez.com/cours/divrelationnelle/

    Au besoin, offrez vous mon livre sur le langage SQL
    Nom : Couverture SQL Synthex 4e ed - 500.jpg
Affichages : 452
Taille : 77,8 Ko

    A +
    Bonjour,

    Cette solution n'est-elle pas bonne ???

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    select m.nummag, m.nommag
    from bd b
    cross join magasin m
    left outer join catalogue c on c.nummag = m.nummag and c.numbd = b.numbd and c.nbexempdispo > 0
    group by m.nummag
    having count(b.numbd) = count(c.numbd);

    Avec mon jeu de test, elle fonctionne pourtant (y compris en mettant des lignes polluantes dans la table des magasins et des catalogues) :

    Code sql : 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
    47
    48
    49
    50
     
    with bd (numbd, nomalbum)
    as
    (
    	select 1, 'Gare aux gaffes du gars gonflé'
    	union all
    	select 2, 'Le cas Lagaffe'
    	union all
    	select 3, 'Gaffes, bévues et boulettes'
    ),
    magasin (nummag, nommag)
    as
    (
    	select 1, 'Paris'
    	union all
    	select 2, 'Dijon'
    	union all
    	select 3, 'Lyon'
    	union all
    	select 4, 'Nice'
    ),
    catalogue (nummag, numbd, nbexempdispo)
    as
    (
    	select 1, 1, 0
    	union all
    	select 1, 2, 3
    	union all
    	select 1, 3, 1
    	union all
    	select 2, 1, 3
    	union all
    	select 2, 3, 10
    	union all
    	select 3, 1, 4
    	union all
    	select 3, 2, 5
    	union all
    	select 3, 3, 10
    	union all
    	select 3, 4, 9
    	union all
    	select 5, 1, 4
    )
    select m.nummag, m.nommag
    from bd b
    cross join magasin m
    left outer join catalogue c on c.nummag = m.nummag and c.numbd = b.numbd and c.nbexempdispo > 0
    group by m.nummag, m.nommag
    having count(b.numbd) = count(c.numbd);

    Explication :

    Le CROSS JOIN va permettre de lister, pour chaque magasin, ce qu'il devrait avoir en rayon (l'ensemble des BD).
    Ensuite, pour chaque "rayon hypothétique", on va mettre en correspondance (LEFT OUTER JOIN) le rayon réel, en filtrant les lignes où il n'y a pas de disponibilité.

    Il suffit alors, pour chaque magasin, de compter le nombre de BD qui devraient être présentes, et de le comparer avec le nombre de BD réellement disponibles.

    C'est pas mieux que des sous-requêtes dans tous les sens comme dans l'article de SQLPro ?
    On ne jouit bien que de ce qu’on partage.

Discussions similaires

  1. [ DB2 ] [ AS400] requête sql
    Par zinaif dans le forum DB2
    Réponses: 6
    Dernier message: 23/08/2008, 19h42
  2. Utilisation de MAX dans une requête SQL
    Par Evil onE dans le forum Langage SQL
    Réponses: 7
    Dernier message: 15/06/2004, 18h38
  3. A propos d'une requête SQL sur plusieurs tables...
    Par ylebihan dans le forum Langage SQL
    Réponses: 2
    Dernier message: 14/09/2003, 16h26
  4. PB requète SQL avec Interbase
    Par missllyss dans le forum InterBase
    Réponses: 2
    Dernier message: 15/07/2003, 11h37
  5. Requête SQL
    Par Leludo dans le forum Langage SQL
    Réponses: 2
    Dernier message: 17/02/2003, 16h44

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