OVH Cloud OVH Cloud

Question SQL

18 réponses
Avatar
Saulot
Bonjour,
J'ai une requete assez complexe à me fader.
La ou ca coince, c'est lorsque je dois recuperer uniquement la première
ligne d'une table par rapport à une autre.

Ma question enf ait est la suivante :
Est-il possible de préciser dans une jointure le nombre de ligne que l'on
souhaite récupérer ?

8 réponses

1 2
Avatar
Bismark Prods
lol, tu dois pas etre correctement documenté ! suffit de faire :

Select xxx from yyy LIMIT 0, 30


"BossHog" a écrit dans le message de
news:
Désoler mais j'ai chercher dans "SQL server books online" et NIET pas de
LIMIT
j'ai essayer des query et pareil sa pete ??
alors je serai currieu de voir une démo de LIMIT
@+
Boss



"Bismark Prods" wrote in message
news:#
> Si vous ne sélectionnez que quelques lignes avec LIMIT , SQL va utiliser
les
> index dans certains cas, où il aurait préféré utiliser un scan de table
> complet.
> Si vous utilisez LIMIT # avec la clause ORDER BY , SQL va arrêter de


trier
> dès qu'il a trouvé la première # au lieu de trier toute la table.
> Lorsque vous combinez LIMIT # avec DISTINCT , SQL va s'arrêter dès qu'il


a
> trouvé # lignes distinctes.
> Dans certains cas, la clause GROUP BY peut être appliquée en lisant les
clés
> dans l'ordre (ou en faisant un tri sur la clé), puis en calculant un
> sommaire, jusqu'à ce que la clé soient modifiée. Dans ce cas, LIMIT # ne
va
> pas appliquer les éléments non nécessaires de la clause GROUP BY s.
> Aussitôt que SQL a envoyé les premières # lignes au client, il annule le
> reste de la requête (si vous n'utilisez pas la fonction
> SQL_CALC_FOUND_ROWS ).
> LIMIT 0 va toujours retourner rapidement un résultat vide. C'est


pratique
> pour vérifier une requête et lire les types de colonnes du résultat,


sans
> exécuter réellement la requête.
> Lorsque le serveur utilise des tables temporaire pour résoudre les
requêtes,
> la clause LIMIT # est utilisée pour calculer l'espace nécessaire.
>
>
> "Bismark Prods" a écrit dans le message de
> news:
> > Alors tu peux me le payer !
> >
> > "BossHog" a écrit dans le message


de
> > news:
> > > Salut ,
> > > avant de gueuler regarde ta doc SQL (SQL server 2000) et si tu


trouve
> > LIMIT
> > > j'te paye le champagne
> > > @+
> > > Boss
> > > "Bismark Prods" wrote in message
> > > news:
> > > > non mais est-ce que je parle dans le vide ? c'est le mot clé LIMIT


!
> > > >
> > > > Select x from y where z=a LIMIT 0,30
> > > >
> > > > cela ne donne que les trente premiere réponse
> > > >
> > > > "Zoury" a écrit dans le message de
> > > > news:
> > > > > Salut Saulot! :O)
> > > > >
> > > > > je ne sais pas si ca peux t'aider, mais la requete suivante :
> > > > >
> > > > > select top 5 nom from personne
> > > > >
> > > > > sort les 5 premier noms trouves..
> > > > >
> > > > > si ce n'est pas ce que tu cherches, donne plus de details ainsi
> qu'un
> > > > > exemple de ce que tu souhaites.. ;O)
> > > > >
> > > > > --
> > > > > Cordialement
> > > > > Yanick Lefebvre - MVP pour Visual Basic
> > > > > http://faq.vb.free.fr/?rubrique=0 - http://www.mvps.org/vbnet/
> > > > > http://www.mentalis.org/agnet/apiguide.shtml -
> http://www.mztools.com/
> > > > > "Saulot" wrote in message
> > > > > news:3f8bede1$0$13276$
> > > > > > Bonjour,
> > > > > > J'ai une requete assez complexe à me fader.
> > > > > > La ou ca coince, c'est lorsque je dois recuperer uniquement la
> > > première
> > > > > > ligne d'une table par rapport à une autre.
> > > > > >
> > > > > > Ma question enf ait est la suivante :
> > > > > > Est-il possible de préciser dans une jointure le nombre de


ligne
> que
> > > > l'on
> > > > > > souhaite récupérer ?
> > > > > >
> > > > > >
> > > > >
> > > > >
> > > >
> > > >
> > >
> > >
> >
> >
>
>




Avatar
Bismark Prods
au fait tu connais Mireille Dumas ?

