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 :

Problème requête SQL


Sujet :

Langage SQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2018
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2018
    Messages : 4
    Par défaut Problème requête SQL
    Bonjour à tous,

    Je suis actuellement en licence informatique, mon prof de BDD aime me cassez la tête et nous venons en plus de commencer ORACLE que je connais mal puisque je n'ai pratiquer que du langage de base SQL. La consigne étant la suivante : Donnez la liste des clients qui sont allés dans toutes les stations.

    Voici la BDD :

    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
    34
    35
    36
    37
    CREATE TABLE Station (nomStation VARCHAR2 (30),
    capacite NUMBER (10) NOT NULL,
    lieu VARCHAR2(30) NOT NULL,
    region VARCHAR2 (30),
    tarif NUMBER (10,2) DEFAULT 0,
    CONSTRAINT cle_station PRIMARY KEY (nomStation),
    CONSTRAINT cle_lieu_region UNIQUE (lieu, region),
    CONSTRAINT nom_region
    CHECK (region IN ('Ocean Indien',
    'Antilles', 'Europe',
    'Ameriques', 'Extreme Orient'))
    );
     
    CREATE TABLE Activite (nomStation VARCHAR2 (30),
    libelle VARCHAR2(30),
    prix NUMBER (10,2) DEFAULT 0,
    PRIMARY KEY (nomStation, libelle),
    FOREIGN KEY (nomStation) REFERENCES Station
    ON DELETE CASCADE
    );
    CREATE TABLE Client (id NUMBER (10),
    nom VARCHAR2(30) NOT NULL,
    prenom VARCHAR2 (30),
    ville VARCHAR2 (30) NOT NULL,
    region VARCHAR2(30),
    solde NUMBER (10,2) DEFAULT 0 NOT NULL,
    PRIMARY KEY (id)
    );
     
    CREATE TABLE Sejour (id NUMBER (10),
    station VARCHAR2 (30),
    debut NUMBER (10),
    nbPlaces NUMBER (4) NOT NULL,
    PRIMARY KEY (id, station, debut),
    FOREIGN KEY (id) REFERENCES Client,
    FOREIGN KEY (station) REFERENCES Station
    ON DELETE CASCADE);
    RAPPEL la consigne : Donnez la liste des clients qui sont allés dans toutes les stations.

    les insert de la table Sejour : ID étant l'id du client ////// station le nom de la station

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    insert into sejour (id, station, debut, nbPlaces) values (10, 'Passac', 1998-07-01, 2);
    insert into sejour (id, station, debut, nbPlaces) values (20, 'Santalba', 1998-08-03, 4);
    insert into sejour (id, station, debut, nbPlaces) values (20, 'Venusa', 1998-08-03, 6);
    insert into sejour (id, station, debut, nbPlaces) values (30, 'Farniente', 1999-06-24, 5);
    insert into sejour (id, station, debut, nbPlaces) values (30, 'Santalba', 1996-08-14, 5);
    insert into sejour (id, station, debut, nbPlaces) values (30, 'Passac', 1998-08-15, 3);
    insert into sejour (id, station, debut, nbPlaces) values (30, 'Venusa', 1998-08-03, 3);
    J'ai exploré quelque pistes mais sans résultat probant :

    RAPPEL DE LA CONSIGNE : Donnez la liste des clients qui sont allés dans toutes les stations. ( la bonne requête devrait nous afficher le nom du client possédant l'ID '30'.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    select nom , nomStation as toutesStation from client C, Station St, sejour S where C.id = S.id and S.station = toutesStation;
     
    select nom
    from client C, sejour S
    where C.id = S.id
    and (select count(distinct(station)) from sejour S, client C where S.id=C.id) = (select count(distinct(nomstation)) from station );
    Si quelqu'un pense avoir une idée quel soit théorique ou pratique je suis demandeur.

    Toutes mes excuse si ce Post n'est pas au bon endroit.

  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
    22 010
    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 : 22 010
    Billets dans le blog
    6
    Par défaut
    Vous n'êtes pas très loin et votre dernière requête est proche d'une des solution classique, car il s'agit d'un exercice sur le division relationnelle...
    En la simplifiant un peu, le comptage devrait correspondre...

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

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

    Informations forums :
    Inscription : Octobre 2002
    Messages : 956
    Par défaut
    Bonjour,
    RAPPEL la consigne : Donnez la liste des clients qui sont allés dans toutes les stations.
    Pourrait se reformuler aussi en il n'existe pas de station qui n'ait pas été visité par ce client.

    Et ca peut te donner une piste pour le transcrire en sql
    Je te laisse chercher un peu.
    Soazig

  4. #4
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2018
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2018
    Messages : 4
    Par défaut
    Merci pour la division relationnelle. J'avais donc bien identifier la méthode mais j'ai oublié le HAVING. Je vous en remerci solutions trouvé grâce a l'article https://sqlpro.developpez.com/cours/divrelationnelle/. J'espère qu'on va ne va pas me jeter de pierre j'avais pourtant bel et bien chercher avec un prof de réseaux pendant presque 1 h.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Select ID from sejour group by id having count(distinct(station)) = (select count(*) from station);

  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
    22 010
    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 : 22 010
    Billets dans le blog
    6
    Par défaut
    Yep !

    Heureusement que mes articles servent de temps en temps !

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

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

Discussions similaires

  1. Problème requête SQL
    Par mandaillou dans le forum Langage SQL
    Réponses: 15
    Dernier message: 03/10/2005, 11h37
  2. Problème requête SQL dans page ASP
    Par rocs dans le forum ASP
    Réponses: 14
    Dernier message: 26/07/2005, 15h38
  3. problème requête sql
    Par psychoBob dans le forum Langage SQL
    Réponses: 1
    Dernier message: 10/07/2005, 17h50
  4. problème requête sql
    Par perfectdams dans le forum Requêtes et SQL.
    Réponses: 5
    Dernier message: 21/06/2005, 18h09
  5. Réponses: 8
    Dernier message: 23/10/2003, 16h22

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