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 :

proposition algorithme division relationnelle : peut-on le simplifier?


Sujet :

Langage SQL

  1. #1
    Membre régulier
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2008
    Messages
    207
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2008
    Messages : 207
    Points : 114
    Points
    114
    Par défaut proposition algorithme division relationnelle : peut-on le simplifier?
    Bonjour,

    je viens d'écrire un algorithme SQL d'une division (on demande les clients qui ont visité toutes les stations) mais je me demande s'il n'y avait pas plus élégant ou efficace que ce que j'ai trouvé:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    select c.nom
    from sejour s
                 JOIN  
                     client c 
    on c.id = s.idclient
    having count(c.nom) = 
                          (select count(nomStation) from station);

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    TABLE SEJOUR
    idClient   station
    10	     Passac	
    30	     Santalba	
    20	     Santalba	
    30	     Passac	
    30	     Venusa	
    20	     Venusa	
    30	     Farniente	
    10	     Farniente	
    10	     Venusa
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    TABLE CLIENT
    id      Nom
    10	Fogg	       	
    20	Pascal	
    30	Kerouac
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    TABLE STATION
    NomStation
    Venusa
    Farniente
    Santalba
    Passac
    Qu'en pensez-vous?

    Johnny

  2. #2
    Membre régulier
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2008
    Messages
    207
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2008
    Messages : 207
    Points : 114
    Points
    114
    Par défaut
    Finalement, je viens de me rendre compte que c'était un coup de chance que ça marche! Kerouac apparaissait 4 fois, il y avait 4 stations... mais si je change la table SEJOUR et que je fais en sorte que Kerouac voyage 4 fois mais en n'allant que dans 3 des 4 stations, finalement, ça me donne aussi le même résultat.

    Bon, je reprends tout à zéro!

  3. #3
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut
    Pour utiliser HAVING, il faut GROUP BY. Etonnant que votre requête aie fonctionné !

    Sinon vous n'êtes pas très loin de la solution.
    Apparemment, vous voulez encore chercher alors je vous donnerai ma solution plus tard si vous ne trouvez pas.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  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 763
    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 763
    Points : 52 554
    Points
    52 554
    Billets dans le blog
    5
    Par défaut
    Elle est effectivement fausse. Lisez l'article que j'ai écrit à ce sujet.
    http://sqlpro.developpez.com/cours/divrelationnelle/
    Votre approche est la division exacte. Il y a aussi l'approchée avec le double NOT EXISTS.

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

  5. #5
    Membre régulier
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2008
    Messages
    207
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2008
    Messages : 207
    Points : 114
    Points
    114
    Par défaut
    merci pour vos réponses. Pour le moment, je laisse décanter car je dois me concentrer sur les révisions de deux autres partiels (java et système d'exploitation) mais je tenterai de résoudre cet exercice dans les prochains jours.

    Merci encore pour les indices donnés.

Discussions similaires

  1. segmentation avec l'algorithme division fusion
    Par Imène_23 dans le forum Traitement d'images
    Réponses: 8
    Dernier message: 13/02/2012, 10h49
  2. La division relationnelle (exists) ?
    Par delphino7 dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 10/09/2010, 00h45
  3. [Division relationnelle] Comparaison sur plusieurs tuples
    Par jowsuket dans le forum Langage SQL
    Réponses: 4
    Dernier message: 30/04/2008, 15h49
  4. 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