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 :

demande d'aide pour comprendre une requete SQL


Sujet :

Langage SQL

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    141
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Tunisie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 141
    Points : 59
    Points
    59
    Par défaut demande d'aide pour comprendre une requete SQL
    salut,

    j'arrive pas à comprendre le code de cette requette sql
    sachant que j'ai deux tables dans ma base:
    l'une est pinglog(host,recordingdate,status)
    l'autre est hostlist(id,host,showinonitor,ishost)
    si quelqu'un peut m'aider à comprendre de quoi il s'agit..
    parexemple,pourqoi il fait select.. as ALLping ? puis INNER JOIN Lastping ? dou il sort le lastping..
    je pensais que le inner join est pour faire la jointure entre deux tables..


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT AllPing.Host, AllPing.RecordingDate, AllPing.Status FROM PingLog AS AllPing
     INNER JOIN (SELECT Host, MAX(RecordingDate) AS LastRecordingDate FROM PingLog GROUP BY Host) LastPing
       ON AllPing.Host=LastPing.Host AND AllPing.RecordingDate=LastPing.LastRecordingDate
          INNER JOIN HostList ON HostList.Host=AllPing.Host
          WHERE HostList.ShowInMonitor='Y' ORDER BY Host
    merci d'avance.

  2. #2
    Membre éprouvé Avatar de shaun_the_sheep
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Octobre 2004
    Messages
    1 619
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Enseignement

    Informations forums :
    Inscription : Octobre 2004
    Messages : 1 619
    Points : 996
    Points
    996
    Par défaut
    Sur quel type de base de donnée tu travaille ? Oracle, MySql SqlServer ?

    peux tu préciser ?

  3. #3
    Membre émérite

    Profil pro
    Inscrit en
    Mars 2005
    Messages
    1 683
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 683
    Points : 2 579
    Points
    2 579
    Par défaut
    T'as une table avec des pings, des host et un status.

    Ca renvoie pour chaque host le dernier status en date.

  4. #4
    rsc
    rsc est déconnecté
    Membre éprouvé
    Avatar de rsc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2004
    Messages
    711
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 73
    Localisation : France, Côte d'Or (Bourgogne)

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

    Informations forums :
    Inscription : Juin 2004
    Messages : 711
    Points : 918
    Points
    918
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ...(SELECT Host, MAX(RecordingDate) AS LastRecordingDate FROM PingLog GROUP BY Host) LastPing...
    Sous-requête qui ramène pour chaque Host la dernière RecordingDate. Cette sous-requête est "aliassée" LastPing pour pouvoir être utilisée dans la requête principale. A partir de là, elle est considérée comme une table nommée LastPing, et ayant pour champs Host et LastRecordingDate.

    Ensuite, on fait la jointure avec PingLog ("aliassée" cette fois AllPing pour bien faire la distinction. Ce n'est peut-être pas indispensable, mais à mon sens, ça clarifie.) pour ramener le Status qui pour chaque Host, correspond à la dernière RecordingDate (d'où la jointure sur Host et sur LastRecordingDate)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ...INNER JOIN HostList ON HostList.Host=AllPing.Host
          WHERE HostList.ShowInMonitor='Y' ...
    Jointure sur HostList pour filtrer sur les Host pour lesquels ShowInMonitor est à "Y"

    N.B. : En gros, pour comprendre que ce fait une requête, il faut la prendre "à l'envers" : d'abord les tables sources : les FROM, les JOIN et les "faux WHERE" qui réalisent en fait des jointures. Là si on tombe sur des sous-requêtes, on les analyse en premier. Ensuite, on regarde les "vrais WHERE", et enfin les SELECT.

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    141
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Tunisie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 141
    Points : 59
    Points
    59
    Par défaut
    Citation Envoyé par beegood Voir le message
    Sur quel type de base de donnée tu travaille ? Oracle, MySql SqlServer ?

    peux tu préciser ?

    Sql server..

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    141
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Tunisie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 141
    Points : 59
    Points
    59
    Par défaut
    Citation Envoyé par rsc Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ...(SELECT Host, MAX(RecordingDate) AS LastRecordingDate FROM PingLog GROUP BY Host) LastPing...
    Sous-requête qui ramène pour chaque Host la dernière RecordingDate. Cette sous-requête est "aliassée" LastPing pour pouvoir être utilisée dans la requête principale. A partir de là, elle est considérée comme une table nommée LastPing, et ayant pour champs Host et LastRecordingDate.

    Ensuite, on fait la jointure avec PingLog ("aliassée" cette fois AllPing pour bien faire la distinction. Ce n'est peut-être pas indispensable, mais à mon sens, ça clarifie.) pour ramener le Status qui pour chaque Host, correspond à la dernière RecordingDate (d'où la jointure sur Host et sur LastRecordingDate)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ...INNER JOIN HostList ON HostList.Host=AllPing.Host
          WHERE HostList.ShowInMonitor='Y' ...
    Jointure sur HostList pour filtrer sur les Host pour lesquels ShowInMonitor est à "Y"

    N.B. : En gros, pour comprendre que ce fait une requête, il faut la prendre "à l'envers" : d'abord les tables sources : les FROM, les JOIN et les "faux WHERE" qui réalisent en fait des jointures. Là si on tombe sur des sous-requêtes, on les analyse en premier. Ensuite, on regarde les "vrais WHERE", et enfin les SELECT.


    merci beaucoup pour votre explication ! tres précis le monsieur

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

Discussions similaires

  1. Besoin d'aide pour comprendre une requête SQL
    Par MAXJEREM dans le forum SQL
    Réponses: 0
    Dernier message: 12/04/2011, 13h46
  2. aide pour formuler une requete sql
    Par viny dans le forum PostgreSQL
    Réponses: 11
    Dernier message: 01/03/2008, 12h20
  3. aide pour créer une requete sql
    Par DonKnacki dans le forum Langage SQL
    Réponses: 11
    Dernier message: 07/02/2008, 18h17
  4. demande d'aide pour construire une requete
    Par moabomotal dans le forum Langage SQL
    Réponses: 2
    Dernier message: 27/08/2007, 10h38
  5. demande d'aide pour faire un requete sql
    Par carmen256 dans le forum Requêtes
    Réponses: 3
    Dernier message: 14/04/2006, 09h50

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