<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Le blog de SQLpro &#187; ORDER BY</title>
	<atom:link href="https://blog.developpez.com/sqlpro/ptag/order-by/feed" rel="self" type="application/rss+xml" />
	<link>https://blog.developpez.com/sqlpro</link>
	<description>Le SQL pour SQL Server, PostGreSQL et tous les autres SGBDR</description>
	<lastBuildDate>Thu, 15 Oct 2020 12:59:17 +0000</lastBuildDate>
	<language>fr-FR</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>https://wordpress.org/?v=4.1.42</generator>
	<item>
		<title>Pourquoi la clause ORDER BY&#8230; est-elle interdite au sein d&#8217;une requête ?</title>
		<link>https://blog.developpez.com/sqlpro/p11456/langage-sql-norme/order-by-interdite-au-sein-dune-requete</link>
		<comments>https://blog.developpez.com/sqlpro/p11456/langage-sql-norme/order-by-interdite-au-sein-dune-requete#comments</comments>
		<pubDate>Fri, 26 Oct 2012 14:23:38 +0000</pubDate>
		<dc:creator><![CDATA[SQLpro]]></dc:creator>
				<category><![CDATA[Langage SQL (norme)]]></category>
		<category><![CDATA[MS SQL Server]]></category>
		<category><![CDATA[SQL Server 2000]]></category>
		<category><![CDATA[SQL Server 2005]]></category>
		<category><![CDATA[SQL Server 2008]]></category>
		<category><![CDATA[ORDER BY]]></category>
		<category><![CDATA[ordre]]></category>
		<category><![CDATA[tri]]></category>

		<guid isPermaLink="false">http://blog.developpez.com/sqlpro/?p=233</guid>
		<description><![CDATA[Certains développeurs pensent naïvement pouvoir mettre une clause de tri ORDER BY un peu partout dans une requête. Il n&#8217;est est rien. Une clause ORDER BY ne peut figurer que comme dernière lignes d&#8217;une requête de type SELECT. Même si vous pouvez parfois l&#8217;écrire à l&#8217;intérieur de certaines requêtes (certains SGBDR ne râlant même pas [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>Certains développeurs pensent naïvement pouvoir mettre une clause de tri ORDER BY un peu partout dans une requête. Il n&rsquo;est est rien. Une clause ORDER BY ne peut figurer que comme dernière lignes d&rsquo;une requête de type SELECT. Même si vous pouvez parfois l&rsquo;écrire à l&rsquo;intérieur de certaines requêtes (certains SGBDR ne râlant même pas sur cette inadmissible faute) elle sera au mieux ignorée et au pire peut donner des résultats incohérent&#8230; Mais pourquoi ?<br />
<span id="more-233"></span><br />
L&rsquo;acronyme SGBDR veut dire &laquo;&nbsp;Système de Gestion de Base de Données Relationnelles&nbsp;&raquo;. Mais c&rsquo;est quoi le relationnel ?</p>
<p>La théorie de l&rsquo;Algèbre Relationnelle a été bâtie sur la théorie des ensembles <strong>qui ne possède aucune relation d&rsquo;ordre de manière naturelle</strong>.<br />
Il n&rsquo;existe pas non plus d&rsquo;<a href="http://blog.developpez.com/sqlpro/p5867/langage-sql-norme/les_donnees_d_une_base_sql_sont_des_ense" title="pas d'ordre dans les lignes des tables">ordre naturel dans les lignes des tables</a> dont le contenu doit être considéré comme étant un sac&#8230;<br />
<em>Par conséquent, la clause ORDER BY de SQL ne fait d&rsquo;ailleurs pas partie de l&rsquo;algèbre relationnelle.</em></p>
<p>C&rsquo;est pourquoi les SGBDR l&rsquo;ignorent en général, ou bien signalent l&rsquo;erreur, lorsqu&rsquo;elle figure à l&rsquo;intérieur des requêtes.</p>
<p>En fait il s&rsquo;agit d&rsquo;une clause <strong>COSMÉTIQUE </strong>c&rsquo;est à dire <em>appliqué au rendu du résultat</em> et c&rsquo;est pourquoi elle ne doit figurer qu&rsquo;une seule fois et à la toute fin de la requête.<br />
On a jugé plus pratique de rajouter cette clause au langage, parce qu&rsquo;il est généralement moins couteux de demander au SGBDR de trier les données que de le faire sur le poste client. En effet, au niveau physique, il est parfois possible d&rsquo;éviter le coût du traitement du tri par le simple fait de l&rsquo;existence d&rsquo;un index adéquat, puisqu&rsquo;un index est généralement une forme de tri&#8230;</p>
<p>Si vous regardez comment est conçu l&rsquo;intérieur d&rsquo;un SGBDR, vous remarquerez que la partie qui assure le tri n&rsquo;est pas du tout située dans le moteur relationnel. En effet les requêtes relèvent de l&rsquo;algèbre relationnelle, donc du moteur relationnel, c&rsquo;est à dire de la partie <strong>LOGIQUE </strong>du SGBDR. En revanche le tri est une opération <strong>physique </strong>(le résultat d&rsquo;une requête est le même que les données soient triées ou non) et relève donc du moteur de stockage !</p>
<p>La partie logique (requêtes relationnelle) est assurée par le moteur relationnel, tandis que la partie physique est assurée par le moteur de stockage. Et c&rsquo;est bien le moteur de stockage qui doit effectuer la lecture de l&rsquo;index ou s&rsquo;il n&rsquo;y a pas d&rsquo;index adéquat, effectuer l&rsquo;opération physique des tri des lignes résultant de la requête relationnelle.</p>
<p>Pour vous en convaincre, voici l&rsquo;architecture interne de MS SQL Server&#8230;<br />
<img src="http://www.developpez.net/forums/attachment.php?attachmentid=104603&amp;stc=1&amp;d=1351259693" alt="architecture interne de MS SQL Server" /></p>
<p>Tous les SGBD relationnel sont bâtis sur les mêmes principes de séparation :<br />
<strong>- Physique :</strong> stockage, indexation, lectures, écritures, verrouillage, gestion des transactions, chargement de données via des fichiers externe, sauvegarde, restauration&#8230;<br />
<strong>- Logique :</strong> analyse grammaticale, vérification des privilèges, transformation diverses (XML, Full-Text, SIG&#8230;), algébrisation, optimisation, exécution&#8230;</p>
<p><strong>À noter :</strong> on trouve parfois le terme ORDER BY à l&rsquo;intérieur de certains opérateurs. C&rsquo;est le cas des <a href="http://sqlpro.developpez.com/article/olap-clause-window/" title="Fonction de fenêtrage">fonctions de fenêtrage</a> dans la clause OVER, mais le but n&rsquo;est pas de trier, mais d&rsquo;opérer la fonction de manière ordonnées et n&rsquo;a aucune influence sur le tri des lignes du résultat. D&rsquo;autres SGBDR ont conçu des opérations similaires avec des moyens plus ou moins bricolés, entretenant le confusion. Il en est ainsi par exemple de l&rsquo;horrible opérateur TOP <em>n</em> de MS SQL Server ! D&rsquo;où la confusion&#8230;</p>
<p><strong>Le site web sur le </strong><a href="http://sqlpro.developpez.com/">SQL et les SGBDR</a></p>
<p><img src="http://blog.developpez.com/media/Microsoft_MVP_logo_vertical Brouard 400.jpg" width="400" height="135" alt="MVP Microsoft SQL Server" /></p>
<pre>

<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">Frédéric Brouard, alias SQLpro, ARCHITECTE DE DONNÉES<br />
Expert &nbsp;S.G.B.D &nbsp;relationnelles &nbsp; et &nbsp; langage &nbsp;S.Q.L<br />
Moste &nbsp;Valuable &nbsp;Professionnal &nbsp;Microsoft &nbsp;SQL Server<br />
Société SQLspot &nbsp;: &nbsp;modélisation, conseil, formation,<br />
optimisation, &nbsp;audit, &nbsp;tuning, &nbsp;administration &nbsp;SGBDR<br />
Enseignant: CNAM PACA, ISEN Toulon, CESI Aix en Prov.</div></div>

</pre>
<p>L&rsquo;ntreprise <a href="http://www.sqlspot.com">SQL Spot</a></p>
]]></content:encoded>
			<wfw:commentRss></wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
	</channel>
</rss>