"BossHog" a écrit dans le message de
news:
Désoler mais j'ai chercher dans "SQL server books online" et NIET pas de
LIMIT
j'ai essayer des query et pareil sa pete ??
alors je serai currieu de voir une démo de LIMIT
@+
Boss



"Bismark Prods" wrote in message
news:#
> Si vous ne sélectionnez que quelques lignes avec LIMIT , SQL va utiliser
les
> index dans certains cas, où il aurait préféré utiliser un scan de table
> complet.
> Si vous utilisez LIMIT # avec la clause ORDER BY , SQL va arrêter de


trier
> dès qu'il a trouvé la première # au lieu de trier toute la table.
> Lorsque vous combinez LIMIT # avec DISTINCT , SQL va s'arrêter dès qu'il


a
> trouvé # lignes distinctes.
> Dans certains cas, la clause GROUP BY peut être appliquée en lisant les
clés
> dans l'ordre (ou en faisant un tri sur la clé), puis en calculant un
> sommaire, jusqu'à ce que la clé soient modifiée. Dans ce cas, LIMIT # ne
va
> pas appliquer les éléments non nécessaires de la clause GROUP BY s.
> Aussitôt que SQL a envoyé les premières # lignes au client, il annule le
> reste de la requête (si vous n'utilisez pas la fonction
> SQL_CALC_FOUND_ROWS ).
> LIMIT 0 va toujours retourner rapidement un résultat vide. C'est


pratique
> pour vérifier une requête et lire les types de colonnes du résultat,


sans
> exécuter réellement la requête.
> Lorsque le serveur utilise des tables temporaire pour résoudre les
requêtes,
> la clause LIMIT # est utilisée pour calculer l'espace nécessaire.
>
>
> "Bismark Prods" a écrit dans le message de
> news:
> > Alors tu peux me le payer !
> >
> > "BossHog" a écrit dans le message


de
> > news:
> > > Salut ,
> > > avant de gueuler regarde ta doc SQL (SQL server 2000) et si tu


trouve
> > LIMIT
> > > j'te paye le champagne
> > > @+
> > > Boss
> > > "Bismark Prods" wrote in message
> > > news:
> > > > non mais est-ce que je parle dans le vide ? c'est le mot clé LIMIT


!
> > > >
> > > > Select x from y where z=a LIMIT 0,30
> > > >
> > > > cela ne donne que les trente premiere réponse
> > > >
> > > > "Zoury" a écrit dans le message de
> > > > news:
> > > > > Salut Saulot! :O)
> > > > >
> > > > > je ne sais pas si ca peux t'aider, mais la requete suivante :
> > > > >
> > > > > select top 5 nom from personne
> > > > >
> > > > > sort les 5 premier noms trouves..
> > > > >
> > > > > si ce n'est pas ce que tu cherches, donne plus de details ainsi
> qu'un
> > > > > exemple de ce que tu souhaites.. ;O)
> > > > >
> > > > > --
> > > > > Cordialement
> > > > > Yanick Lefebvre - MVP pour Visual Basic
> > > > > http://faq.vb.free.fr/?rubrique=0 - http://www.mvps.org/vbnet/
> > > > > http://www.mentalis.org/agnet/apiguide.shtml -
> http://www.mztools.com/
> > > > > "Saulot" wrote in message
> > > > > news:3f8bede1$0$13276$
> > > > > > Bonjour,
> > > > > > J'ai une requete assez complexe à me fader.
> > > > > > La ou ca coince, c'est lorsque je dois recuperer uniquement la
> > > première
> > > > > > ligne d'une table par rapport à une autre.
> > > > > >
> > > > > > Ma question enf ait est la suivante :
> > > > > > Est-il possible de préciser dans une jointure le nombre de


ligne
> que
> > > > l'on
> > > > > > souhaite récupérer ?
> > > > > >
> > > > > >
> > > > >
> > > > >
> > > >
> > > >
> > >
> > >
> >
> >
>
>




Avatar
BossHog
Laisse dormir mireille mon lapin ...........lol
ta syntaxe ne marche pas sous SQL server 2000 , je vien de tester.
tu serai pas sous Oracle des fois.............................;-)
en tout cas sa m'à bien fait rigoler, sans rancune
@+
Boss Hog
"Bismark Prods" wrote in message
news:
au fait tu connais Mireille Dumas ?

"BossHog" a écrit dans le message de
news:
> Désoler mais j'ai chercher dans "SQL server books online" et NIET pas


