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 :

Limiter le nombre de tuples retournés


Sujet :

Langage SQL

  1. #1
    Membre habitué
    Inscrit en
    Octobre 2005
    Messages
    259
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Octobre 2005
    Messages : 259
    Points : 126
    Points
    126
    Par défaut Limiter le nombre de tuples retournés
    Bonjour,

    J'aimerais savoir si c'est possible et le cas échéant comment faire pour limiter le nombre de tuples qu'une requête retourne.

    Actuellement j'ai la requête suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT * FROM MA_TABLE  ORDER BY DATE
    (rien de très complexe )

    Elle me retourne toutes les lignes qu'il y a dans la table. J'aimerais qu'elle en retourne 10 au maximum.

    Est-ce possible ?

    Merci d'avance

  2. #2
    Membre éprouvé Avatar de Mathusalem
    Profil pro
    IT moa
    Inscrit en
    Décembre 2003
    Messages
    1 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : IT moa

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 008
    Points : 1 067
    Points
    1 067
    Par défaut
    ça dépend du SGBD, je crois me souvenir qu'en Oracle tu peux mettre une variable, en sybase j'utilise
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select top 10 * from matable
    et en mysql il y a le mot clé "limit"

  3. #3
    Membre habitué
    Inscrit en
    Octobre 2005
    Messages
    259
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Octobre 2005
    Messages : 259
    Points : 126
    Points
    126
    Par défaut
    J'utilise Oracle ...

    top ne marche pas avec Oracle.

  4. #4
    Expert éminent
    Homme Profil pro
    Big Data / Freelance EURL
    Inscrit en
    Mars 2003
    Messages
    2 124
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Big Data / Freelance EURL

    Informations forums :
    Inscription : Mars 2003
    Messages : 2 124
    Points : 7 291
    Points
    7 291
    Par défaut
    Il existe rownum sous oracle.
    Mais attention c'est une fonction non déterministe, comme TOP d'ailleurs sous SQL Server, ce qui veut dire que l'ordre n'a aucun sens.

    Edit: ah mais je vois que tu as un tri déterministe sur la date donc ça ferait le filtre déterministe:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT * 
    FROM (SELECT *
          FROM MA_TABLE  
          ORDER BY DATE) 
     WHERE ROWNUM <= 10 ;

  5. #5
    Membre habitué
    Inscrit en
    Octobre 2005
    Messages
    259
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Octobre 2005
    Messages : 259
    Points : 126
    Points
    126
    Par défaut
    Merci mais je comprends pas trop ta requete.
    SELECT *
    FROM (SELECT *
    FROM MA_TABLE
    ORDER BY DATE)
    WHERE ROWNUM <= 10 ;
    A la place du nom de la table tu mets un select ? J'ai essayé et ça marche mais je ne comprends pas le fonctionnement... tu pourrais me donner qq explications ?

    En tout cas, merci beaucoup car c'est ce que je voulais...

  6. #6
    Expert éminent
    Homme Profil pro
    Big Data / Freelance EURL
    Inscrit en
    Mars 2003
    Messages
    2 124
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Big Data / Freelance EURL

    Informations forums :
    Inscription : Mars 2003
    Messages : 2 124
    Points : 7 291
    Points
    7 291
    Par défaut
    En fait tu créés une sous-requête qui va parcourir toute la table et trier par date. Ensuite seulement tu filtres les 10 premières lignes. Là c'est deterministe puisque le rownum ne prend pas les enregistrements tel qu'ils sont rangés techniquement dans la base, mais triés par la date dans la sous-requête.

    Tandis que si tu faisais tout en une seule requête, comme rownum est non déterministe tu risques d'avoir un filtre technique sur les 10 premières lignes "prises au hasard" dans la base et ensuite seulement un tri sur la date.

  7. #7
    Membre habitué
    Inscrit en
    Octobre 2005
    Messages
    259
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Octobre 2005
    Messages : 259
    Points : 126
    Points
    126
    Par défaut
    Ok, super..

    merci beaucoup

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

Discussions similaires

  1. limiter le nombre de lignes retournées par un select
    Par l.saladdin dans le forum MySQL
    Réponses: 1
    Dernier message: 18/02/2010, 16h56
  2. Réponses: 5
    Dernier message: 02/04/2009, 09h24
  3. Réponses: 2
    Dernier message: 17/04/2008, 11h16
  4. Limiter le nombre de lignes retournées
    Par Takusen dans le forum Requêtes
    Réponses: 4
    Dernier message: 05/11/2006, 23h58
  5. Limiter le nombre d'enregistrements retournés
    Par Sydaze dans le forum Bases de données
    Réponses: 2
    Dernier message: 28/04/2005, 12h33

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