Changeset 18

Show
Ignore:
Timestamp:
10/03/05 22:57:36 (4 years ago)
Author:
gleu
Message:

Relecture de Stéphane Schildknecht.

Location:
traduc/branches/bv747/sgml
Files:
2 modified

Legend:

Unmodified
Added
Removed
  • traduc/branches/bv747/sgml/problems.sgml

    r13 r18  
    88 <para> 
    99  Lorsque vous trouvez un bogue dans <productname>PostgreSQL</productname>, 
    10   nous voulons en entendre parler. Vos rapports de bogues jouent un rôle 
    11   important pour rendre <productname>PostgreSQL</productname> plus fiable car 
    12   même avec la plus grande attention, nous ne pouvons pas garantir que chaque 
    13   partie de <productname>PostgreSQL</productname> fonctionnera sur toutes les 
    14   plates-formes et dans toutes les circonstances. 
     10  il faut que nous le sachions. Vos rapports de bogues sont essentiels pour 
     11  rendre <productname>PostgreSQL</productname> plus fiable. En effet 
     12  même la plus grande attention ne pas garantir que chaque 
     13  partie de <productname>PostgreSQL</productname> fonctionnera sur toute 
     14  plates-forme en toute circonstance. 
    1515 </para> 
    1616 
    1717 <para> 
    1818  Les suggestions suivantes ont pour but de vous former à la saisie d'un 
    19   rapport de bogue qui pourra ensuite être gérée de façon efficace. Il n'est 
    20   pas requis de les suivre mais ce serait à l'avantage de tous. 
     19  rapport de bogue qui pourra ensuite être géré de façon efficace. Il n'est 
     20  pas obligatoire de les suivre mais tout le monde en tirera profit. 
    2121 </para> 
    2222 
    2323 <para> 
    24   Nous ne pouvons pas promettre de corriger tous les bogues immédiatement. Si 
     24  Nous ne promettons pas de corriger tous les bogues immédiatement. Si 
    2525  le bogue est évident, critique ou affecte un grand nombre d'utilisateurs, il 
    2626  y a de grandes chances pour que quelqu'un s'en charge. Il peut aussi arriver 
    27   que nous vous demandons d'utiliser une version plus récente pour voir si le 
    28   bogue est toujours présent. Ou nous pourrions décider que le bogue ne peut 
    29   être corrigé avant qu'une réécriture massive, que nous avions planifiée, ne 
    30   soit faite. Ou peut-être est-il trop difficile et que des choses plus 
    31   importantes nous attendent. Si vous avez besoin d'aide immédiatement, 
    32   considérez l'obtention d'un contrat de support commercial. 
     27  que nous vous demandions d'utiliser une version plus récente pour voir si le 
     28  bogue est toujours présent. Nous pourrions aussi décider que le bogue ne peut 
     29  être corrigé avant qu'une réécriture massive, que nous planifierions, ne 
     30  soit réalisée. Peut-être encore cette correction est-elle trop difficile et 
     31  des choses plus importantes sont prévues. Si vous avez un besoin d'aide immédiat, 
     32  il vous faudra considérer la souscription d'un contrat de support commercial. 
    3333 </para> 
    3434 
     
    3838  <para> 
    3939   Avant de rapporter un bogue, merci de lire et re-lire la documentation pour 
    40    vérifier que vous pouvez réellement faire ce que vous essayez de faire. Si 
    41    ce n'est pas clair, rapportez-le aussi&nbsp;; c'est un bogue dans la 
    42    documentation. S'il s'avère que le programme fait différemment de ce 
    43    qu'indique la documentation, c'est un bogue. Ceci peut inclure les 
    44    circonstances suivantes, sans s'y limiter&nbsp;: 
     40   vérifier que ce que vous essayez de faire est réellement prévu. Si 
     41   la documentation n'est pas claire sur ce point, faites également remonter cette 
     42   information&nbsp;; c'est un bogue dans la documentation. S'il s'avère que le 
     43   programme se déroule différemment de ce qu'indique la documentation, c'est un bogue. 
     44   Ceci peut inclure les circonstances suivantes, sans s'y limiter&nbsp;: 
    4545 
    4646   <itemizedlist> 
    4747    <listitem> 
    4848     <para> 
    49       Un programme se terminant avec un signal fatal ou un message d'erreur du 
    50       système d'exploitation qui indiquerait un problème avec le programme. 
     49      Un programme se termine avec un signal fatal ou un message d'erreur du 
     50      système d'exploitation indiquant un problème dans le programme. 
    5151      (Un contre-exemple pourrait être le message <quote>disk full</quote>, 
    5252      disque plein, car vous devez le régler vous-même.) 
     
    5656    <listitem> 
    5757     <para> 
    58       Un programme produit une mauvaise sortie pour une entrée donnée. 
     58      Un programme produit une sortie erronnée pour une entrée donnée. 
    5959     </para> 
    6060    </listitem> 
     
    7070     <para> 
    7171      Un programme accepte une entrée invalide sans information ou message 
    72       d'erreur. Mais gardez en tête que votre idée d'entrée invalide pourrait 
    73       être notre idée d'une extension ou d'une compatibilité avec les 
     72      d'erreur. Il est toutefois possible que ce que vous estimez être une entrée 
     73      invalide soit en fait notre idée d'une extension ou d'une compatibilité avec les 
    7474      pratiques traditionnelles. 
    7575     </para> 
     
    8585   </itemizedlist> 
    8686 
    87    Ici, <quote>programme</quote> fait référence à un exécutable, pas au moteur 
    88    du serveur. 
     87   Ici, <quote>programme</quote> fait référence à un exécutable, pas uniquement 
     88   au moteur du serveur. 
    8989  </para> 
    9090 
     
    9292   Une lenteur ou une accaparation des ressources n'est pas nécessairement un 
    9393   bogue. Lisez la documentation ou demandez sur une des listes de discussion 
    94    pour de l'aide concernant l'optimisation de vos applications. Ne pas se 
     94   de l'aide pour optimiser vos applications. Ne pas se 
    9595   conformer au standard <acronym>SQL</acronym> n'est pas nécessairement un 
    9696   bogue sauf si une telle conformité est indiquée explicitement. 
     
    9898 
    9999  <para> 
    100    Avant de continuer, vérifiez sur la liste des choses à faire ainsi que dans 
    101    la FAQ pour voir si votre bogue n'est pas déjà connu. Si vous n'arrivez pas à 
    102    décoder les informations sur la liste des choses à faire, écrivez un rapport. 
     100   Avant de continuer, vérifiez sur la liste des tâches, ainsi que dans 
     101   la FAQ, pour voir si votre bogue n'est pas déjà connu. Si vous n'arrivez pas à 
     102   décoder les informations sur la liste des tâches, écrivez un rapport. 
    103103   Le minimum que nous puissions faire est de rendre cette liste plus claire. 
    104104  </para> 
     
    107107 <sect2> 
    108108  <title>Que rapporter&nbsp;?</title> 
    109  
    110   <para> 
    111    Le point le plus important à se rappeler avec les rapports de bogues est de 
    112    donner tous les faits et seulement les faits. Ne spéculez pas sur ce que vous 
    113    pensez qui ne va pas, sur ce qu'<quote>il semble faire</quote> ou sur quelle 
    114    partie le programme a une erreur. Si vous n'êtes pas familier avec 
     109  <para> 
     110   Le point le plus important lors d'un rapport de bogues est de se souvenir de 
     111   rapporter tous les faits et seulement les faits. Ne spéculez pas sur ce que vous 
     112   pensez être le dysfonctionnement, sur ce qu'<quote>il semblait faire</quote> ou 
     113   sur la partie du programme qui contient une erreur. Si vous n'êtes pas familier de 
    115114   l'implémentation, vous vous tromperez probablement et vous ne nous aiderez 
    116    pas. Et même si vous avez raison, des explications complètes sont un bon 
    117    supplément mais elles ne doivent pas se substituer aux faits. Si nous pensons 
     115   pas. Même si vous aviez raison, des explications complètes sont un bon 
     116   complément mais elles ne doivent pas se substituer aux faits. Si nous décidons de 
    118117   corriger le bogue, nous devons toujours le reproduire nous-même. Rapporter 
    119    les faits stricts est relativement simple (vous pouvez probablement 
     118   les faits stricts est relativement simple (vous pouvez probablement les 
    120119   copier/coller à partir de l'écran) mais, trop souvent, des détails importants 
    121120   sont oubliés parce que quelqu'un a pensé qu'ils n'avaient pas d'importance ou 
     
    131130     <para> 
    132131      La séquence exacte des étapes nécessaires pour reproduire le problème 
    133       <emphasis>à partir du lancement du programme</emphasis>. Ceci devrait se 
    134       suffire&nbsp;; il n'est pas suffisant d'envoyer une simple instruction 
     132      <emphasis>à partir du lancement du programme</emphasis>. Ceci doit se 
     133      suffire&nbsp;; si la sortie doit dépendre des données contenues dans 
     134      les tables, il n'est pas suffisant d'envoyer une simple instruction 
    135135      <command>SELECT</command> sans les commandes 
    136136      <command>CREATE TABLE</command> et <command>INSERT</command> 
    137       qui ont précédé, si la sortie devrait dépendre des données contenues dans 
    138       les tables. Nous n'avons pas le temps de comprendre le schéma de votre 
    139       base de données. Si nous sommes supposés créer nos propres données, nous 
    140       allons probablement ne pas voir le problème. 
    141      </para> 
    142  
    143      <para> 
    144       Le meilleur format pour un test suite à un problème relatif à SQL est un 
     137      qui ont précédé. Nous n'avons pas le temps de comprendre le schéma de votre 
     138      base de données et si nous sommes supposés créer nos propres données, nous 
     139      allons probablement passer à côté du problème. 
     140     </para> 
     141 
     142     <para> 
     143      Le meilleur format de jeu de test pour les problèmes relatif au SQL est un 
    145144      fichier qui peut être lancé via l'interface 
    146145      <application>psql</application> et qui montrera le problème. 
    147146      (Assurez-vous de ne rien avoir dans votre fichier de lancement 
    148       <filename>~/.psqlrc</filename>.) Un début facile pour ce fichier est 
     147      <filename>~/.psqlrc</filename>.) Un bon début pour ce fichier est 
    149148      d'utiliser <application>pg_dump</application> pour récupérer les 
    150149      déclarations des tables ainsi que les données nécessaires pour mettre en 
     
    157156     <para> 
    158157      Si votre application utilise une autre interface client, telle que 
    159       <application>PHP</>, alors essayez d'isoler le problème aux requêtes 
    160       erronées. Nous n'allons certainement pas mettre en place un serveur web 
    161       pour reproduire votre problème. Dans tous les cas, rappelez-vous 
    162       d'apporter les fichiers d'entrée exacts&nbsp;; n'essayez pas de deviner 
     158      <application>PHP</>, essayez alors d'isoler les requêtes 
     159      posant problème. Nous n'allons certainement pas mettre en place un serveur web 
     160      pour reproduire votre problème. Dans tous les cas, n'oubliez pas de fournir 
     161      les fichiers d'entrée exacts&nbsp;; n'essayez pas de deviner 
    163162      que le problème se pose pour les <quote>gros fichiers</quote> ou pour les 
    164163      <quote>bases de données de moyenne taille</quote>, etc. car cette 
    165       information est trop inexacte, subjective pour être utile. 
     164      information est trop inexacte, voire subjective, pour être utile. 
    166165     </para> 
    167166    </listitem> 
     
    171170      La sortie que vous obtenez. Merci de ne pas dire que cela <quote>ne 
    172171      fonctionne pas</quote> ou s'est <quote>arrêté brutalement</quote>. S'il 
    173       existe un message d'erreur, montrez-le même si vous ne le comprenez pas. 
     172      existe un message d'erreur, montrez-le, même si vous ne le comprenez pas. 
    174173      Si le programme se termine avec une erreur du système d'exploitation, 
    175174      dites-le. Même si le résultat de votre test est un arrêt brutal du 
    176175      programme ou un autre soucis évident, il pourrait ne pas survenir sur 
    177176      notre plateforme. Le plus simple est de copier directement la sortie du 
    178       terminal, si possible. 
     177      terminal quand cela est possible. 
    179178     </para> 
    180179     <note> 
    181180      <para> 
    182181       Si vous rapportez un message d'erreur, merci d'obtenir la forme la plus 
    183        verbeuse de ce message. Avec <application>psql</>, exécutez <literal>\set 
    184        VERBOSITY verbose</> avant tout. Si vous récupérez le message des traces 
    185        du serveur, initialisez la variable d'exécution 
    186        <varname>log_error_verbosity</> avec <literal>verbose</> pour que tous les 
     182       verbeuse de ce message. Avec <application>psql</>, exécutez avant tout <literal>\set 
     183       VERBOSITY verbose</>. Si vous récupérez le message des traces 
     184       du serveur, positionnez la variable d'exécution 
     185       <varname>log_error_verbosity</> à <literal>verbose</> pour que tous les 
    187186       détails soient tracés. 
    188187      </para> 
     
    193192       pourrait ne pas contenir toutes les informations disponibles. Jetez aussi un 
    194193       &oelig;il aux traces du serveur de la base de données. Si vous ne 
    195        conservez pas les traces de votre serveur, c'est le bon moment pour 
     194       conservez pas les traces de votre serveur, c'est peut-être le bon moment pour 
    196195       commencer à le faire. 
    197196      </para> 
     
    207206      est correct car cela correspond exactement à ce que nous attendions. Nous 
    208207      ne devrions pas avoir à passer du temps pour décoder la sémantique exacte 
    209       de vos commandes. Tout spécialement, ne vous contentez pas de dire que 
     208      de vos commandes. En particulier, ne vous contentez pas de dire que 
    210209      <quote>Ce n'est pas ce que SQL spécifie/Oracle fait.</quote> Rechercher le 
    211210      comportement correct à partir de <acronym>SQL</acronym> n'est pas 
     
    220219      Toutes les options en ligne de commande ainsi que les autres options de 
    221220      lancement incluant les variables d'environnement ou les fichiers de 
    222       configuration que vous avez modifié. Encore une fois, soyez exact. Si 
    223       vous utilisez une distribution pré-packagée qui lance le serveur au 
     221      configuration que vous avez modifié. Encore une fois, soyez précis. Si 
     222      vous utilisez une distribution pré-empaquetée qui lance le serveur au 
    224223      démarrage, vous devriez essayer de retrouver ce que cette distribution 
    225224      fait. 
     
    229228    <listitem> 
    230229     <para> 
    231       Tout ce que vous avez fait de différent à partir des instructions d'installation. 
     230      Tout ce que vous avez fait différement des instructions d'installation. 
    232231     </para> 
    233232    </listitem> 
     
    240239      aussi d'une option <option>--version</option>&nbsp;; 
    241240      <literal>postmaster --version</literal> et <literal>psql --version</literal> 
    242       devraient au moins fonctionner. 
     241      au moins devraient fonctionner. 
    243242      Si la fonction ou les options n'existent pas, alors votre version est bien 
    244       trop ancienne et vous devez mettre à jour. Si vous avez lancé une version 
    245       préparée sous forme de paquets, tel que les RPM, dites-le en incluant la 
    246       sous-version que le paquet pourrait avoir. Si vous êtes sur une version 
    247       CVS, mentionnez-le en indiquant la date et l'heure. 
     243      trop ancienne et vous devez la mettre à jour. Si vous avez lancé une version 
     244      préparée sous forme de paquets, tels que des RPM, dites-le en incluant la 
     245      sous-version que le paquet aurait éventuellement. Si vous travaillez avec 
     246      une version CVS, mentionnez-le en indiquant la date et l'heure de la capture CVS. 
    248247     </para> 
    249248 
    250249     <para> 
    251250      Si votre version est antérieure à &version;, nous allons certainement 
    252       vous demander de mettre à jour. Il existe des tonnes de corrections à 
     251      vous demander de la mettre à jour. Il existe des tonnes de corrections à 
    253252      chaque mise à jour, ce qui explique pourquoi nous faisons de nouvelles 
    254253      versions. 
     
    265264      tout le monde sait ce que <quote>Debian</quote> contient ou que tout le 
    266265      monde utilise des Pentiums. Si vous avez des problèmes à l'installation, 
    267       des informations sur le compilateurs, make, etc. sont aussi nécessaires. 
     266      les informations concernant le compilateurs, make, etc. seront aussi nécessaires. 
    268267     </para> 
    269268    </listitem> 
    270269   </itemizedlist> 
    271270 
    272    N'ayez pas peur si votre rapport de bogue devient assez long. C'est un fait. 
    273    Il est mieux de tout rapporter la première fois plutôt que nous ayons à vous 
    274    demander tous les faits. D'un autre côté, si vos fichiers d'entrée sont trop 
     271   Ne vous inquiétez pas si votre rapport de bogue devient assez long. C'est un fait. 
     272   Il est préférable de tout rapporter la première fois plutôt que de nous obliger à vous 
     273   demander tous les faits. D'un autre côté, si vos fichiers en entrée sont trop 
    275274   gros, il est préférable de demander si quelqu'un souhaite s'y plonger. 
    276275  </para> 
    277276 
    278277  <para> 
    279    Ne passez pas tout votre temps à vous demander quelles modifications apportées 
    280    pour que le problème s'en aille. Ceci ne nous aidera probablement pas à le 
    281    résoudre. S'il arrive que le bogue ne peut pas être corrigé immédiatement, 
    282    vous aurez toujours l'opportunité de chercher ceci et de partager vos trouvailles. 
    283    De même, encore une fois, ne perdez pas votre temps à deviner pourquoi le 
    284    bogue existe. Nous le trouverons assez rapidement. 
     278   Ne passez pas tout votre temps à vous demander quelles modifications apporter 
     279   aux données en entrée pour faire disparaître le problème. Ceci ne nous aidera 
     280   probablement pas à le résoudre. S'il se trouve que le bogue ne puisse pas être 
     281   corrigé instantanément, vous aurez toujours le temps de chercher et de partager vos trouvailles. 
     282   Encore une fois, ne perdez pas votre temps à deviner pourquoi le 
     283   bogue existe. Nous trouverons cela assez rapidement. 
    285284  </para> 
    286285 
    287286  <para> 
    288287   Lors de la rédaction d'un rapport de bogue, merci de choisir une terminologie 
    289    qui ne laisse pas place aux confusions. Le paquet logiciel en totalité est 
    290    appelé <quote>PostgreSQL</quote>, quelque fois <quote>Postgres</quote> en court. 
     288   qui ne laisse pas de place à l'ambiguité. Le paquet logiciel dans sa totalité est 
     289   appelé <quote>PostgreSQL</quote>, parfois <quote>Postgres</quote> en abrégé. 
    291290   Si vous parlez spécifiquement du serveur, mentionnez-le mais ne dites pas 
    292291   seulement <quote>PostgreSQL a planté</quote>. Un arrêt brutal d'un seul processus 
    293292   serveur est assez différent de l'arrêt brutal du 
    294293   <quote>postmaster</> père&nbsp;; merci de ne pas dire que <quote>le postmaster 
    295    a planté</> lorsque vous voulez dire qu'un seul processus s'est arrêté, et non 
    296    pas vice versa. De plus, les programmes clients tels que l'interface interactive 
     294   a planté</> lorsque vous voulez dire qu'un seul processus s'est arrêté, et 
     295   vice versa. De plus, les programmes clients tels que l'interface interactive 
    297296   <quote><application>psql</application></quote> sont complètement séparés du 
    298297   moteur. Essayez d'être précis sur la provenance du problème&nbsp;: client ou 
     
    306305  <para> 
    307306   En général, envoyez vos rapports de bogue à la liste de discussion des 
    308    rapports de bogue (<email>pgsql-bogues@postgresql.org</email>). 
    309    Nous vous demandons d'utiliser un sujet descriptif pour votre courrier 
    310    électronique, par exemple une partie du message d'erreur. 
     307   rapports de bogue (<email>pgsql-bugs@postgresql.org</email>). 
     308   Il est recommandé d'utiliser un sujet descriptif pour votre courriel, pourquoi 
     309   pas une partie du message d'erreur. 
    311310  </para> 
    312311 
     
    315314   site web du projet 
    316315   <ulink url="http://www.postgresql.org/">http://www.postgresql.org/</ulink>. 
    317    Saisir un rapport de bogue de cette façon fait que celui-ci est envoyé à la 
    318    liste de discussion <email>pgsql-bogues@postgresql.org</email>. 
     316   Saisir un rapport de bogue de cette façon implique son envoi à la 
     317   liste de discussion <email>pgsql-bugs@postgresql.org</email>. 
    319318  </para> 
    320319 
     
    323322   préfériez qu'il ne soit pas immédiatement visible dans les archives 
    324323   publiques, ne l'envoyez pas sur <literal>pgsql-bugs</literal>. Les problèmes 
    325    de sécurité peuvent être rapportés de façon privé sur 
     324   de sécurité peuvent être rapportés en privé sur 
    326325   <email>security@postgresql.org</email>. 
    327326  </para> 
    328327 
    329328  <para> 
    330    N'envoyez pas de rapports de bogue aux listes de discussion des utilisateurs, 
     329   N'envoyez pas de rapports de bogue aux listes de discussion d'utilisateurs, 
    331330   comme <email>pgsql-sql@postgresql.org</email> ou 
    332331   <email>pgsql-general@postgresql.org</email>. 
    333332   Ces listes de discussion servent à répondre aux questions des utilisateurs et 
    334    les abonnés ne souhaitent pas recevoir de rapports de bogues. Plus important, 
    335    ils ont peu de chance de les corriger. 
     333   les abonnés ne souhaitent pas, en général, recevoir de rapports de bogues. Plus important, 
     334   il y a peu de chance qu'ils les corrigent. 
    336335  </para> 
    337336 
     
    341340   Cette liste sert aux discussions concernant le développement de 
    342341   <productname>PostgreSQL</productname> et il serait bon de conserver les 
    343    rapports de bogue séparément. Nous pourrions choisir de discuter de votre 
     342   rapports de bogue séparément. Nous pouvons toujours décider de discuter de votre 
    344343   rapport de bogue sur <literal>pgsql-hackers</literal> si le problème 
    345    nécessite que plus de personnes s'en occupent. 
     344   nécessite plus de personnes pour s'en occuper. 
    346345  </para> 
    347346 
     
    362361  <note> 
    363362   <para> 
    364     Dû, malheureusement, au grand nombre de pourriels (spam), toutes les 
     363    Du fait du grand nombre de pourriels (spam) qui circulent, toutes les 
    365364    adresses de courrier électronique ci-dessus appartiennent à des listes 
    366365    de discussion fermées. C'est-à-dire que vous devez être abonné pour être 
    367     autorisé à y envoyer un courrier. Néanmoins, vous n'avez pas besoin de vous 
     366    autorisé à y envoyer un courriel. Néanmoins, vous n'avez pas besoin de vous 
    368367    abonner pour utiliser le formulaire web de rapports de bogue. Si vous 
    369     souhaitez envoyer des courriers mais ne pas recevoir le trafic de la liste, 
     368    souhaitez envoyer des courriels mais ne pas recevoir le trafic de la liste, 
    370369    vous pouvez vous abonner et configurer l'option <literal>nomail</>. 
    371     Pour plus d'information, envoyez un courrier à 
     370    Pour plus d'information, envoyez un courriel à 
    372371    <email>majordomo@postgresql.org</email> 
    373372    avec le seul mot <literal>help</> dans le corps du message. 
  • traduc/branches/bv747/sgml/queries.sgml

    r13 r18  
    1313 
    1414 <para> 
    15   Les précédents chapitres ont expliqué comme créer des tables, comment  
     15  Les précédents chapitres expliquaient comme créer des tables, comment 
    1616  les remplir avec des données et comment manipuler ces données. 
    17   Maintenant, nous discutons enfin de la façon de récupérer ces données 
     17  Il est temps d'aborder maintenant la façon de récupérer ces données 
    1818  depuis la base de données. 
    1919 </para> 
     
    2424 
    2525  <para> 
    26    Le processus et la commande de récupération des données sont appelés une 
     26   Le processus de récupération des données et la commande elle-même sont appelés 
    2727   <firstterm>requête</firstterm>. En SQL, la commande 
    28    <command>SELECT</command> est utilisé pour spécifier des requêtes. La 
     28   <command>SELECT</command> est utilisée pour spécifier des requêtes. La 
    2929   syntaxe générale de la commande <command>SELECT</command> est <synopsis> 
    30 SELECT <replaceable>liste_select</replaceable> FROM 
    31 <replaceable>expression_table</replaceable> 
    32 <optional><replaceable>_specification_tri</replaceable></optional> 
    33 </synopsis> 
    34    Les sections suivantes décrivent le détail de la liste de sélection, 
    35    l'expression des tables et la spécification du tri. 
     30SELECT <replaceable>liste_select</replaceable> FROM <replaceable>expression_table</replaceable> <optional><replaceable>specification_tri</replaceable></optional> 
     31</synopsis> 
     32   Les sections suivantes décrivent en détails la liste de sélection, 
     33   l'expression de tables et la spécification du tri. 
    3634  </para> 
    3735 
     
    4442  commande récupérera toutes les lignes et toutes les colonnes de 
    4543  <literal>table1</literal>. (La méthode de récupération dépend de l'application 
    46   cliente. Par exemple, le programme <application>psql</application> affichera 
    47 une table, façon art ASCII, alors que les bibliothèques du client offriront  
    48 des fonctions d'extraction de valeurs individuelles à partir du résultat de 
    49 la requête.) <literal>*</literal> comme liste de sélection signifie que toutes 
    50 les colonnes de l'expression de table seront récupérées. Une liste de sélection 
    51 peut aussi être un sous-ensemble des colonnes disponibles ou effectuer  
    52 un calcul en utilisant les colonnes. Par exemple, si <literal>table1</literal> 
    53 dispose des colonnes nommées <literal>a</>, <literal>b</> et <literal>c</> (et 
    54 peut-être d'autres), vous pouvez lancer la requête suivante&nbsp;: 
     44  client. Par exemple, le programme <application>psql</application> affichera 
     45  une table, façon art ASCII, alors que les bibliothèques client offriront 
     46  des fonctions d'extraction de valeurs individuelles à partir du résultat de 
     47  la requête.) <literal>*</literal> utilisé comme liste de sélection désigne toutes 
     48  les colonnes que l'expression de la table fournie. Une liste de sélection 
     49  peut aussi sélectionner un sous-ensemble des colonnes disponibles ou effectuer 
     50  un calcul en utilisant les colonnes. Par exemple, si <literal>table1</literal> 
     51  dispose des colonnes nommées <literal>a</>, <literal>b</> et <literal>c</> (et 
     52  peut-être d'autres), la requête suivante peut être effectuée&nbsp;: 
    5553<programlisting> 
    5654SELECT a, b + c FROM table1; 
     
    6260 <para> 
    6361  <literal>FROM table1</literal> est un type très simple d'expression de 
    64 tables&nbsp;: il lit une seule table. En général, les expressions de tables 
    65 sont des constructions complexes de tables de base, de jointures et de 
    66 sous-requêtes. Mais vous pouvez aussi entièrement omettre l'expression de table 
    67 et utiliser la commande <command>SELECT</command> comme une calculatrice&nbsp;: 
     62  tables&nbsp;: il lit une seule table. En général, les expressions de tables 
     63  sont des constructions complexes de tables de base, de jointures et de 
     64  sous-requêtes. Il est également possible d'omettre l'expression de table 
     65  et d'utiliser la commande <command>SELECT</command> comme une calculatrice&nbsp;: 
    6866<programlisting> 
    6967SELECT 3 * 4; 
    7068</programlisting> 
    7169  Ceci est plus utile si les expressions de la liste de sélection renvoient des 
    72   résultats variants. Par exemple, vous pouvez appeler une fonction de cette 
     70  résultats variables. Il est, par exemple, possible d'appeler une fonction de cette 
    7371  façon&nbsp;: 
    7472<programlisting> 
     
    9088   L'expression de table contient une clause <literal>FROM</> qui peut être 
    9189   suivie des clauses <literal>WHERE</>, <literal>GROUP BY</> et 
    92    <literal>HAVING</>. Les expressions de table triviales réfèrent simplement à 
    93    une table sur le disque, une table de base, mais des expressions plus 
     90   <literal>HAVING</>. Les expressions de table triviales font simplement référence à 
     91   une table sur le disque, appelée table de base, mais des expressions plus 
    9492   complexes peuvent être utilisées pour modifier ou combiner des tables de base 
    95    de différentes façon. 
     93   de différentes façons. 
    9694  </para> 
    9795 
    9896  <para> 
    9997   Les clauses optionnelles <literal>WHERE</>, <literal>GROUP BY</> et 
    100    <literal>HAVING</> dans l'expression de table spécifient un tube de 
     98   <literal>HAVING</> dans l'expression de table spécifient un enchaînement de 
    10199   transformations successives réalisées sur la table dérivée de la 
    102100   clause <literal>FROM</>. Toutes ces transformations produisent une table 
    103101   virtuelle fournissant les lignes à passer à la liste de sélection qui 
    104    choisira les lignes à afficher de la requête. 
     102   choisira les lignes à afficher en sortie de la requête. 
    105103  </para> 
    106104         
     
    110108   <para> 
    111109    La clause <literal>FROM</> dérive une table à partir d'une ou plusieurs 
    112     tables données dans une liste de référence dont les tables sont séparées par 
    113     des virgules. 
     110    tables, spécifiées dans une liste de référence dont le séparateur est une virgule. 
    114111<synopsis> 
    115112FROM <replaceable>reference_table</replaceable> <optional>, 
     
    117114</synopsis> 
    118115 
    119     Une référence de table pourrait être un nom de table (avec en option 
    120     le nom du schéma) ou une table dérivée comme une sous-requête, une table 
    121     jointe ou une combinaison complexe de celles-ci. Si plus d'une référence de 
    122     tables est listé dans la clause <literal>FROM</>, elle sont jointes pour 
    123     former une table virtuelle intermédiaire qui pourrait être le sujet des 
    124     transformations des clauses <literal>WHERE</>, <literal>GROUP BY</>, 
    125     et <literal>HAVING</> et est finalement le résultat des expressions de 
    126     table. 
     116    Une référence de table peut être un nom de table (optionnellement préfixé par 
     117    le nom du schéma) ou une table dérivée. Une table dérivée peut-être une sous-requête, 
     118    une jointure de tables ou toute combinaison complexe de celles-ci. Si plusieurs 
     119    références de tables sont listées dans la clause <literal>FROM</>, elles sont 
     120    jointes (voir plus bas) pour former la table virtuelle intermédiaire, sujet possible de 
     121    transformations par les clauses <literal>WHERE</>, <literal>GROUP BY</> et 
     122    <literal>HAVING</>. et qui est finalement le résultat de l'expression des tables globale. 
    127123   </para> 
    128124 
     
    132128 
    133129   <para> 
    134     Lorsqu'une référence de table nomme une table qui est la table parent d'une 
    135     table suivant la hiérarchie de l'héritage, la référence de table produit les 
     130    Lorsqu'une référence de table fait référence à une table supertable d'une 
     131    hiérarchie d'héritage, la référence de table produit les 
    136132    lignes non seulement de la table mais aussi des successeurs de cette table 
    137     sauf si le mot clé <literal>ONLY</> précède le nom de la table. Néanmoins, 
     133    sauf si le mot clé <literal>ONLY</> précède le nom de la table. Toutefois, 
    138134    la référence produit seulement les colonnes qui apparaissent dans la table 
    139     nommée... toute colonne ajoutée dans une sous-table est ignorée. 
     135    nommée --- toute colonne ajoutée dans une sous-table est ignorée. 
    140136   </para> 
    141137 
     
    175171 
    176172      <indexterm> 
    177        <primary>crossed joind</primary> 
     173       <primary>cross join</primary> 
    178174      </indexterm> 
    179175 
     
    185181       <para> 
    186182        Pour chaque combinaison de lignes provenant de 
    187         <replaceable>T1</replaceable> et <replaceable>T2</replaceable>, la 
    188         table dérivée contiendra une ligne consistant de toutes les colonnes de 
     183        <replaceable>T1</replaceable> et de <replaceable>T2</replaceable>, la 
     184        table dérivée contiendra une ligne constituée de toutes les colonnes de 
    189185        <replaceable>T1</replaceable> suivies de toutes les colonnes de 
    190186        <replaceable>T2</replaceable>. Si les tables ont respectivement N et M 
     
    196192        <replaceable>T2</replaceable></literal> est équivalent à 
    197193        <literal>FROM <replaceable>T1</replaceable>, 
    198         <replaceable>T2</replaceable></literal>.  C'est aussi équivalent à 
     194        <replaceable>T2</replaceable></literal>. C'est aussi équivalent à 
    199195        <literal>FROM <replaceable>T1</replaceable> INNER JOIN 
    200196        <replaceable>T2</replaceable> ON TRUE</literal> (voir ci-dessous). 
     
    233229       <para> 
    234230        Les mots <literal>INNER</literal> et 
    235         <literal>OUTER</literal> sont optionnelles dans toutes les formes. 
     231        <literal>OUTER</literal> sont optionnels dans toutes les formes. 
    236232        <literal>INNER</literal> est la valeur par défaut&nbsp;; 
    237233        <literal>LEFT</literal>, <literal>RIGHT</literal> et 
     
    240236 
    241237       <para> 
    242         La <firstterm>condition de la jointure</firstterm> est spécifiée dans 
    243         la clause <literal>ON</> ou <literal>USING</> ou implicitement par le 
     238        La <firstterm>condition de jointure</firstterm> est spécifiée dans 
     239        la clause <literal>ON</> ou <literal>USING</>, ou implicitement par le 
    244240        mot <literal>NATURAL</>. La condition de jointure détermine les lignes 
    245         des deux tables source considérées comme <quote>correspondante</quote>, 
     241        des deux tables sources <quote>correspondantes</quote>, 
    246242        comme l'explique le paragraphe ci-dessous. 
    247243       </para> 
     
    249245       <para> 
    250246        La clause <literal>ON</> est le type le plus général de condition de  
    251         jointure&nbsp;: il prend une expression booléenne du même genre que 
    252         celui utilisée dans une clause <literal>WHERE</>. Une paires de lignes 
     247        jointure&nbsp;: elle prend une expression booléenne du même genre que 
     248        celle utilisée dans une clause <literal>WHERE</>. Une paire de lignes 
    253249        de <replaceable>T1</> et <replaceable>T2</> correspondent si 
    254250        l'expression <literal>ON</> est évaluée à vraie (true) pour ces deux 
     
    257253 
    258254       <para> 
    259         <literal>USING</> est la notation raccourcie&nbsp;: elle prend une 
    260         liste de noms de colonnes séparées par des virgules, que les tables 
    261         jointes ont en commun, et forme une condition de jointure spécifiant 
     255        <literal>USING</> est une notation raccourcie&nbsp;: elle prend une 
     256        liste de noms de colonnes, séparés par des virgules, que les tables 
     257        jointes doivent avoir en commun, et forme une condition de jointure spécifiant 
    262258        l'égalité de chacune de ces paires de colonnes. De plus, la sortie de 
    263         <literal>JOIN USING</> a une colonne pour chaque paires égales des 
    264         colonnes en entrée, suivies par toutes les autres colonnes de chaque 
    265         table. Du coup, <literal>USING (a, b, c)</literal> est équivalent à 
    266         <literal>ON (t1.a = t2.a AND t1.b = t2.b AND t1.c = t2.c)</literal> avec 
    267         l'exception que si <literal>ON</> est utilisé, il y aura deux colonnes 
     259        <literal>JOIN USING</> a une colonne pour chaque paire égalée de 
     260        colonnes en entrée. Ces colonnes sont suivies par toutes les autres colonnes de chaque 
     261        table. De ce fait, <literal>USING (a, b, c)</literal> est équivalent à 
     262        <literal>ON (t1.a = t2.a AND t1.b = t2.b AND t1.c = t2.c)</literal> à 
     263        la différence que si <literal>ON</> est utilisé, il y a deux colonnes 
    268264        <literal>a</>, <literal>b</>, puis <literal>c</> dans le résultat, alors 
    269         qu'avec <literal>USING</>, il n'y en aurait eu qu'une de chaque. 
     265        qu'avec <literal>USING</>, il n'y en aura qu'une de chaque. 
    270266       </para> 
    271267 
     
    287283        Enfin, <literal>NATURAL</> est un format raccourci de 
    288284        <literal>USING</>&nbsp;: il forme une liste <literal>USING</> 
    289         consistant exactement des noms de colonnes apparaissant à la fois dans 
    290         deux tables en entrée. Comme avec <literal>USING</>, ces colonnes 
    291         apparaissent seulement une fois dans la table de sortie. 
     285        constituée exactement des noms des colonnes apparaissant à la fois dans 
     286        les deux tables en entrée. Comme avec <literal>USING</>, ces colonnes 
     287        n'apparaissent qu'une fois dans la table de sortie. 
    292288       </para> 
    293289 
     
    301297         <listitem> 
    302298          <para> 
    303            Pour chaque ligne R1 de T1, la table jointe a une ligne pour chaque 
    304            ligne de T2 satisfaisant la condition de jointure avec R1. 
     299           Pour chaque ligne L1 de T1, la table jointe a une ligne pour chaque 
     300           ligne de T2 satisfaisant la condition de jointure avec L1. 
    305301          </para> 
    306302         </listitem> 
     
    330326         <listitem> 
    331327          <para> 
    332            Tout d'abord, une jointure interne est réalisée. Puis, pour chaque 
    333            ligne de T1 qui ne satisfont pas la condition de jointure avec toutes 
    334            les lignes de T2, une ligne jointe est ajoutée avec des valeurs 
     328           En premier lieu, une jointure interne est réalisée. Puis, pour chaque 
     329           ligne de T1 qui ne satisfait à la condition de jointure avec aucune 
     330           des lignes de T2, une ligne jointe est ajoutée avec des valeurs 
    335331           nulles dans les colonnes de T2. Du coup, la table jointe a au moins 
    336            une ligne pour chaque ligne de T1 quelque soient les conditions. 
     332           une ligne pour chaque ligne de T1 quelques soient les conditions. 
    337333          </para> 
    338334         </listitem> 
     
    362358         <listitem> 
    363359          <para> 
    364            Tout d'abord, une jointure interne est réalisée. Puis, pour chaque 
    365            ligne de T2 qui ne satisfait pas la condition de jointure avec une 
    366            ligne de T1, une ligne jointe est ajoutée avec des valeurs nulles 
     360           En premier lieu, une jointure interne est réalisée. Puis, pour chaque 
     361           ligne de T2 qui ne satisfait à la condition de jointure avec aucune 
     362           des lignes de T1, une ligne jointe est ajoutée avec des valeurs nulles 
    367363           dans les colonnes de T1. C'est l'inverse d'une jointure gauche&nbsp;: 
    368            la table résultante aura une ligne pour chaque ligne de T2 quelque 
     364           la table résultante aura une ligne pour chaque ligne de T2 quelques 
    369365           soient les conditions. 
    370366          </para> 
     
    377373         <listitem> 
    378374          <para> 
    379            Tout d'abord, une jointure interne est réalisée. Puis, pour chaque 
    380            ligne de T1 qui ne satisfait pas la condition de jointure avec une 
    381            ligne de T2, une ligne jointe est ajouté avec des valeurs nulles dans 
    382            les colonnes de T2. De plus, pour chaque ligne de T2 qui ne satisfait 
    383            pas la condition de jointure avec les lignes de T1, une ligne jointe 
     375           En premier lieu, une jointure interne est réalisée. Puis, pour chaque 
     376           ligne de T1 qui ne satisfait à la condition de jointure avec aucune 
     377           des lignes de T2, une ligne jointe est ajoutée avec des valeurs nulles dans 
     378           les colonnes de T2. Enfin, pour chaque ligne de T2 qui ne satisfait 
     379           à la condition de jointure avec aucune des lignes de T1, une ligne jointe 
    384380           est ajoutée avec des valeurs nulles dans les colonnes de T1. 
    385381          </para> 
     
    393389 
    394390    <para> 
    395      Les jointures de tous les types peuvent être chaînées ensemble ou 
    396      imbriquées&nbsp;: soit les deux soit une des deux, parmi 
    397      <replaceable>T1</replaceable> et <replaceable>T2</replaceable>, pourraient 
    398      être des tables. Les parenthèses peuvent être utilisées autour des clauses 
     391     Des jointures de tout type peuvent être chaînées ou imbriquées&nbsp;: 
     392     <replaceable>T1</replaceable> et <replaceable>T2</replaceable> peuvent 
     393     être des tables jointes (l'une, l'autre ou les deux). 
     394     Des parenthèses peuvent être utilisées autour des clauses 
    399395     <literal>JOIN</> pour contrôler l'ordre de jointure. En l'absence de 
    400      parenthèses, les clauses <literal>JOIN</> sont imbriquées de gauche à 
     396     parenthèses, les clauses <literal>JOIN</> s'imbriquent de gauche à 
    401397     droite. 
    402398    </para> 
    403399 
    404400    <para> 
    405      Pour rassembler tout ceci, supposons que nous avons une table 
     401     Pour résumer, supposons que nous ayons une table 
    406402     <literal>t1</literal> 
    407403<programlisting> 
    408  num | name 
     404 num | nom 
    409405-----+------ 
    410406   1 | a 
     
    414410     et une table <literal>t2</literal> 
    415411<programlisting> 
    416  num | value 
     412 num | valeur 
    417413-----+------- 
    418414   1 | xxx 
     
    420416   5 | zzz 
    421417</programlisting> 
    422      nous obtenons les résultats suivants des différentes jointures&nbsp;: 
     418     nous obtenons les résultats suivants pour les différentes jointures&nbsp;: 
    423419<screen> 
    424420<prompt>=></> <userinput>SELECT * FROM t1 CROSS JOIN t2;</> 
    425  num | name | num | value 
    426 -----+------+-----+------- 
    427    1 | a    |   1 | xxx 
    428    1 | a    |   3 | yyy 
    429    1 | a    |   5 | zzz 
    430    2 | b    |   1 | xxx 
    431    2 | b    |   3 | yyy 
    432    2 | b    |   5 | zzz 
    433    3 | c    |   1 | xxx 
    434    3 | c    |   3 | yyy 
    435    3 | c    |   5 | zzz 
     421 num | nom | num | valeur 
     422-----+-----+-----+------- 
     423   1 | a   |   1 | xxx 
     424   1 | a   |   3 | yyy 
     425   1 | a   |   5 | zzz 
     426   2 | b   |   1 | xxx 
     427   2 | b   |   3 | yyy 
     428   2 | b   |   5 | zzz 
     429   3 | c   |   1 | xxx 
     430   3 | c   |   3 | yyy 
     431   3 | c   |   5 | zzz 
    436432(9 rows) 
    437433 
    438434<prompt>=></> <userinput>SELECT * FROM t1 INNER JOIN t2 ON t1.num = t2.num;</> 
    439  num | name | num | value 
    440 -----+------+-----+------- 
    441    1 | a    |   1 | xxx 
    442    3 | c    |   3 | yyy 
     435 num | nom | num | valeur 
     436-----+-----+-----+------- 
     437   1 | a   |   1 | xxx 
     438   3 | c   |   3 | yyy 
    443439(2 rows) 
    444440 
    445441<prompt>=></> <userinput>SELECT * FROM t1 INNER JOIN t2 USING (num);</> 
    446  num | name | value 
    447 -----+------+------- 
    448    1 | a    | xxx 
    449    3 | c    | yyy 
     442 num | nom | valeur 
     443-----+-----+------- 
     444   1 | a   | xxx 
     445   3 | c   | yyy 
    450446(2 rows) 
    451447 
    452448<prompt>=></> <userinput>SELECT * FROM t1 NATURAL INNER JOIN t2;</> 
    453  num | name | value 
    454 -----+------+------- 
    455    1 | a    | xxx 
    456    3 | c    | yyy 
     449 num | nom | valeur 
     450-----+-----+------- 
     451   1 | a   | xxx 
     452   3 | c   | yyy 
    457453(2 rows) 
    458454 
    459455<prompt>=></> <userinput>SELECT * FROM t1 LEFT JOIN t2 ON t1.num = t2.num;</> 
    460  num | name | num | value 
    461 -----+------+-----+------- 
    462    1 | a    |   1 | xxx 
    463    2 | b    |     | 
    464    3 | c    |   3 | yyy 
     456 num | nom | num | valeur 
     457-----+-----+-----+------- 
     458   1 | a   |   1 | xxx 
     459   2 | b   |     | 
     460   3 | c   |   3 | yyy 
    465461(3 rows) 
    466462 
    467463<prompt>=></> <userinput>SELECT * FROM t1 LEFT JOIN t2 USING (num);</> 
    468  num | name | value 
    469 -----+------+------- 
    470    1 | a    | xxx 
    471    2 | b    | 
    472    3 | c    | yyy 
     464 num | nom | valeur 
     465-----+-----+------- 
     466   1 | a   | xxx 
     467   2 | b   | 
     468   3 | c   | yyy 
    473469(3 rows) 
    474470 
    475471<prompt>=></> <userinput>SELECT * FROM t1 RIGHT JOIN t2 ON t1.num = t2.num;</> 
    476  num | name | num | value 
    477 -----+------+-----+------- 
    478    1 | a    |   1 | xxx 
    479    3 | c    |   3 | yyy 
    480      |      |   5 | zzz 
     472 num | nom | num | valeur 
     473-----+-----+-----+------- 
     474   1 | a   |   1 | xxx 
     475   3 | c   |   3 | yyy 
     476     |     |   5 | zzz 
    481477(3 rows) 
    482478 
    483479<prompt>=></> <userinput>SELECT * FROM t1 FULL JOIN t2 ON t1.num = t2.num;</> 
    484  num | name | num | value 
    485 -----+------+-----+------- 
    486    1 | a    |   1 | xxx 
    487    2 | b    |     | 
    488    3 | c    |   3 | yyy 
    489      |      |   5 | zzz 
     480 num | nom | num | valeur 
     481-----+-----+-----+------- 
     482   1 | a   |   1 | xxx 
     483   2 | b   |     | 
     484   3 | c   |   3 | yyy 
     485     |     |   5 | zzz 
    490486(4 rows) 
    491487</screen> 
     
    494490    <para> 
    495491     La condition de jointure spécifiée avec <literal>ON</> peut aussi contenir 
    496      des conditions sans relation directe avec la jointure. Ceci peut prouver 
    497      son utilité pour quelques requêtes mais son utilisation doit avoir été 
    498      réfléchie. Par exemple&nbsp;: 
     492     des conditions sans relation directe avec la jointure. Par exemple&nbsp;: 
    499493<screen> 
    500494<prompt>=></> <userinput>SELECT * FROM t1 LEFT JOIN t2 ON t1.num = t2.num AND t2.value = 'xxx';</> 
    501  num | name | num | value 
    502 -----+------+-----+------- 
    503    1 | a    |   1 | xxx 
    504    2 | b    |     | 
    505    3 | c    |     | 
     495 num | nom | num | valeur 
     496-----+-----+-----+------- 
     497   1 | a   |   1 | xxx 
     498   2 | b   |     | 
     499   3 | c   |     | 
    506500(3 rows) 
    507501</screen> 
     
    524518    <para> 
    525519     Un nom temporaire peut être donné aux tables et aux références de tables 
    526      complexe, qui sera ensuite utilisé pour référencer la table dérivée dans la 
    527      suite de l'exécution. Cela s'appelle un <firstterm>alias de 
    528      table</firstterm>. 
    529     </para> 
    530  
    531     <para> 
    532      Pour créer un alias de table, écrivez 
    533 <synopsis> 
    534 FROM <replaceable>reference_table</replaceable> AS 
    535 <replaceable>alias</replaceable> 
    536 </synopsis> 
    537      or 
     520     complexes. Celui-ci sera ensuite utilisé pour faire référence à la table dérivée dans la 
     521     suite de l'exécution. On appelle cela un <firstterm>alias de table</firstterm>. 
     522    </para> 
     523 
     524    <para> 
     525     Pour créer un alias de table, il suffit d'écrire 
     526<synopsis> 
     527FROM <replaceable>reference_table</replaceable> AS <replaceable>alias</replaceable> 
     528</synopsis> 
     529     ou 
    538530<synopsis> 
    539531FROM <replaceable>reference_table</replaceable> <replaceable>alias</replaceable> 
    540532</synopsis> 
    541      Le mot clé <literal>AS</literal> est du bruit. 
    542      <replaceable>alias</replaceable> peut être tout identifiant. 
     533     Le mot clé <literal>AS</literal> n'est pas nécessaire. 
     534     <replaceable>alias</replaceable> peut être n'importe quel identifiant. 
    543535    </para> 
    544536 
    545537    <para> 
    546538     Une application typique des alias de table est l'affectation d'identifiants 
    547      cours pour les noms de tables longs, ce qui permet de garder des clauses de 
     539     courts pour les noms de table longs, ce qui permet de garder des clauses de 
    548540     jointures lisibles. Par exemple&nbsp;: 
    549541<programlisting> 
    550 SELECT * FROM nom_de_table_tres_tres_long s JOIN un_autre_nom_trs_long a ON 
    551 s.id = a.num; 
     542SELECT * FROM nom_de_table_tres_long n JOIN un_autre_nom_assez_long u ON n.id = u.num; 
    552543</programlisting> 
    553544    </para> 
     
    560551SELECT * FROM ma_table AS m WHERE ma_table.a > 5; 
    561552</programlisting> 
    562      n'est pas valide pour une syntaxe SQL. Ce qui va réellement se passer 
    563      (c'est une extension de <productname>PostgreSQL</productname> au standard) 
    564      est qu'une référence de table implicite est ajoutée à la clause 
    565      <literal>FROM</literal>, de façon à ce que la requête soit exécutée comme 
    566      si elle était écrite ainsi 
     553     n'est pas une syntaxe SQL valide. En réalité, (c'est une extension du standard 
     554     proposée par <productname>PostgreSQL</productname>) une référence de table 
     555     implicite est ajoutée à la clause <literal>FROM</literal>, de façon à ce 
     556     que la requête soit exécutée comme si elle était écrite ainsi 
    567557<programlisting> 
    568558SELECT * FROM ma_table AS m, ma_table AS ma_table WHERE ma_table.a > 5; 
    569559</programlisting> 
    570      ce qui résultera en une jointure croisée, ce qui n'est habituellement pas 
    571      ce que vous voulez. 
    572     </para> 
    573  
    574     <para> 
    575      Les alias de table sont disponibles principalement pour aider à l'écriture 
    576      de requête mais ils deviennent nécessaires pour joindre une table avec 
     560     ce qui aboutira à une jointure croisée. Et ce n'est habituellement pas 
     561     ce qui est attendu. 
     562    </para> 
     563 
     564    <para> 
     565     Les alias de table sont essentiellement disponibles pour faciliter l'écriture 
     566     de requêtes mais ils apparaissent nécessaires pour joindre une table avec 
    577567     elle-même, par exemple 
    578568<programlisting> 
    579569SELECT * FROM ma_table AS a CROSS JOIN ma_table AS b ... 
    580570</programlisting> 
    581      De plus, un alias est requis si la référence de la table est une 
     571     De plus, un alias est requis si la référence de table est une 
    582572     sous-requête (voir <xref linkend="queries-subqueries">). 
    583573    </para> 
    584574 
    585575    <para> 
    586      Les parenthèses sont utilisées pour résoudre les ambiguités. L'instruction 
    587      suivante affectera l'alias <literal>b</literal> au résultat de la jointure 
    588      contrairement à l'exemple précédente&nbsp;: 
     576     Les parenthèses sont utilisées pour lever les ambiguités. L'instruction 
     577     suivante affectera le résultat de la jointure à l'alias <literal>b</literal>, 
     578     contrairement à l'exemple précédent&nbsp;: 
    589579<programlisting> 
    590580SELECT * FROM (ma_table AS a CROSS JOIN ma_table) AS b ... 
     
    596586     des tables&nbsp;: 
    597587<synopsis> 
    598 FROM <replaceable>reference_table</replaceable> <optional>AS</optional> 
    599 <replaceable>alias</replaceable> ( <replaceable>colonne1</replaceable> 
    600 <optional>, <replaceable>colonne2</replaceable> <optional>, 
    601 ...</optional></optional> ) 
    602 </synopsis> 
    603      Si le nombre d'alias de colonnes spécifié est plus petit que le nombre 
    604      de colonnes dont dispose la table réelle, les colonnes suivantes ne sont 
    605      pas renommées. Cette syntaxe est particulièrement utile dans le cas de 
    606      jointure de même table ou dans le cas de sous-requêtes. 
    607     </para> 
    608  
    609     <para> 
    610      Quand un alias est appliqué à la sortie d'une clause <literal>JOIN</> en 
    611 utilisant n'importe laquelle de ces formes, l'alias cache le nom original à 
    612 l'intérieur du <literal>JOIN</>. Par exemple, 
     588FROM <replaceable>reference_table</replaceable> <optional>AS</optional> <replaceable>alias</replaceable> ( <replaceable>colonne1</replaceable> <optional>, <replaceable>colonne2</replaceable> <optional>,...</optional></optional> ) 
     589</synopsis> 
     590     Si le nombre d'alias de colonnes spécifiés est plus petit que le nombre 
     591     de colonnes dont dispose la table réelle, les colonnes résiduelles ne sont 
     592     pas renommées. Cette syntaxe est particulièrement utile dans le cas 
     593     d'auto-jointures ou dans le cas de sous-requêtes. 
     594    </para> 
     595 
     596    <para> 
     597     Quand un alias est appliqué à la sortie d'une clause <literal>JOIN</>, 
     598     quelqu'en soit la forme, l'alias cache le nom original à l'intérieur du 
     599     <literal>JOIN</>. Par exemple, 
    613600<programlisting> 
    614601SELECT a.* FROM ma_table AS a JOIN ta_table AS b ON ... 
    615602</programlisting> 
    616      is valid SQL, but 
     603     est du SQL valide, mais 
    617604<programlisting> 
    618605SELECT a.* FROM (ma_table AS a JOIN ta_table AS b ON ...) AS c 
     
    631618 
    632619    <para> 
    633      Une sous-requête spécifiant une table dérivée doit être enfermée  
    634      dans des parenthèses et <emphasis>doit</emphasis> se voir affecté un alias  
     620     Une sous-requête spécifiant une table dérivée doit être écrite entre 
     621     parenthèses et <emphasis>doit</emphasis> se voir affecter un alias 
    635622     de table. (Voir <xref linkend="queries-table-aliases">.) Par exemple&nbsp;: 
    636623<programlisting> 
     
    640627 
    641628    <para> 
    642      Cette exemple est équivalent à <literal>FROM table1 AS 
    643      nom_alias</literal>. Des cas plus intéressants, qui ne peuvent pas être 
    644      réduit à une jointure pleine, arrivent quand la sous-requête implique un 
    645      groupement ou une agrégat. 
     629     Cet exemple est équivalent à <literal>FROM table1 AS nom_alias</literal>. 
     630     Des cas plus intéressants, qui ne peuvent pas être réduits à une jointure 
     631     pleine, surviennent quand la sous-requête implique un groupement ou un agrégat. 
    646632    </para> 
    647633   </sect3> 
     
    659645    <para> 
    660646     Les fonctions de table sont des fonctions produisant un ensemble de 
    661      lignes composées de types de données de base (types scalaires) ou de types 
    662      de données composés (lignes de table). Elles sont utilisées comme une 
    663      table, une vue ou une sous-requête de la clause <literal>FROM</> d'une 
    664      requête. Les colonnes renvoyées par les fonctions de table peuvent être 
     647     lignes composées de types de données basiques (types scalaires) ou de types 
     648     de données composites (lignes de table). Elles sont utilisées de la même façon 
     649     qu'une table, une vue ou une sous-requête de la clause <literal>FROM</> d'une 
     650     requête. Les colonnes retournées par les fonctions de table peuvent être 
    665651     incluses dans une clause <literal>SELECT</>, <literal>JOIN</> ou 
    666652     <literal>WHERE</> de la même manière qu'une colonne de table, vue ou 
     
    669655 
    670656    <para> 
    671      Si une fonction de table renvoie un type de données de base, la colonne 
     657     Si une fonction de table renvoie un type de données basique, la colonne 
    672658     de résultat est nommée comme la fonction. Si la fonction renvoie un type 
    673      composite, les colonnes résultants ont le même nom que les attributs 
     659     composite, les colonnes résultantes ont le même nom que les attributs 
    674660     individuels du type. 
    675661    </para> 
    676662 
    677663    <para> 
    678      Une fonction de table pourrait avoir un alias dans la clause 
    679      <literal>FROM</> mais elle pourrait être laissée sans alias. Si une 
    680      fonction est utilisée dans la clause <literal>FROM</> sans alias, le nom de 
    681      la fonction est utilisé comme nom de table résultante. 
     664     Une fonction de table peut avoir un alias dans la clause <literal>FROM</>. 
     665     Dans le cas contraire, le nom de la fonction est utilisé comme nom de table résultante. 
    682666    </para> 
    683667 
     
    687671CREATE TABLE truc (trucid int, trucsousid int, trucnom text); 
    688672 
    689 CREATE FUNCTION recuptruc(int) RETURNS SETOF foo AS ' 
     673CREATE FUNCTION recuptruc(int) RETURNS SETOF truc AS ' 
    690674    SELECT * FROM truc WHERE trucid = $1; 
    691675' LANGUAGE SQL; 
     
    703687 
    704688    <para> 
    705      Dans certains cas, il est utile de définir des fonctions de table pouvant 
    706      renvoyer des ensembles de colonnes différentes suivant la façon dont elles 
    707      sont appelées. Pour supporter ceci, la fonction de table est déclarée comme 
     689     Dans certains cas, il est utile de définir des fonctions de table qui 
     690     renvoient des ensembles de colonnes différents suivant la façon dont elles 
     691     sont appelées. Pour ce faire, la fonction de table est déclarée comme 
    708692     renvoyant le pseudotype <type>record</>. Quand une telle fonction est 
    709693     utilisée dans une requête, la structure de ligne attendue doit être 
    710      spécifiée dans la requête elle-même, de façon à ce que le système sache 
    711      comment analyser et planifier la requête. Considérez cet exemple&nbsp;: 
     694     spécifiée dans la requête elle-même. De cette façon, le système saura 
     695     comment analyser et planifier la requête. Par exemple&nbsp;: 
    712696<programlisting> 
    713697SELECT * 
     
    717701</programlisting> 
    718702     La fonction <literal>dblink</> exécute une requête distante (voir 
    719      <filename>contrib/dblink</>). Elle déclare renvoyer le type 
    720      <type>record</> car elle pourrait être utilisée pour tout type de requête. 
    721      L'ensemble de colonnes réelles doit être spécifié dans la requête appelant 
    722      de façon à ce que l'analyseur sache, par exemple, ce que comment 
    723      étendre <literal>*</>. 
     703     <filename>contrib/dblink</>). Elle a été déclarée avec un type de retour 
     704     <type>record</>, puisqu'elle peut être utilisée pour tout type de requête. 
     705     L'ensemble de colonnes réelles doit être spécifié dans la requête appelante 
     706     de sorte que l'analyseur sache, par exemple, comment étendre <literal>*</>. 
    724707    </para> 
    725708   </sect3> 
     
    738721WHERE <replaceable>condition_recherche</replaceable> 
    739722</synopsis> 
    740     où <replaceable>condition_recherche</replaceable> est toute expression de 
    741     valeur définie dans <xref linkend="sql-expressions"> et renvoyant une valeur 
    742     de type <type>boolean</type>. 
    743    </para> 
    744  
    745    <para> 
    746     Après la réalisation de la clause <literal>FROM</>, chaque ligne de la 
    747     table virtuelle dérivée est vérifiée avec la condition de recherche. Si le 
    748     résultat de la vérification est positive (true), la ligne est conservée dans 
    749     la table de sortie, sinon (c'est-à-dire si le résultat est faux ou nul, la 
    750     ligne est abandonnée. La condition de recherche référence typiquement au 
    751     moins quelques colonnes de la table générée dans la clause 
    752     <literal>FROM</>&nbsp;; ceci n'est pas requis mais, dans le cas contraire, 
    753     la clause <literal>WHERE</> n'aurait aucune utilité. 
     723    où <replaceable>condition_recherche</replaceable> est une expression de 
     724    valeur, telle que définie dans <xref linkend="sql-expressions">, qui retourne 
     725    une valeur de type <type>boolean</type>. 
     726   </para> 
     727 
     728   <para> 
     729    Après le traitement de la clause <literal>FROM</>, chaque ligne de la 
     730    table virtuelle dérivée est confrontée à la condition de recherche. Si le 
     731    résultat de la vérification est positif (true), la ligne est conservée dans 
     732    la table de sortie, sinon (c'est-à-dire si le résultat est faux ou nul) la 
     733    ligne est abandonnée. La condition de recherche fait, en général, référence 
     734    à une colonne de la table engendrée dans la clause <literal>FROM</>&nbsp;; 
     735    ceci n'est pas impératif mais, dans le cas contraire, la clause <literal>WHERE</> 
     736    s'avère inutile. 
    754737   </para> 
    755738 
     
    758741     Avant l'implémentation de la syntaxe <literal>JOIN</>, il était nécessaire 
    759742     de placer la condition de jointure d'une jointure interne dans la clause 
    760      <literal>WHERE</>. Par exemple, ces expressions de tables sont 
    761      équivalentes&nbsp;: 
     743     <literal>WHERE</>. Les expressions de tables suivantes sont équivalentes&nbsp;: 
    762744<programlisting> 
    763745FROM a, b WHERE a.id = b.id AND b.val &gt; 5 
     
    767749FROM a INNER JOIN b ON (a.id = b.id) WHERE b.val &gt; 5 
    768750</programlisting> 
    769      ou même peut-être 
     751     ou même 
    770752<programlisting> 
    771753FROM a NATURAL JOIN b WHERE b.val &gt; 5 
    772754</programlisting> 
    773      Laquelle vous utilisez est plutôt une affaire de style. La syntaxe 
    774      <literal>JOIN</> dans la clause <literal>FROM</> n'est probablement pas 
    775      aussi portable vers les autres systèmes de gestion de bases de données SQL. 
    776      Pour les jointures externes, il n'y a pas d'autres choix&nbsp;: elles 
    777      doivent être faites dans la clause <literal>FROM</> clause. Une clause 
     755     L'utilisation de l'une par rapport à l'autre est affaire de style. La syntaxe 
     756     <literal>JOIN</> dans la clause <literal>FROM</> n'est pas forcément très 
     757     portable vers les autres systèmes de gestion de bases de données SQL. 
     758     Pour les jointures externes, il n'y qu'une seule possibilité&nbsp;: elles 
     759     doivent être faites dans la clause <literal>FROM</>. Une clause 
    778760     <literal>ON</>/<literal>USING</> d'une jointure externe n'est 
    779761     <emphasis>pas</> équivalente à une condition <literal>WHERE</> parce 
    780      qu'elle détermine l'ajout de lignes (pour les lignes qui ne correspondent 
    781      pas en entrée) ainsi que pour la suppression de lignes dans le résultat 
    782      final. 
     762     qu'elle détermine l'ajout de lignes (pour les lignes en entrée sans 
     763     correspondance) ainsi que la suppression de lignes dans le résultat final. 
    783764    </para> 
    784765   </note> 
     
    802783    <literal>FROM</>. Les lignes qui ne correspondent pas à la condition de la 
    803784    recherche de la clause <literal>WHERE</> sont éliminées de la table 
    804     <literal>fdt</literal>. Notez l'utilisation de sous-requêtes scalaires en 
    805     tant qu'expressions de valeurs. Comme n'importe quelle autre requête, les 
    806     sous-requêtes peuvent employer des expressions de tables complexes. Notez 
    807     aussi comment <literal>fdt</literal> est référencée dans les sous-requêtes. 
    808     Qualifier <literal>c1</> comme <literal>fdt.c1</> est seulement nécessaire 
    809     si <literal>c1</> est aussi le nom d'une colonne dans la table d'entrée 
    810     dérivée de la sous-requête. Mais qualifier le nom de colonne ajoute à la 
    811     clarté même lorsque cela n'est pas nécessaire. Cet exemple montre comment 
    812     le nom de colonne d'une requête externe est étendue dans les requêtes 
    813     internes. 
     785    <literal>fdt</literal>. On peut noter l'utilisation de sous-requêtes scalaires 
     786    comme expressions de valeurs. A l'instar de n'importe quelle autre requête, les 
     787    sous-requêtes peuvent employer des expressions de tables complexes. On peut 
     788    également noter la façon dont <literal>fdt</literal> est référencée dans les 
     789    sous-requêtes. Qualifier <literal>c1</> sous la forme <literal>fdt.c1</> n'est 
     790    nécessaire que si <literal>c1</> est aussi le nom d'une colonne dans la table 
     791    dérivée en entrée de la sous-requête. Mais qualifier le nom de colonne, même lorsque cela 
     792    n'est pas nécessaire, ajoute à la clarté. Cet exemple montre comment le nommage 
     793    de colonne d'une requête externe est étendu dans les requêtes internes. 
    814794   </para> 
    815795  </sect2> 
     
    830810   <para> 
    831811    Après avoir passé le filtre <literal>WHERE</>, la table d'entrée dérivée 
    832     peut être sujette à un regroupement en utilisant la clause <literal>GROUP 
    833     BY</> et à une élimination de groupe de lignes avec la clause 
     812    peut faire l'objet d'un regroupement par l'utilisation de la clause 
     813    <literal>GROUP BY</> et d'une élimination de lignes groupées par la clause 
    834814    <literal>HAVING</>. 
    835815   </para> 
     
    839819    FROM ... 
    840820    <optional>WHERE ...</optional> 
    841     GROUP BY <replaceable>reference_colonne_regroupement</replaceable> 
    842 <optional>, 
    843 <replaceable>reference_colonne_regroupement</replaceable></optional>... 
    844 </synopsis> 
    845  
    846    <para> 
    847     La clause <literal>GROUP BY</> est utilisée pour regrouper des lignes d'une 
    848     table partageant les mêmes valeurs dans toutes les colonnes précisées. 
     821    GROUP BY <replaceable>reference_colonne_regroupement</replaceable> <optional>, <replaceable>reference_colonne_regroupement</replaceable></optional>... 
     822</synopsis> 
     823 
     824   <para> 
     825    La clause <literal>GROUP BY</> est utilisée pour regrouper les lignes d'une 
     826    table qui partagent les mêmes valeurs pour toutes les colonnes précisées. 
    849827    L'ordre dans lequel ces colonnes sont indiquées importe peu. Le but est de 
    850     réduire chaque groupe de lignes partageant des valeurs communes en un seul 
    851     groupe de ligne représentant toutes les lignes du groupe. Ceci se fait en 
    852     éliminant les redondances dans la sortie et/ou pour calculer les agrégats 
     828    réduire chaque groupe de lignes partageant des valeurs communes en une seule 
     829    ligne de groupe représentative de toutes les lignes du groupe. Ceci est fait 
     830    pour éliminer les redondances dans la sortie et/ou pour calculer les agrégats 
    853831    s'appliquant à ces groupes. Par exemple&nbsp;: 
    854832<screen> 
     
    873851           
    874852   <para> 
    875     Dans la seconde requête, nous n'aurions pas pu écrire <literal>SELECT * 
    876     FROM test1 GROUP BY x</literal> parce qu'il n'existe pas une seule valeur 
    877     pour la colonne <literal>y</> pouvant être associé avec chaque autre groupe. 
     853    Dans la seconde requête, il n'est pas possible d'écrire <literal>SELECT * 
     854    FROM test1 GROUP BY x</literal> parce qu'il n'existe pas de valeur unique 
     855    pour la colonne <literal>y</> pouvant être associée avec chaque autre groupe. 
    878856    Les colonnes de regroupement peuvent être référencées dans la liste de 
    879857    sélection car elles ont une valeur constante connue par groupe. 
     
    881859 
    882860   <para> 
    883     En général, si une table est groupée, les colonnes qui ne sont pas 
    884     utilisées dans le regroupement ne peuvent pas être référencées sauf dans les 
     861    En général, si une table est groupée, il ne peut pas être fait référence aux 
     862    colonnes qui ne sont pas utilisées dans le regroupement sinon dans les 
    885863    expressions d'agrégats. Voici un exemple d'expressions d'agrégat&nbsp;: 
    886864<screen> 
     
    893871(3 rows) 
    894872</screen> 
    895     Ici, <literal>sum</literal> est la fonction d'agrégat qui calcule une seule 
    896     valeur pour le groupe entier. Plus d'informations sur les fonctions 
    897     d'agrégats disponibles sont proposées dans <xref 
    898     linkend="functions-aggregate">. 
     873    Ici, <literal>sum</literal> est une fonction d'agrégat qui calcule une 
     874    valeur unique pour tout le groupe. On pourra touver plus d'informations sur 
     875    les fonctions d'agrégats disponibles dans <xref linkend="functions-aggregate">. 
    899876   </para> 
    900877 
    901878   <tip> 
    902879    <para> 
    903      Le regroupement sans expressions d'agrégats calcule effectivement 
    904      l'ensemble les valeurs distinctes d'une colonne. Ceci peut aussi se faire 
    905      en utilisant la clause <literal>DISTINCT</> (voir <xref 
    906      linkend="queries-distinct">). 
     880     Le regroupement sans expression d'agrégats calcule effectivement 
     881     l'ensemble des valeurs distinctes d'une colonne. Le même résultat peut être obtenu 
     882     à l'aide de la clause <literal>DISTINCT</> (voir <xref linkend="queries-distinct">). 
    907883    </para> 
    908884   </tip> 
    909885 
    910886   <para> 
    911     Voici un autre exemple&nbsp;: il calcule les vantes totales pour chaque 
    912     produit (plutôt que le total des ventes sur tous les produits). 
     887    L'exemple suivant calcule les ventes totales pour chaque produit (plutôt que 
     888    le total des ventes sur tous les produits). 
    913889<programlisting> 
    914890SELECT produit_id, p.nom, (sum(v.unite) * p.prix) AS ventes 
     
    917893</programlisting> 
    918894    Dans cet exemple, les colonnes <literal>produit_id</literal>, 
    919     <literal>p.nom</literal> et <literal>p.prix</literal> doivent être dans la 
     895    <literal>p.nom</literal> et <literal>p.prix</literal> doivent se trouver dans la 
    920896    clause <literal>GROUP BY</> car elles sont référencées dans la liste de 
    921897    sélection de la requête. (Suivant la façon dont est conçue la table 
    922     produits, le nom et le prix pourraient être totalement dépendants de l'ID du 
    923     produit, donc des regroupements supplémentaires pourraient théoriquement 
    924     être inutiles mais ceci n'est pas encore implémenté.) La colonne 
     898    produits, le nom et le prix peuvent être totalement dépendants de l'ID du 
     899    produit et de ce fait, les regroupements supplémentaires ne sont théoriquement pas 
     900    nécessaires. Mais ceci n'est pas encore implémenté.) La colonne 
    925901    <literal>s.unite</> n'a pas besoin d'être dans la liste <literal>GROUP 
    926     BY</> car elle est seulement utilisée dans l'expression de l'agrégat 
     902    BY</> car elle est utilisée uniquement dans l'expression de l'agrégat 
    927903    (<literal>sum(...)</literal>) représentant les ventes d'un produit. Pour 
    928904    chaque produit, la requête renvoie une ligne de résumé sur les ventes de ce 
     
    931907 
    932908   <para> 
    933     En SQL strict, <literal>GROUP BY</> peut seulement grouper les colonnes de 
    934     la table source mais <productname>PostgreSQL</productname> étend ceci en 
    935     autorisant <literal>GROUP BY</> à grouper aussi les colonnes de la liste de 
    936     sélection. Grouper par expressions de valeurs au lieu de simples noms de 
    937     colonnes est aussi permis. 
     909    La norme SQL standard ne définit pour <literal>GROUP BY</> que le groupement 
     910    par colonnes de la table source. <productname>PostgreSQL</productname> autorise 
     911    également <literal>GROUP BY</> à grouper par colonnes de la liste de 
     912    sélection. Grouper par expressions de valeurs plutôt que par simples noms de 
     913    colonne est également autorisé. 
    938914   </para> 
    939915 
     
    943919 
    944920   <para> 
    945     Si une table a été groupée en utilisant la clause <literal>GROUP 
    946     BY</literal> mais que seul certains groupes sont intéressants, la clause 
    947     <literal>HAVING</literal> peut être utilisée, plus comme une clause 
    948     <literal>WHERE</>, pour éliminer les groupes d'une table groupée. Voici la 
    949     syntaxe&nbsp;: 
    950 <synopsis> 
    951 SELECT <replaceable>liste_selection</replaceable> FROM ... <optional>WHERE 
    952 ...</optional> GROUP BY ... HAVING 
    953 <replaceable>expression_booléenne</replaceable> 
    954 </synopsis> 
    955     Les expressions de la clause <literal>HAVING</> peuvent référer à la fois 
    956     aux expressions groupées et aux expressions non groupées (ce qui impliquent 
     921    Si une table a été groupée en utilisant la clause <literal>GROUP BY</literal> 
     922    mais que seuls certains groupes ont un intérêt, la clause 
     923    <literal>HAVING</literal> peut être utilisée, à l'instar d'une clause 
     924    <literal>WHERE</>, pour éliminer les groupes d'une table groupée. La syntaxe 
     925    est la suivante&nbsp;: 
     926<synopsis> 
     927SELECT <replaceable>liste_selection</replaceable> FROM ... <optional>WHERE ...</optional> GROUP BY ... HAVING <replaceable>expression_booléenne</replaceable> 
     928</synopsis> 
     929    Les expressions de la clause <literal>HAVING</> peuvent faire référence autant 
     930    à des expressions groupées qu'à des expressions non groupées (impliquant 
    957931    nécessairement une fonction d'agrégat). 
    958932   </para> 
     
    978952 
    979953   <para> 
    980     De nouveau, un exemple plus réaliste&nbsp;: 
     954    L'exemple suivant est plus réaliste&nbsp;: 
    981955<programlisting> 
    982956SELECT produit_id, p.nom, (sum(v.unite) * (p.prix - p.cout)) AS profit 
     
    984958    WHERE v.date > CURRENT_DATE - INTERVAL '4 weeks' 
    985959    GROUP BY produit_id, p.nom, p.prix, p.cout 
    986     HAVING sum(p.prix * s.unite) > 5000; 
     960    HAVING sum(p.prix * v.unite) > 5000; 
    987961</programlisting> 
    988962    Dans l'exemple ci-dessus, la clause <literal>WHERE</> sélectionne les 
    989     lignes par une colonne qui n'est pas groupée (l'expression est vraie 
     963    lignes à partir d'une colonne qui n'est pas groupée (l'expression est vraie 
    990964    seulement pour les ventes des quatre dernières semaines) alors que la 
    991965    clause <literal>HAVING</> restreint la sortie aux groupes dont le total des 
    992966    ventes dépasse 5000. Notez que les expressions d'agrégats n'ont pas besoin 
    993     d'être identiques dans toutes les parties d'une requête. 
     967    d'être les mêmes dans toutes les parties d'une requête. 
    994968   </para> 
    995969  </sect2> 
     
    1006980 
    1007981  <para> 
    1008    Comme montré dans la section précédente, l'expression de table pour la 
    1009 commande <command>SELECT</command> construit une table virtuelle intermédiaire 
    1010 en combinant les tables, vues, en éliminant les lignes, en groupant, etc. Cette 
    1011 table est finalement passée à la réalisation de la <firstterm>liste de 
    1012 sélection</firstterm>. Cette liste détermine les <emphasis>colonnes</emphasis> 
    1013 de la table intermédiaire à afficher. 
     982   Comme cela a été vu dans la section précédente, l'expression de table 
     983   pour la commande <command>SELECT</command> construit une table virtuelle 
     984   intermédiaire en combinant les tables et les vues, en éliminant des lignes, en 
     985   réalisant des groupements, etc. Cette table est finalement transmise pour 
     986   traitement à la <firstterm>liste de sélection</firstterm>. 
     987   Cette liste détermine les <emphasis>colonnes</emphasis> de la table intermédiaire 
     988   à afficher. 
    1014989  </para> 
    1015990 
     
    10251000    émet toutes les colonnes que l'expression de table produit. Sinon, une liste 
    10261001    de sélection est une liste d'expressions de valeurs séparées par des 
    1027     virgules (comme défini dans <xref linkend="sql-expressions">). Par exemple, 
    1028     cela pourrait être une liste des noms de colonnes&nbsp;: 
     1002    virgules (comme défini dans <xref linkend="sql-expressions">). Cela peut, par 
     1003    exemple, être une liste de noms de colonnes&nbsp;: 
    10291004<programlisting> 
    10301005SELECT a, b, c FROM ... 
    10311006</programlisting> 
    1032      Les noms de colonnes <literal>a</>, <literal>b</> et <literal>c</> sont 
     1007     Les noms de colonnes <literal>a</>, <literal>b</> et <literal>c</> sont, 
    10331008     soit les noms actuels des colonnes des tables référencées dans la clause 
    1034      <literal>FROM</> soit les alias qui leur ont été donnés (voir l'explication 
     1009     <literal>FROM</>, soit les alias qui leur ont été donnés (voir l'explication 
    10351010     dans <xref linkend="queries-table-aliases">). L'espace de nom disponible 
    10361011     dans la liste de sélection est le même que dans la clause <literal>WHERE</> 
    1037      sauf si le regroupement est utilisé, auquel cas c'est le même que dans la 
     1012     sauf si un regroupement est utilisé, auquel cas c'est le même que dans la 
    10381013     clause <literal>HAVING</>. 
    10391014   </para> 
    10401015 
    10411016   <para> 
    1042     Si plus d'une table a une colonne du même nom, le nom de la table doit 
    1043 aussi être donné comme dans 
     1017    Si plusieurs tables ont une colonne du même nom, le nom de la table doit aussi 
     1018    être donné, comme dans 
    10441019<programlisting> 
    10451020SELECT tbl1.a, tbl2.a, tbl1.b FROM ... 
    10461021</programlisting> 
    1047     En travaillant avec plusieurs tables, il est aussi utile de demander toutes 
    1048     les colonnes d'une table particulière&nbsp;: 
     1022    En travaillant avec plusieurs tables, il peut aussi être utile de demander 
     1023    toutes les colonnes d'une table particulière&nbsp;: 
    10491024<programlisting> 
    10501025SELECT tbl1.*, tbl2.a FROM ... 
     
    10551030   <para> 
    10561031    Si une expression de valeur arbitraire est utilisée dans la liste de 
    1057     sélection, il ajoute conceptuellement une nouvelle colonne virtuelle dans la 
     1032    sélection, cela ajoute conceptuellement une nouvelle colonne virtuelle à la 
    10581033    table renvoyée. L'expression de valeur est évaluée une fois pour chaque 
    1059     ligne avec une substitution des valeurs de lignes avec les références de 
     1034    ligne, les valeurs de lignes étant substituées pour chaque référence de 
    10601035    colonnes. Mais les expressions de la liste de sélection n'ont pas à 
    1061     référencer les colonnes dans l'expression de la table de la clause 
    1062     <literal>FROM</>&nbsp;; elles pourrait être des expressions arithmétiques 
    1063     constantes, par exemple. 
     1036    faire référence aux colonnes de l'expression de table issue de la clause 
     1037    <literal>FROM</>&nbsp;; elles pourraient, par exemple, aussi bien être des 
     1038    expressions arithmétiques constantes. 
    10641039   </para> 
    10651040  </sect2> 
     
    10751050   <para> 
    10761051    Les entrées dans la liste de sélection peuvent se voir affecter des noms 
    1077     pour la suite de l'exécution. La <quote>suite de l'exécution</quote> dans ce 
    1078     cas est une spécification optionnelle du tri et l'application client 
    1079     (c'est-à-dire les en-têtes de colonne pour l'affichage). Par exemple&nbsp;: 
     1052    pour la suite du traitement. La <quote>suite du traitement</quote> dans le 
     1053    cas présent est une spécification optionnelle du tri et l'application client 
     1054    (les en-têtes de colonne pour l'affichage, par exemple). Ainsi&nbsp;: 
    10801055<programlisting> 
    10811056SELECT a AS value, b + c AS sum FROM ... 
     
    10841059 
    10851060   <para> 
    1086     Si aucun nom de colonne en sortie n'est spécifié en utilisant 
    1087     <literal>AS</>, le système affecte un nom par défaut. Pour les références de 
    1088     colonne simple, c'est le nom de la colonne référencée. Pour les appels de 
     1061    Si aucun nom de colonne en sortie n'est spécifié par l'utilisation de <literal>AS</>, 
     1062    le système affecte un nom par défaut. Pour les références de colonne simple, 
     1063    c'est le nom de la colonne référencée. Pour les appels de 
    10891064    fonction, il s'agit du nom de la fonction. Pour les expressions complexes, 
    1090     le système générera un nom générique. 
     1065    le système engendrera un nom générique. 
    10911066   </para> 
    10921067 
    10931068   <note> 
    10941069    <para> 
    1095      Le nom des colonnes en sortie est différent ici de ce qui est fait dans la 
     1070     Le nommage des colonnes en sortie est ici différent de celui qui est fait dans la 
    10961071     clause <literal>FROM</> (voir <xref linkend="queries-table-aliases">). Ce 
    1097      tube vous permettra en fait de renommer deux fois la même colonne mais le 
    1098      nom choisi dans la liste de sélection est celui qui sera passé. 
     1072     tube vous permettra en fait de renommer deux fois la même colonne, mais le 
     1073     nom choisi dans la liste de sélection est celui qui sera retenu. 
    10991074    </para> 
    11001075   </note> 
     
    11131088 
    11141089   <para> 
    1115     Après la réalisation de la liste de sélection, la table résultant pourrait 
    1116     être optionnellement sujet à l'élimination des duplications. Le mot clé 
     1090    Après le traitement de la liste de sélection, la table résultante peut 
     1091    faire optionnellement l'objet de l'élimination des duplicats. Le mot clé 
    11171092    <literal>DISTINCT</literal> est écrit directement après 
    1118     <literal>SELECT</literal> pour activer ceci&nbsp;: 
     1093    <literal>SELECT</literal> pour activer cela&nbsp;: 
    11191094<synopsis> 
    11201095SELECT DISTINCT <replaceable>liste_selection</replaceable> ... 
    11211096</synopsis> 
    1122     (Au lieu de <literal>DISTINCT</>, le mot <literal>ALL</literal> peut être 
     1097    (A la place de <literal>DISTINCT</>, le mot <literal>ALL</literal> peut être 
    11231098    utilisé pour sélectionner le comportement par défaut, la récupération de 
    11241099    toutes les lignes.) 
     
    11261101 
    11271102   <para> 
    1128     <indexterm><primary>valeur nulle</><secondary sortas="DISTINCT">dans 
     1103    <indexterm><primary>valeur nulle</><secondary sortas="DISTINCT">avec 
    11291104    DISTINCT</></indexterm> 
    11301105    Évidemment, les deux lignes sont considérées distinctes si elles diffèrent 
    1131     dans au moins une valeur de colonne. Les valeurs nulles sont considérées 
     1106    par au moins une valeur de colonne. Les valeurs nulles sont considérées 
    11321107    égales dans cette comparaison. 
    11331108   </para> 
    11341109 
    11351110   <para> 
    1136     Alternativement, une expression arbitraire peut déterminer quelles lignes 
    1137     doivent être considérées distinctes&nbsp;: 
    1138 <synopsis> 
    1139 SELECT DISTINCT ON (<replaceable>expression</replaceable> <optional>, 
    1140 <replaceable>expression</replaceable> ...</optional>) 
    1141 <replaceable>liste_selection</replaceable> ... 
     1111    Alternativement, une expression arbitraire peut permettre de déterminer les 
     1112    lignes à considérer distinctes&nbsp;: 
     1113<synopsis> 
     1114SELECT DISTINCT ON (<replaceable>expression</replaceable> <optional>, <replaceable>expression</replaceable> ...</optional>) <replaceable>liste_selection</replaceable> ... 
    11421115</synopsis> 
    11431116    Ici, <replaceable>expression</replaceable> est une expression de valeur 
    11441117    arbitraire, évaluée pour toutes les lignes. Les lignes dont toutes les 
    1145     expressions sont égales sont considérées comme dupliquées et seule la 
    1146     première ligne de cet ensemble est conservée dans la sortie. Notez que la 
    1147     <quote>première ligne</quote> d'un ensemble est non prévisible sauf si la 
     1118    expressions sont égales sont considérées dupliquées et seule la 
     1119    première ligne de cet ensemble est conservée dans la sortie. Il est notable 
     1120    que la <quote>première ligne</quote> d'un ensemble est imprévisible sauf si la 
    11481121    requête est triée sur assez de colonnes pour garantir une ordre unique des 
    1149     colonnes arrivant dans le filtre <literal>DISTINCT</>. (Le traitement de 
    1150     <literal>DISTINCT ON</> parvient après le tri de <literal>ORDER BY</>.) 
    1151    </para> 
    1152  
    1153    <para> 
    1154     La clause <literal>DISTINCT ON</> ne fait pas partie du standard SQL et est 
    1155     quelque fois considéré comme étant un mauvais style à cause de la nature 
    1156     potentiellement indéterminée de ses résultats. Avec l'utilisation judicieuse 
    1157     de <literal>GROUP BY</> et de sous-requêtes dans <literal>FROM</>, la 
    1158     construction peut être évitée mais elle représente souvent l'alternative la 
    1159     plus agréable. 
     1122    colonnes arrivant dans le filtre <literal>DISTINCT</>. (Le traitement par 
     1123    <literal>DISTINCT ON</> survient après le tri par <literal>ORDER BY</>.) 
     1124   </para> 
     1125 
     1126   <para> 
     1127    La clause <literal>DISTINCT ON</> ne fait pas partie du standard SQL. Elle est 
     1128    souvent considérée comme de mauvais style du fait de la nature 
     1129    potentiellement indéterminée de ses résultats. L'utilisation judicieuse 
     1130    de <literal>GROUP BY</> et de sous-requêtes dans la clause <literal>FROM</> 
     1131    permet d'éviter cette construction, mais elle représente souvent l'alternative la 
     1132    plus pratique. 
    11601133   </para> 
    11611134  </sect2> 
     
    11901163  <para> 
    11911164   Les résultats de deux requêtes peuvent être combinés en utilisant les  
    1192    opérations d'ensemble&nbsp;: union, intersection et différence. La syntaxe 
     1165   opérations ensemblistes&nbsp;: union, intersection et différence. La syntaxe 
    11931166   est 
    11941167<synopsis> 
     
    12011174</synopsis> 
    12021175   <replaceable>requete1</replaceable> et 
    1203    <replaceable>requete2</replaceable> sont les requêtes pouvant utiliser 
    1204    toutes les fonctionnalités discutées ici. Les opérations d'ensemble peuvent 
    1205    aussi être combinées et chaînées, par exemple 
    1206 <synopsis> 
    1207 <replaceable>requete1</replaceable> UNION <replaceable>requete2</replaceable> 
    1208 UNION <replaceable>requete3</replaceable> 
    1209 </synopsis> 
    1210    signifie réellement 
    1211 <synopsis> 
    1212 (<replaceable>requete1</replaceable> UNION <replaceable>requete2</replaceable>) 
    1213 UNION <replaceable>requete3</replaceable> 
    1214 </synopsis> 
    1215   </para> 
    1216  
    1217   <para> 
    1218    <literal>UNION</> ajoute effectivement le résultat de 
     1176   <replaceable>requete2</replaceable> sont des requêtes pouvant utiliser 
     1177   toutes les fonctionnalités discutées jusqu'ici. Les opérations ensemblistes peuvent 
     1178   également être combinées et chaînées. Ainsi 
     1179<synopsis> 
     1180<replaceable>requete1</replaceable> UNION <replaceable>requete2</replaceable> UNION <replaceable>requete3</replaceable> 
     1181</synopsis> 
     1182   qui signifie réellement 
     1183<synopsis> 
     1184(<replaceable>requete1</replaceable> UNION <replaceable>requete2</replaceable>) UNION <replaceable>requete3</replaceable> 
     1185</synopsis> 
     1186  </para> 
     1187 
     1188  <para> 
     1189   <literal>UNION</> ajoute simplement le résultat de 
    12191190   <replaceable>requete2</replaceable> au résultat de 
    1220    <replaceable>requete1</replaceable> (bien qu'il n'y ait pas de garantie 
    1221    qu'il s'agit de l'ordre dans lequel les lignes sont réellement renvoyées). De 
    1222    plus, il élimine toutes les lignes dupliquées, dans le sens de 
    1223    <literal>DISTINCT</>, sauf si <literal>UNION ALL</> est utilisée. 
     1191   <replaceable>requete1</replaceable> (il n'y a cependant aucune garantie 
     1192   sur l'ordre effectif de retour des lignes). De plus, toutes les lignes dupliquées 
     1193   sont éliminées, au sens de <literal>DISTINCT</>, à moins que <literal>UNION ALL</> 
     1194   ne soit utilisé. 
    12241195  </para> 
    12251196 
     
    12271198   <literal>INTERSECT</> renvoie toutes les lignes qui sont à la fois dans le 
    12281199   résultat de <replaceable>requete1</replaceable> et dans le résultat de 
    1229    <replaceable>requete2</replaceable>. Les lignes dupliquées sont éliminées 
     1200   <replaceable>requete2</replaceable>. Les lignes dupliquées sont éliminées, 
    12301201   sauf si <literal>INTERSECT ALL</> est utilisé. 
    12311202  </para> 
     
    12331204  <para> 
    12341205   <literal>EXCEPT</> renvoie toutes les lignes qui sont dans le résultat de 
    1235    <replaceable>requete1</replaceable> mais pas dans le résultat de 
    1236    <replaceable>requete2</replaceable>. (Ceci est quelque fois appelé la 
    1237    <firstterm>différence</> entre deux requêtes.) De nouveau, les lignes 
    1238    dupliquées sont éliminées sauf si <literal>EXCEPT ALL</> est utilisé. 
    1239   </para> 
    1240  
    1241   <para> 
    1242    Pour calculer l'union, l'intersection ou la différence de deux requêtes, les 
    1243    deux requêtes doivent être <quote>compatibles pour une union</quote>, ce qui 
    1244    signifie qu'elles doivent renvoyer le même nombre de colonnes et que les 
     1206   <replaceable>requete1</replaceable> mais pas dans celui de 
     1207   <replaceable>requete2</replaceable>. (On parle parfois de 
     1208   <firstterm>différence</> entre deux requêtes.) Là aussi, les lignes 
     1209   dupliquées sont éliminées, sauf si <literal>EXCEPT ALL</> est utilisé. 
     1210  </para> 
     1211 
     1212  <para> 
     1213   Pour calculer l'union, l'intersection ou la différence de deux requêtes, il est 
     1214   impératif que les deux requêtes soient <quote>compatibles pour une union</quote>. 
     1215   Cela signifie qu'elles doivent renvoyer le même nombre de colonnes et que les 
    12451216   colonnes correspondantes doivent avoir des types de données compatibles, 
    1246    comme décrit dans <xref linkend="typeconv-union-case">. 
     1217   comme cela est décrit dans <xref linkend="typeconv-union-case">. 
    12471218  </para> 
    12481219 </sect1> 
     
    12611232            
    12621233  <para> 
    1263    Après qu'une requête ait produit une table en sortie (après que la liste de 
    1264    sélection ait été traitée), elle peut être optionnellement triée. Si le tri 
    1265    n'a pas été choisi, les lignes sont renvoyées dans un ordre aléatoire. 
    1266    L'ordre réel dans ce cas dépendra des types de plan de parcours et de 
    1267    jointure et de l'ordre sur le disque mais vous ne devez pas vous y fier. Un 
    1268    tri particulier en sortie peut seulement être garantie si l'étape de tri est 
    1269    choisie explicitement. 
     1234   Après qu'une table de sortie ait été produite par une requête (après que la liste de 
     1235   sélection ait été traitée), elle peut être optionnellement triée. Dans le cas 
     1236   contraire, les lignes sont renvoyées dans un ordre aléatoire. 
     1237   L'ordre réel, dans ce cas, dépendra des types de plan de parcours et de 
     1238   jointure et de l'ordre des données sur le disque, mais on ne peut s'y fier. 
     1239   Seul le tri explicite permet de garantir un ordre particulier en sortie. 
    12701240  </para> 
    12711241 
     
    12751245SELECT <replaceable>liste_selection</replaceable> 
    12761246    FROM <replaceable>expression_table</replaceable> 
    1277     ORDER BY <replaceable>colonne1</replaceable> <optional>ASC | DESC</optional> 
    1278 <optional>, <replaceable>colonne2</replaceable> <optional>ASC | DESC</optional> 
    1279 ...</optional> 
    1280 </synopsis> 
    1281    <replaceable>colonne1</replaceable>, etc. réfèrent les colonnes de la liste 
    1282    de sélection. Ceci peut soit être le nom de sortie d'une colonne (voir 
    1283    <xref linkend="queries-column-labels">) ou le numéro d'une colonne. Voici 
    1284    quelques exemples&nbsp;: 
     1247    ORDER BY <replaceable>colonne1</replaceable> <optional>ASC | DESC</optional> <optional>, <replaceable>colonne2</replaceable> <optional>ASC | DESC</optional>...</optional> 
     1248</synopsis> 
     1249   <replaceable>colonne1</replaceable>, etc. font référence aux colonnes de la liste 
     1250   de sélection. Il peut s'agir du nom de sortie d'une colonne (voir 
     1251   <xref linkend="queries-column-labels">) ou du numéro d'une colonne. Quelques exemples&nbsp;: 
    12851252<programlisting> 
    12861253SELECT a, b FROM table1 ORDER BY a; 
     
    12911258 
    12921259  <para> 
    1293    Comme une extension du standard SQL, <productname>PostgreSQL</productname> 
    1294    autorise aussi l'ordre des expressions arbitraires&nbsp;: 
     1260   En extension au standard SQL, <productname>PostgreSQL</productname> 
     1261   autorise aussi le tri par des expressions arbitraires&nbsp;: 
    12951262<programlisting> 
    12961263SELECT a, b FROM table1 ORDER BY a + b; 
    12971264</programlisting> 
    1298    Les références des noms de colonnes dans la clause <literal>FROM</>, 
    1299    renommées dans la liste de sélection, sont aussi autorisées&nbsp;: 
     1265   Sont également autorisées les références aux noms de colonnes de la clause 
     1266   <literal>FROM</> qui sont renommées dans la liste de sélection&nbsp;: 
    13001267<programlisting> 
    13011268SELECT a AS b FROM table1 ORDER BY a; 
    13021269</programlisting> 
    13031270   Mais ces extensions ne fonctionnent pas dans les requêtes impliquant 
    1304    <literal>UNION</>, <literal>INTERSECT</> ou <literal>EXCEPT</> et ne sont 
    1305    pas portables dans les autres bases de données SQL. 
    1306   </para> 
    1307  
    1308   <para> 
    1309    Chaque spécification de colonne pourrait être suivie d'un 
    1310    <literal>ASC</> ou <literal>DESC</> optionnelle pour initialiser la 
    1311    direction du tri (ascendant ou descendant). L'ordre <literal>ASC</> est la 
    1312    valeur par défaut. L'ordre ascendant place les plus petites valeurs en 
    1313    premier où <quote>plus petit</quote> est défini en terme de l'opérateur 
    1314    <literal>&lt;</literal>. De façon similaire, l'ordre descendant est 
    1315    déterminé avec l'opérateur <literal>&gt;</literal>. 
     1271   <literal>UNION</>, <literal>INTERSECT</> ou <literal>EXCEPT</>. Elles ne sont, 
     1272   de plus, pas portables vers les autres bases de données SQL. 
     1273  </para> 
     1274 
     1275  <para> 
     1276   Chaque spécification de colonne peut être suivie d'un drapeau optionnel 
     1277   <literal>ASC</> ou <literal>DESC</> permettant de préciser la direction du tri 
     1278   (ascendant ou descendant). L'ordre <literal>ASC</> est la valeur par défaut. 
     1279   L'ordre ascendant place les plus petites valeurs en premier. <quote>Plus petit</quote> 
     1280   est défini conformément à l'opérateur <literal>&lt;</literal>. De façon similaire, 
     1281   l'ordre descendant est déterminé avec l'opérateur <literal>&gt;</literal>. 
    13161282    <footnote> 
    13171283     <para> 
    13181284      En fait, <productname>PostgreSQL</> utilise la <firstterm>classe 
    1319       d'opérateur B-tree par défaut</> pour le type de données de la colonne  
    1320       pour déterminer l'ordre de tri avec <literal>ASC</> et <literal>DESC</>. 
    1321       De façon conventionnelle, les types de données seront initialisés de 
    1322       façon à ce que les opérateurs <literal>&lt;</literal> et 
    1323       <literal>&gt;</literal> correspondent à cet ordre de tri mais un 
    1324       concepteur des types de données définis par l'utilisateur pourrait choisir 
    1325       de faire quelque chose de différent. 
     1285      d'opérateur par défaut, B-tree</> pour le type de données de la colonne. 
     1286      Cette classe permet de déterminer l'ordre de tri utilisé par <literal>ASC</> 
     1287      et <literal>DESC</>. Par convention, les types de données sont 
     1288      initialisés pour que les opérateurs <literal>&lt;</literal> et 
     1289      <literal>&gt;</literal> correspondent à cet ordre de tri. Il est cependant 
     1290      possible qu'un concepteur de types de données utilisateur choisisse 
     1291      de procéder différement. 
    13261292     </para> 
    13271293    </footnote> 
     
    13291295 
    13301296  <para> 
    1331    Si plus d'une colonne de tri est spécifiée, les entrées suivantes sont 
    1332    utilisées pour trier les lignes qui sont égales sous l'ordre imposé par les 
    1333    colonnes de tri précédent. 
     1297   Si plusieurs colonnes de tri sont spécifiées, les dernières entrées seront 
     1298   utilisées pour trier les lignes qui seraient égales selon l'ordre imposé par 
     1299   les premières colonnes de tri. 
    13341300  </para> 
    13351301 </sect1> 
     
    13481314 
    13491315  <para> 
    1350    <literal>LIMIT</> et <literal>OFFSET</> vous permet de retrouver seulement  
    1351    une portion des lignes générées par le reste de la requête&nbsp;: 
     1316   <literal>LIMIT</> et <literal>OFFSET</> permettent de ne récupérer qu'une partie 
     1317   des lignes engendrées par le reste de la requête&nbsp;: 
    13521318<synopsis> 
    13531319SELECT <replaceable>liste_selection</replaceable> 
    13541320    FROM <replaceable>expression_table</replaceable> 
    1355     <optional>LIMIT { <replaceable>numero</replaceable> | ALL }</optional> 
    1356 <optional>OFFSET <replaceable>numero</replaceable></optional> 
    1357 </synopsis> 
    1358   </para> 
    1359  
    1360   <para> 
    1361    Si un nombre limite est donné, pas plus que ce nombre de lignes sera renvoyé 
    1362    (mais peut-être moins si la requête récupère moins de lignes). <literal>LIMIT 
    1363    ALL</> est indique à ne pas spécifier la clause <literal>LIMIT</>. 
    1364   </para> 
    1365  
    1366   <para> 
    1367    <literal>OFFSET</> indique de passer ce nombre de lignes avant de renvoyer  
    1368    les lignes restantes. <literal>OFFSET 0</> est identique à oublier la clause 
    1369    <literal>OFFSET</>. Si à la fois <literal>OFFSET</> et <literal>LIMIT</> 
    1370    apparaissent, alors les <literal>OFFSET</> lignes sont laissés avant de 
    1371    commencer le renvoi des <literal>LIMIT</> lignes. 
    1372   </para> 
    1373  
    1374   <para> 
    1375    Lors de l'utilisation de <literal>LIMIT</>, il est important d'utiliser une 
     1321    <optional>LIMIT { <replaceable>numero</replaceable> | ALL }</optional> <optional>OFFSET <replaceable>numero</replaceable></optional> 
     1322</synopsis> 
     1323  </para> 
     1324 
     1325  <para> 
     1326   Si une limite de comptage est donnée, il ne sera pas retourné plus de lignes 
     1327   que ce nombre (peut-être moins si la requête complète retourne moins 
     1328   de lignes). <literal>LIMIT ALL</> revient à ne pas spécifier la clause <literal>LIMIT</>. 
     1329  </para> 
     1330 
     1331  <para> 
     1332   <literal>OFFSET</> indique un nombre de lignes à ignorer avant de commencer à 
     1333   retourner des lignes. <literal>OFFSET 0</> revient à oublier la clause 
     1334   <literal>OFFSET</>. Si <literal>OFFSET</> et <literal>LIMIT</> sont utilisés ensemble, 
     1335   <literal>OFFSET</> lignes sont ignorées avant de retourner <literal>LIMIT</> lignes. 
     1336  </para> 
     1337 
     1338  <para> 
     1339   Lors de l'utilisation de <literal>LIMIT</>, il est nécessaire d'utiliser une 
    13761340   clause <literal>ORDER BY</> contraignant les lignes résultantes dans un ordre 
    1377    unique. Sinon, vous obtiendrez un sous-ensemble non prévisible de lignes de 
    1378    la requête. Vous pourriez demander des lignes 10 à 20 mais dans quel 
    1379    ordre&nbsp;? L'ordre est inconnu si vous ne spécifiez pas <literal>ORDER 
    1380    BY</>. 
    1381   </para> 
    1382  
    1383   <para> 
    1384    L'optimiseur de requêtes prend <literal>LIMIT</> en compte lors de la 
    1385    génération d'un plan de requêtes, de façon à ce que vous obtenez 
    1386    différents plans (avec différents ordres de lignes) suivant ce que vous 
    1387    donnez à <literal>LIMIT</> et <literal>OFFSET</>. Du coup, utiliser des 
    1388    valeurs <literal>LIMIT</>/<literal>OFFSET</> différentes pour sélectionner 
    1389    des sous-ensembles différents d'un résultat de requête <emphasis>donnera des 
    1390    résultats inconsistants</emphasis> sauf si vous forcez un ordre de 
    1391    résultat prévisible avec <literal>ORDER BY</>. Ceci n'est pas un bogue&nbsp;; 
    1392    c'est une conséquence inhérente du fait que le SQL ne promette par de 
    1393    délivrer les résultats d'une requête dans un ordre particulier sauf si 
    1394    <literal>ORDER BY</> est utilisé pour contraindre l'ordre. 
     1341   unique. Dans le cas contraire, il est impossible de prévoir le sous-ensemble 
     1342   de lignes qui sera retourné. 
     1343  </para> 
     1344 
     1345  <para> 
     1346   L'optimiseur de requêtes tient compte de <literal>LIMIT</> lors de la 
     1347   génération d'un plan de requêtes. Ainsi, en fonction des valeurs précisées pour 
     1348   <literal>LIMIT</> et <literal>OFFSET</>, différents plans seront obtenus impliquant 
     1349   différents ordres de lignes. Sans l'utilisation de la clause <literal>ORDER BY</> 
     1350   pour forcer l'ordre des résultats, l'emploi de valeurs <literal>LIMIT</>/<literal>OFFSET</> 
     1351   différentes pour sélectionner des sous-ensembles différents du résultat d'une 
     1352   requête <emphasis>donnera des résultats incohérents</emphasis>. 
     1353   Ceci n'est pas un bogue, le SQL ne promettant pas de délivrer les résultats 
     1354   d'une requête dans un ordre particulier en l'absence de spécifications de tri. 
    13951355  </para> 
    13961356 </sect1>