de
> LIMIT
> j'ai essayer des query et pareil sa pete ??
> alors je serai currieu de voir une démo de LIMIT
> @+
> Boss
>
>
>
> "Bismark Prods" wrote in message
> news:#
> > Si vous ne sélectionnez que quelques lignes avec LIMIT , SQL va


utiliser
> les
> > index dans certains cas, où il aurait préféré utiliser un scan de


table
> > complet.
> > Si vous utilisez LIMIT # avec la clause ORDER BY , SQL va arrêter de
trier
> > dès qu'il a trouvé la première # au lieu de trier toute la table.
> > Lorsque vous combinez LIMIT # avec DISTINCT , SQL va s'arrêter dès


qu'il
a
> > trouvé # lignes distinctes.
> > Dans certains cas, la clause GROUP BY peut être appliquée en lisant


les
> clés
> > dans l'ordre (ou en faisant un tri sur la clé), puis en calculant un
> > sommaire, jusqu'à ce que la clé soient modifiée. Dans ce cas, LIMIT #


ne
> va
> > pas appliquer les éléments non nécessaires de la clause GROUP BY s.
> > Aussitôt que SQL a envoyé les premières # lignes au client, il annule


le
> > reste de la requête (si vous n'utilisez pas la fonction
> > SQL_CALC_FOUND_ROWS ).
> > LIMIT 0 va toujours retourner rapidement un résultat vide. C'est
pratique
> > pour vérifier une requête et lire les types de colonnes du résultat,
sans
> > exécuter réellement la requête.
> > Lorsque le serveur utilise des tables temporaire pour résoudre les
> requêtes,
> > la clause LIMIT # est utilisée pour calculer l'espace nécessaire.
> >
> >
> > "Bismark Prods" a écrit dans le message de
> > news:
> > > Alors tu peux me le payer !
> > >
> > > "BossHog" a écrit dans le message
de
> > > news:
> > > > Salut ,
> > > > avant de gueuler regarde ta doc SQL (SQL server 2000) et si tu
trouve
> > > LIMIT
> > > > j'te paye le champagne
> > > > @+
> > > > Boss
> > > > "Bismark Prods" wrote in message
> > > > news:
> > > > > non mais est-ce que je parle dans le vide ? c'est le mot clé


LIMIT
!
> > > > >
> > > > > Select x from y where z=a LIMIT 0,30
> > > > >
> > > > > cela ne donne que les trente premiere réponse
> > > > >
> > > > > "Zoury" a écrit dans le message de
> > > > > news:
> > > > > > Salut Saulot! :O)
> > > > > >
> > > > > > je ne sais pas si ca peux t'aider, mais la requete suivante :
> > > > > >
> > > > > > select top 5 nom from personne
> > > > > >
> > > > > > sort les 5 premier noms trouves..
> > > > > >
> > > > > > si ce n'est pas ce que tu cherches, donne plus de details


ainsi
> > qu'un
> > > > > > exemple de ce que tu souhaites.. ;O)
> > > > > >
> > > > > > --
> > > > > > Cordialement
> > > > > > Yanick Lefebvre - MVP pour Visual Basic
> > > > > > http://faq.vb.free.fr/?rubrique=0 - http://www.mvps.org/vbnet/
> > > > > > http://www.mentalis.org/agnet/apiguide.shtml -
> > http://www.mztools.com/
> > > > > > "Saulot" wrote in message
> > > > > > news:3f8bede1$0$13276$
> > > > > > > Bonjour,
> > > > > > > J'ai une requete assez complexe à me fader.
> > > > > > > La ou ca coince, c'est lorsque je dois recuperer uniquement


la
> > > > première
> > > > > > > ligne d'une table par rapport à une autre.
> > > > > > >
> > > > > > > Ma question enf ait est la suivante :
> > > > > > > Est-il possible de préciser dans une jointure le nombre de
ligne
> > que
> > > > > l'on
> > > > > > > souhaite récupérer ?
> > > > > > >
> > > > > > >
> > > > > >
> > > > > >
> > > > >
> > > > >
> > > >
> > > >
> > >
> > >
> >
> >
>
>




Avatar
Zoury
Salut Dany! :O)

Ca me fait penser à un problème que j'ai déjà eu et dont je n'ai jamais
trouvé la solution. Je veux disons, du 6ieme enregistrement au 10ieme
enregistrement. ensuite quand je change de page dans mon affichage, je


veux
du 11ieme au 15ieme enregistrement et ainsi de suite. Est-ce qu'il y a une
instruction SQL qui pourrait me permettre de faire celà ou je dois m'en
remettre à faire une boucle et à passer tous les enregistrements?



