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

SQL Oracle Discussion :

SELECT à partir du ROWNUM


Sujet :

SQL Oracle

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    6
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Mars 2002
    Messages : 6
    Points : 11
    Points
    11
    Par défaut [Résolu] SELECT à partir du ROWNUM
    Bonjour

    Je recherche à faire des selection à partir du RowNum.
    Par exemple:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT * 
    FROM ma_table
    where ROWNUM BETWEEN '1' AND '10'
    Ceci fonctionne bien
    mais si j'essaie de faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT * 
    FROM ma_table
    where ROWNUM BETWEEN '10' AND '20'
    J'ai droit au message :

    Apparement, on ne peut faire des SELECT qu'en commencant le ROWNUM à 0...

    Y a t'il un moyen de passer outre cela :

    De même, est il possible de faire cette selection de ROWNUM = r à la fin de la table, du genre :

    SELECT *
    FROM ma_table
    where ROWNUM BETWEEN '10' AND MAX(ROWNUM)


    Merci d'avance .

  2. #2
    Membre expérimenté

    Profil pro
    Inscrit en
    Mai 2003
    Messages
    412
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mai 2003
    Messages : 412
    Points : 1 326
    Points
    1 326
    Par défaut
    Faut passer par une sous requete

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT a.*
    FROM (SELECT t.*, rownum numb 
    FROM ma_table ) a
    WHERE a.numb BETWEEN 1 AND 10;

  3. #3
    Futur Membre du Club
    Inscrit en
    Septembre 2002
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Septembre 2002
    Messages : 2
    Points : 5
    Points
    5
    Par défaut
    Tout cela est normal.

    La première ligne retourné par ton select à toujours comme rownum 1 (rownum 0 n'existe pas) donc ton "between 10 and 20" te ramènera aucun enregistrement: la condition sera fausse pour la première ligne (rownum 1) puis pour la suivante (qui est devenue la première) et ainsi de suite donc, in fine, aucune ligne ne sera sélectionnée.
    Il faut toujours utilisé la condition < (ou <= ) avec rownum (between 1 and xx fonctionne aussi).
    Pour contourner cela tu peux ajouter rownum à ta selection et selectionner ensuite la plage voulue (le "and rownum < 20" n'est pas indispensable):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    SELECT col...
    FROM (SELECT col....,ROWNUM AS NUMERO 
              FROM ...
              WHERE ... AND ROWNUM <20)
    WHERE NUMERO BETWEEN 10 AND 20;

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    6
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Mars 2002
    Messages : 6
    Points : 11
    Points
    11
    Par défaut
    Merci beaucoup pour ta réponse, ça marche très bien !

    Je dirais tout de même un petit truc à prpos du "WHERE ROWNUM < 20" :
    Tout d'abord il faudrait au moins que ce soit un "<=" sinon on fait sauter la dernière valeur et on n'a plus que 9 rows dans le résultat.
    Et même je ne suis pas sûr qu'il soit réellement nécessaire.

    Encore Merci !

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    6
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Mars 2002
    Messages : 6
    Points : 11
    Points
    11
    Par défaut
    Oups !

    Autant pour moi au niveau du WHERE.
    Ca peut permettre de limiter les recherches...
    Je me pause juste une question au niveau des perfs :
    Vaut il mieux faire une clause WHERE pour faire vérifier que ça ne d'passe pas et donc limiter les recherches ou ne pas en mettre du tout et ne pas avoir à faire un test supplémentaire...
    Il faut surement voir ça sur un grands nombre de comptes ...

    Encore Merci !

  6. #6
    Membre actif
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Mars 2002
    Messages
    192
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Mars 2002
    Messages : 192
    Points : 252
    Points
    252
    Par défaut
    Citation Envoyé par MrSimon
    Je me pause juste une question au niveau des perfs :
    Vaut il mieux faire une clause WHERE pour faire vérifier que ça ne d'passe pas et donc limiter les recherches ou ne pas en mettre du tout et ne pas avoir à faire un test supplémentaire...
    Il faut surement voir ça sur un grands nombre de comptes ...
    Personnelement j'ai rien compris à ce passage donc moi aussi je vais me pauser là

    McFoggy
    Quelques tips Java & autres : mon blog

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

Discussions similaires

  1. [MySQL] Aide select à partir d'une table
    Par carlosdz dans le forum PHP & Base de données
    Réponses: 11
    Dernier message: 28/06/2006, 22h47
  2. Réponses: 5
    Dernier message: 19/06/2006, 23h22
  3. Récupération d'un select à partir de l'évènement OnChange
    Par c_may dans le forum Général JavaScript
    Réponses: 15
    Dernier message: 11/05/2006, 17h31
  4. Remplir deux listes select à partir d'une autre
    Par Raduris dans le forum Général JavaScript
    Réponses: 8
    Dernier message: 23/11/2005, 15h29
  5. Select à partir d'un debut de numéro ...
    Par Le_Phasme dans le forum Langage SQL
    Réponses: 4
    Dernier message: 01/03/2005, 13h41

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