Par requête, sous SQL Server (je n'ai pas testé sous Access), tu peux
quelque chose comme ceci, seulement la requête imbriquée ça ralentit le
traitement.. :

-- Sort le troisième enregistrement
select top 1 code
from diocese
where code not in
(
select top 2 code
from diocese
)



Une autre solution serait de faire une requête standard qui sort tous les
résultats souhaité :

select code
from diocese

et ensuite avec l'objet Recordset intialiser un nombre d'enregistrement par
page à l'aide de la propriété PageSize. La propriété PageCount te renvoi le
nombre de page contenu dans ton Recordset en fonction du PageSize mentionné.

--
Cordialement
Yanick Lefebvre - MVP pour Visual Basic
http://faq.vb.free.fr/?rubrique=0 - http://www.mvps.org/vbnet/
http://www.mentalis.org/agnet/apiguide.shtml - http://www.mztools.com/

Merci de poster les réponses au groupe afin d'en faire profiter à tous
Avatar
Zoury
Salut Simon! :O)

non mais est-ce que je parle dans le vide ? c'est le mot clé LIMIT !



J'appuie la tendance populaire, le mot clé LIMIT n'est pas supporté par SQL
Server...

--
Cordialement
Yanick Lefebvre - MVP pour Visual Basic
http://faq.vb.free.fr/?rubrique=0 - http://www.mvps.org/vbnet/
http://www.mentalis.org/agnet/apiguide.shtml - http://www.mztools.com/

Merci de poster les réponses au groupe afin d'en faire profiter à tous
Avatar
Zoury
> Une autre solution serait de faire une requête standard qui sort tous les
résultats souhaité :



on s'entend sur le mot "tous".. si tu as un volume de données élevées tu
serais quand même mieux d'opter pour un mélange des 2 AHMA... sinon ta
mémoire vive sera rapidement chargée.. :O/


--
Cordialement
Yanick Lefebvre - MVP pour Visual Basic
http://faq.vb.free.fr/?rubrique=0 - http://www.mvps.org/vbnet/
http://www.mentalis.org/agnet/apiguide.shtml - http://www.mztools.com/

Merci de poster les réponses au groupe afin d'en faire profiter à tous
Avatar
Bismark Prods
c'est bien possible mais ils s'agit d'une fonction très précisément
implémentée dans le standard : SQL-92 ANSI/ISO ! maintenant si microsoft ne
l'a pas implémenté ca me regarde pas tellement finalement ! moi je l'utilise
pas Server 2000 ! lol

Mais j'ai raison ! LIMIT existe ! et probablement que la fonction TOP de
server est une abstraction de LIMIT

"Zoury" a écrit dans le message de
news:Ox2KG$%
Salut Simon! :O)

> non mais est-ce que je parle dans le vide ? c'est le mot clé LIMIT !

J'appuie la tendance populaire, le mot clé LIMIT n'est pas supporté par


SQL
Server...

--
Cordialement
Yanick Lefebvre - MVP pour Visual Basic
http://faq.vb.free.fr/?rubrique=0 - http://www.mvps.org/vbnet/
http://www.mentalis.org/agnet/apiguide.shtml - http://www.mztools.com/

Merci de poster les réponses au groupe afin d'en faire profiter à tous




Avatar
Zoury
> c'est bien possible mais ils s'agit d'une fonction très précisément
implémentée dans le standard : SQL-92 ANSI/ISO ! maintenant si microsoft


ne
l'a pas implémenté ca me regarde pas tellement finalement ! moi je


l'utilise
pas Server 2000 ! lol



Mais j'ai raison ! LIMIT existe ! et probablement que la fonction TOP de
server est une abstraction de LIMIT



Microsoft aime bien faire les choses à leur façon.. La syntaxe INNER JOIN
est ses soeurs ne sont pas implémentée dans le standard SQL-92 ANSI/ISO mais
fonctionne plus rapidement que l'équivalent ..

Voici un exemple :

-- T-SQL
select Facture.Code, Client.Nom
from Facture inner join Client on Facture.IDClient = Client.IDClient

-- SQL-92 ANSI/ISO
select Facture.Code, Client.Nom
from Facture, Client
where Facture.IDClient = Client.IDClient


La clause TOP est donc peut-être plus rapide que LIMIT.. <-- supposition..
;O)

--
Cordialement
Yanick Lefebvre - MVP pour Visual Basic
http://faq.vb.free.fr/?rubrique=0 - http://www.mvps.org/vbnet/
http://www.mentalis.org/agnet/apiguide.shtml - http://www.mztools.com/

Merci de poster les réponses au groupe afin d'en faire profiter à tous
1 2