<?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>Les tutos de lolo &#187; SQL Serveur</title>
	<atom:link href="https://blog.developpez.com/laurentvalente/pcategory/sql-serveur/feed" rel="self" type="application/rss+xml" />
	<link>https://blog.developpez.com/laurentvalente</link>
	<description></description>
	<lastBuildDate>Fri, 01 Jun 2012 16:30:20 +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>[SQL Server]Saga transact-SQL Episode 6 : Les sous requêtes</title>
		<link>https://blog.developpez.com/laurentvalente/p10979/sql-serveur/sql_server_saga_transact_sql_episode_6_l</link>
		<comments>https://blog.developpez.com/laurentvalente/p10979/sql-serveur/sql_server_saga_transact_sql_episode_6_l#comments</comments>
		<pubDate>Mon, 23 Apr 2012 20:21:30 +0000</pubDate>
		<dc:creator><![CDATA[LaurentValente]]></dc:creator>
				<category><![CDATA[SQL Serveur]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[  Une sous-requête est une instruction select imbriquée dans une instruction select, insert, update ou delete, ou à l&#8217;intérieur d&#8217;une autre sous requête. Vous pouvez réécrire les sous requêtes sous forme de jointures et les utiliser à la place d&#8217;une expression. Une expression est une combinaison d&#8217;identificateurs, de valeurs et d&#8217;opérateurs que sql évalue pour obtenir un résultat. Les sous-requêtes vous permettent de décomposer une requête complexe en une série d&#8217;étapes logiques et, par conséquent, [&#8230;]]]></description>
				<content:encoded><![CDATA[<p> </p>
<p>Une sous-requête est une instruction select imbriquée dans une instruction select, insert, update ou delete, ou à l&rsquo;intérieur d&rsquo;une autre sous requête. Vous pouvez réécrire les sous requêtes sous forme de jointures et les utiliser à la place d&rsquo;une expression.</p>
<p>Une expression est une combinaison d&rsquo;identificateurs, de valeurs et d&rsquo;opérateurs que sql évalue pour obtenir un résultat.</p>
<p>Les sous-requêtes vous permettent de décomposer une requête complexe en une série d&rsquo;étapes logiques et, par conséquent, de résoudre un problème à l&rsquo;aide d&rsquo;une seule d&rsquo;instruction. Les sous-requêtes sont utiles lorsque votre requête repose sur les résultats d&rsquo;une autre requête.</p>
<p><span id="more-15"></span></p>
<p>Une requête qui contient des sous requêtes peut souvent être écrite comme une jointure, si c&rsquo;est le cas préférez la jointure pour des raisons d&rsquo;optimisation.</p>
<p>Lorsque vous décidez d&rsquo;utiliser des sous requêtes tenez compte des points ci-dessous :</p>
<p>- Vous devez mettre les sous-requêtes entre parenthèses.</p>
<p>- Vous pouvez mettre une sous-requête à la place d&rsquo;une expression lorsqu&rsquo;une valeur unique ou une liste de valeur est renvoyée. Vous pouvez utiliser une sous requete renvoyant un ensemble d&rsquo;enregistrements avec plusieurs colonnes au lieu d&rsquo;une table ou exécuter la même fonction en tant que jointure.</p>
<p>- Vous ne pouvez pas utiliser des sous requêtes pour extraire des colonnes qui contiennent des données de type text ou image.</p>
<p>- Vous pouvez avoir des imbrications de requêtes (jusqu&rsquo;à 32 niveau) mais ce sera au dépend des performances.</p>
<p>Utilisation de sous requêtes en tant que table dérivée</p>
<p>La sous requête constitue un ensemble d&rsquo;enregistrements d&rsquo;une requête qui fonctionne comme une table, donc elle remplace une table dans la clause from. Elle sera optimisée en même temps que le reste de la requête.</p>
<p><a href="http://blog.developpez.com/media/413/Windows-Live-Writer/7ab542fb2a8a_12B88/23042012a_4.jpg"><img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="23042012a" border="0" alt="23042012a" src="http://blog.developpez.com/media/413/Windows-Live-Writer/7ab542fb2a8a_12B88/23042012a_thumb_1.jpg" width="679" height="474" /></a></p>
<p><b>Utilisation de sous requête en tant qu&rsquo;expression</b></p>
<p>La sous requête doit faire référence à une valeur scalaire ou à une liste de valeurs contenue dans une colonne.</p>
<p>Attention cette expression ne sera calculées qu&rsquo;une seul fois au cours de l&rsquo;instruction.</p>
<p>Exemple : ici on a le nom du produit, son prix, la moyenne des prix des produits et la différence entre le prix du produit et le prix moyen.</p>
<p><a href="http://blog.developpez.com/media/413/Windows-Live-Writer/7ab542fb2a8a_12B88/23042012b_2.jpg"><img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="23042012b" border="0" alt="23042012b" src="http://blog.developpez.com/media/413/Windows-Live-Writer/7ab542fb2a8a_12B88/23042012b_thumb.jpg" width="717" height="491" /></a></p>
<p><b>Utilisation de sous-requêtes pour corréler les données</b></p>
<p>Vous pouvez utiliser une sous requête corrélée en tant qu&rsquo;expression dynamique qui est modifiée pour chaque ligne d&rsquo;une requête externe. Le processeur de requête exécute la sous requête pour chaque ligne de la requête externe, ligne par ligne. Celle-ci est à son tour évaluée en tant qu&rsquo;expression pour chaque ligne, et son résultat est envoyé dans la requête externe.</p>
<p><a href="http://blog.developpez.com/media/413/Windows-Live-Writer/7ab542fb2a8a_12B88/23042012c_2.jpg"><img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="23042012c" border="0" alt="23042012c" src="http://blog.developpez.com/media/413/Windows-Live-Writer/7ab542fb2a8a_12B88/23042012c_thumb.jpg" width="693" height="383" /></a></p>
<p>Ici on a demandé à avoir l&rsquo;id de commande et l&rsquo;id des clients qui ont commandé le produit 770 et dont la quantité de commande est inférieure à 20.</p>
<p>Un autre exemple : la liste des produits et la quantité maximum commandée par produit.</p>
<p><a href="http://blog.developpez.com/media/413/Windows-Live-Writer/7ab542fb2a8a_12B88/23042012d_2.jpg"><img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="23042012d" border="0" alt="23042012d" src="http://blog.developpez.com/media/413/Windows-Live-Writer/7ab542fb2a8a_12B88/23042012d_thumb.jpg" width="542" height="551" /></a></p>
<p><b>Simulation d&rsquo;une clause join</b></p>
<p>Les sous requêtes permettent de générer les mêmes résultats qu&rsquo;avec une clause join néanmoins c&rsquo;est beaucoup moins performant.</p>
<p>On veut la liste des produits et leurs quantités commandées pour tous les produits qui sont couleur argent.</p>
<p><a href="http://blog.developpez.com/media/413/Windows-Live-Writer/7ab542fb2a8a_12B88/23042012e_2.jpg"><img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="23042012e" border="0" alt="23042012e" src="http://blog.developpez.com/media/413/Windows-Live-Writer/7ab542fb2a8a_12B88/23042012e_thumb.jpg" width="631" height="676" /></a></p>
<p><b>Simulation d&rsquo;une clause Having</b></p>
<p>Utilisation d&rsquo;une sous requête pour générer les mêmes résultats qu&rsquo;une requête utilisant la clause Having (en moins performant !!!).</p>
<p>Exemple on recherche tous les produits dont le prix dépasse le prix moyen de ce même produit.</p>
<p><a href="http://blog.developpez.com/media/413/Windows-Live-Writer/7ab542fb2a8a_12B88/23042012f_2.jpg"><img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="23042012f" border="0" alt="23042012f" src="http://blog.developpez.com/media/413/Windows-Live-Writer/7ab542fb2a8a_12B88/23042012f_thumb.jpg" width="712" height="435" /></a></p>
<p><b>Utilisations des clauses EXISTS et NOT EXISTS</b></p>
<p>On peut utiliser les opérateurs Exists et not exists pour savoir si des données existent dans une liste de valeurs.</p>
<p>Exemple : on veut tous les produits (id et nom) qui ont été commandé après le « 01/07/2004 ».</p>
<p><a href="http://blog.developpez.com/media/413/Windows-Live-Writer/7ab542fb2a8a_12B88/23042012g_2.jpg"><img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="23042012g" border="0" alt="23042012g" src="http://blog.developpez.com/media/413/Windows-Live-Writer/7ab542fb2a8a_12B88/23042012g_thumb.jpg" width="687" height="488" /></a></p>
<p><b>Conseils pratiques</b></p>
<p>Utilisez les sous requêtes pour décomposer une requête complexe (peut-être qu&rsquo;il y aura possibilité de faire une ou plusieurs vues</p>
<p>Utilisez des alias de nom de table pour les sous requêtes corrélées.</p>
<p>Utilisez l&rsquo;instruction Insert&#8230; select pour ajouter des lignes d&rsquo;autres sources dans une table existante (insert into Matable select &#8230;).</p>
<p>Utilisez l&rsquo;opérateur exists plutôt que l&rsquo;opérateur in.</p>
]]></content:encoded>
			<wfw:commentRss></wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>[SQL Server]Saga transact-SQL Episode 5 : Les jointures de tables</title>
		<link>https://blog.developpez.com/laurentvalente/p10940/sql-serveur/sql_server_saga_transact_sql_episode_5_l</link>
		<comments>https://blog.developpez.com/laurentvalente/p10940/sql-serveur/sql_server_saga_transact_sql_episode_5_l#comments</comments>
		<pubDate>Thu, 12 Apr 2012 19:51:54 +0000</pubDate>
		<dc:creator><![CDATA[LaurentValente]]></dc:creator>
				<category><![CDATA[SQL Serveur]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[  Il n&#8217;est pas rare de devoir requêter sur plusieurs tables pour avoir un ensemble de résultat cohérent. Pour faire ça il faut utiliser les relations clé primaire clé étrangère entre les tables, c&#8217;est ce que nous allons voir ici. L&#8217;utilisation d&#8217;alias pour les tables L&#8217;utilisation d&#8217;alias pour remplacer les noms de tables permet une lecture plus facile de la requête, malgré des jointures complexes. On peut remplacer un nom long et complexe par un [&#8230;]]]></description>
				<content:encoded><![CDATA[<p> </p>
<p>Il n&rsquo;est pas rare de devoir requêter sur plusieurs tables pour avoir un ensemble de résultat cohérent. Pour faire ça il faut utiliser les relations clé primaire clé étrangère entre les tables, c&rsquo;est ce que nous allons voir ici.</p>
<p><span id="more-14"></span></p>
<p><b>L&rsquo;utilisation d&rsquo;alias pour les tables</b></p>
<p>L&rsquo;utilisation d&rsquo;alias pour remplacer les noms de tables permet une lecture plus facile de la requête, malgré des jointures complexes.</p>
<p>On peut remplacer un nom long et complexe par un alias simple.</p>
<p>Exemple:</p>
<p>SELECT * FROM server.database.schema.table AS table_alias</p>
<p>Donc si on a des noms de tables à rallonge ou difficile à écrire cette façon de faire est utile.</p>
<p>Prenons l&rsquo;exemple de tables liées par une relation, on a la table « produits » et la table « inventaire », ces 2 tables sont liés par le champ « productid » qui devient donc l&rsquo;objet de la jointure. Dans l&rsquo;exemple suivant on veut avoir le nom du produit et sa quantité en stock donc on fait la jointure sur « productid » on donne l&rsquo;alias « nom_produit » à la table « Production.product » et l&rsquo;alias « moninventaire » à la table « production.Productinventory ».</p>
<p><a href="http://blog.developpez.com/media/413/Windows-Live-Writer/1a11bf297509_12439/12042012a_2.jpg"><img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="12042012a" border="0" alt="12042012a" src="http://blog.developpez.com/media/413/Windows-Live-Writer/1a11bf297509_12439/12042012a_thumb.jpg" width="586" height="375" /></a></p>
<p><b>Jointure sur une table elle-même</b></p>
<p>Une possibilité extrêmement utile est de joindre 2 fois la même table pour pouvoir parcourir la table en cherchant des valeurs déterminées.</p>
<p>Par exemple, on a la table employés qui contient la colonne « employeeid » et la colonne « managerid » qui reprend en fait l&rsquo;id employé du manager. Si on veut savoir qui est le chef de qui dans une seule requête simple on écrit ce qui suit (la clause « where » a été rajoutée pour avoir un ensemble de résultat simple mais sans le « where » on a la hiérarchie sur toute la table).</p>
<p><a href="http://blog.developpez.com/media/413/Windows-Live-Writer/1a11bf297509_12439/12042012b_2.jpg"><img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="12042012b" border="0" alt="12042012b" src="http://blog.developpez.com/media/413/Windows-Live-Writer/1a11bf297509_12439/12042012b_thumb.jpg" width="589" height="294" /></a></p>
<p>Ici le 12 est le chef de 3, 109 est le chef de 12 et 109 n&rsquo;a pas de chef donc c&rsquo;est le boss.</p>
<p>Ici la jointure est interne ce qui est le cas par défaut donc vous pouvez abréger « inner Join » par « Join ».</p>
<p><b>Les jointures Internes</b></p>
<p>Les jointures internes combinent des tables en comparant des colonnes qui sont communes aux deux tables. Sql Server renvoie uniquement les lignes qui répondent aux conditions de jointures.</p>
<p>Attention il est souvent nécessaire de préciser dans la clause « select » « le nom de la table. Le nom de la colonne » car si la colonne est présente dans les deux tables qui composent la jointure SQL ne saura pas où piocher la valeur.</p>
<p>N&rsquo;utiliser pas de valeur NULL comme condition de jointure, car les valeurs de ce type ne sont pas considérées comme égales entre elles.</p>
<p>Exemple on a 2 tables qui sont liées par une relation (clé primaire, clé étrangère) on veut faire une requête qui nous renvoi certains champs de la table 1 et certains champs de la tablmes2 qui sont relatifs aux champs de la tables 1. On va donc faire une requête en mettant les champs qui nous intéressent dans la clause « select » puis faire la jointure interne entre les deux tables grâce à la relation qui existe.</p>
<p><a href="http://blog.developpez.com/media/413/Windows-Live-Writer/1a11bf297509_12439/12042012d_2.jpg"><img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="12042012d" border="0" alt="12042012d" src="http://blog.developpez.com/media/413/Windows-Live-Writer/1a11bf297509_12439/12042012d_thumb.jpg" width="575" height="368" /></a></p>
<p>Ici on a encore utilisé les alias pour une lecture plus simple de la requête.</p>
<p>La relation entre les deux tables porte ici sur la colonne « EmployeeID ».</p>
<p>Si maintenant on veut ajouter une clause WHERE on la mettra après la jointure.</p>
<p><a href="http://blog.developpez.com/media/413/Windows-Live-Writer/1a11bf297509_12439/12042012e_2.jpg"><img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="12042012e" border="0" alt="12042012e" src="http://blog.developpez.com/media/413/Windows-Live-Writer/1a11bf297509_12439/12042012e_thumb.jpg" width="579" height="471" /></a></p>
<p><b>Les jointures externes</b></p>
<p>Les jointures externes gauches ou droites combinent les lignes provenant de deux tables qui remplissent la condition de jointure, ainsi que celle de la table de droite ou de gauche qui ne remplissent pas cette condition, conformément à ce que spécifie la clause Join. Les lignes qui ne remplissent pas la condition de la jointure affichent la valeur NULL dans l&rsquo;ensemble des résultats.</p>
<p>Pourquoi utiliser ce type de jointure ?</p>
<p>Pour obtenir la liste complète des données stockées dans l&rsquo;une des tables jointes en plus des informations remplissant les conditions de jointures.</p>
<p>Attention aux points suivants :</p>
<p>- SQL ne renvoie que les lignes uniques lorsque vous utilisez des jointures externes gauche ou droite.</p>
<p>- Utilisez une jointure externe gauche pour afficher toutes les lignes de la première table spécifiée (la table à gauche de l&rsquo;expression). Si vous inversez l&rsquo;ordre dans lequel les tables sont répertoriées dans la clause from, l&rsquo;instruction produit le même résultat qu&rsquo;une jointure externe droite. Inversement pour la jointure externe droite.</p>
<p>- Vous pouvez abréger les clauses « LEFT OUTER JOIN » et « RIGHT OUTER JOIN » en « LEFT JOIN » et « RIGHT JOIN ».</p>
<p>Exemple on a 2 tables liées par une relation, une table clients qui contient 4 clients et une table qui contient les réponses clients à des question seulement on ne sait pas si tout les clients ont répondus aux questions si on fait un inner join :</p>
<p><a href="http://blog.developpez.com/media/413/Windows-Live-Writer/1a11bf297509_12439/12042012f_2.jpg"><img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="12042012f" border="0" alt="12042012f" src="http://blog.developpez.com/media/413/Windows-Live-Writer/1a11bf297509_12439/12042012f_thumb.jpg" width="570" height="309" /></a></p>
<p>On un client qui à répondu à 2 question et un autre client qui a répondu à une question. On veut avoir la liste complète des clients qu&rsquo;ils aient répondu ou pas.</p>
<p><a href="http://blog.developpez.com/media/413/Windows-Live-Writer/1a11bf297509_12439/12042012g_2.jpg"><img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="12042012g" border="0" alt="12042012g" src="http://blog.developpez.com/media/413/Windows-Live-Writer/1a11bf297509_12439/12042012g_thumb.jpg" width="562" height="350" /></a></p>
<p>On choisit de mettre un left car la table que l&rsquo;on veut voir complètement est à gauche du join .</p>
<p>Ici on voit qu&rsquo;il y a un client (Dollon) qui a répondu qu&rsquo;à une question et 2 clients qui n&rsquo;ont pas répondu donc ils ont les champs à NULL.</p>
<p>Maintenant si je fais un right join sur la même requête j&rsquo;aurais le même résultat qu&rsquo;un inner join puisque la table t_clireponse ne possède que les réponses des clients.</p>
<p>Ce que je peux faire ici c&rsquo;est inverser les tables autour du join et mettre right à la place de left et j&rsquo;aurais le même résultat que le left.</p>
<p><a href="http://blog.developpez.com/media/413/Windows-Live-Writer/1a11bf297509_12439/12042012h_2.jpg"><img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="12042012h" border="0" alt="12042012h" src="http://blog.developpez.com/media/413/Windows-Live-Writer/1a11bf297509_12439/12042012h_thumb.jpg" width="540" height="352" /></a></p>
<p><b>Les jointures croisées</b></p>
<p>Elles affichent toutes les combinaisons de l&rsquo;ensemble des lignes des tables jointes. Il n&rsquo;est pas obligatoire de disposer d&rsquo;une colonne commune pour utiliser des jointures croisées.</p>
<p>Elles sont rarement utilisées dans une base de données normalisée, on peut les utiliser pour générer des données de tests ou pour créer des listes de vérification.</p>
<p><a href="http://blog.developpez.com/media/413/Windows-Live-Writer/1a11bf297509_12439/12042012i_2.jpg"><img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="12042012i" border="0" alt="12042012i" src="http://blog.developpez.com/media/413/Windows-Live-Writer/1a11bf297509_12439/12042012i_thumb.jpg" width="529" height="490" /></a></p>
<p>Select * from T1 cross join T2 </p>
<p>Pas de « ON t1.col1=T2.Col1 »</p>
<p><b>Jointures de plus de deux tables</b></p>
<p>Il est possible de joindre un nombre quelquonque de tables (limité à 256 tables par instruction select). Toute table spécifiée dans une opération de jointure peut être jointe à une autre table qui possède une colonne commune.</p>
<p>Ainsi on peut obtenir des informations associées provenant de plusieurs tables.</p>
<p>Pensez à utiliser une clause Where pour limiter le nombre de lignes renvoyées.</p>
<p>Exemple on va faire une requête pour laquelle on a besoin de champs qui sont dans 3 tables pour nous aider on a les 3 tables reliées par des relations donc dans le select on va spécifier les champs que l&rsquo;on veut voir apparaitre en les nommant « table.colonne » puis on va faire des jointure sur les relations .</p>
<p><a href="http://blog.developpez.com/media/413/Windows-Live-Writer/1a11bf297509_12439/12042012j_2.jpg"><img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="12042012j" border="0" alt="12042012j" src="http://blog.developpez.com/media/413/Windows-Live-Writer/1a11bf297509_12439/12042012j_thumb.jpg" width="537" height="255" /></a></p>
<p><b>Combinaison d&rsquo;ensemble de résultats (union)</b></p>
<p>On va utiliser l&rsquo;opérateur union pour créer un seul ensemble de résultat à partir de plusieurs requêtes.</p>
<p>On utilise Union lorsque les données qu&rsquo;on souhaite extraire proviennent de sources différentes et qu&rsquo;elles ne sont pas accessibles à l&rsquo;aide d&rsquo;une seule requête.</p>
<p>Attention les tables spécifiées doivent contenir des données de mêmes types ainsi que le même nombre et le même ordre de colonne dans la liste de sélection de chaque requête.</p>
<p>Sql supprime les lignes en double de l&rsquo;ensemble de résultats. Toutefois si, si on utilise l&rsquo;option ALL, toutes les lignes (doublons inclus) figurent dans l&rsquo;ensemble de résultats.</p>
<p>Exemple : On va faire une requête qui demande le nom et le numéro des personnes dont le nom commence par « AB » et une autre requête qui demande le nom d&rsquo;un produit et sa référence pour tout les produits dont le nom commence par un « B », les 2 requêtes demandent des champs qui sont de même types donc on va pouvoir faire une union pour rassembles les 2 requêtes dans le même ensemble de résultat.</p>
<p>Si on exécute les 2 requêtes sans union on a 2 ensembles de résultats</p>
<p><a href="http://blog.developpez.com/media/413/Windows-Live-Writer/1a11bf297509_12439/12042012k_2.jpg"><img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="12042012k" border="0" alt="12042012k" src="http://blog.developpez.com/media/413/Windows-Live-Writer/1a11bf297509_12439/12042012k_thumb.jpg" width="489" height="558" /></a></p>
<p>Si pour la même requête on ajoute une clause union entre les 2 on a ce qui suit :</p>
<p><a href="http://blog.developpez.com/media/413/Windows-Live-Writer/1a11bf297509_12439/12042012l_2.jpg"><img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="12042012l" border="0" alt="12042012l" src="http://blog.developpez.com/media/413/Windows-Live-Writer/1a11bf297509_12439/12042012l_thumb.jpg" width="509" height="533" /></a></p>
<p>Soit un seul ensemble de résultat.</p>
]]></content:encoded>
			<wfw:commentRss></wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>[SQL Server]Saga transact-SQL Episode 4 : Grouper et organiser les données</title>
		<link>https://blog.developpez.com/laurentvalente/p10938/sql-serveur/sql_server_saga_transact_sql_episode_4_g</link>
		<comments>https://blog.developpez.com/laurentvalente/p10938/sql-serveur/sql_server_saga_transact_sql_episode_4_g#comments</comments>
		<pubDate>Thu, 12 Apr 2012 08:30:02 +0000</pubDate>
		<dc:creator><![CDATA[LaurentValente]]></dc:creator>
				<category><![CDATA[SQL Serveur]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[Parfois l&#8217;ensemble de résultat doit être présenté selon les souhaits du client et donc certaine mise en pages sont nécessaires. Lister les n premières valeurs Il s&#8217;agit de la clause TOP n dans la commande SELECT. On peut avoir ainsi les n premières lignes ou les n premier % des lignes. On a les 10 premières lignes de la table en fonction de leur ProductID et de leur Nom de façon croissante sur les 2 [&#8230;]]]></description>
				<content:encoded><![CDATA[<p><b></b></p>
<p>Parfois l&rsquo;ensemble de résultat doit être présenté selon les souhaits du client et donc certaine mise en pages sont nécessaires. </p>
<p><span id="more-13"></span></p>
<p><b>Lister les n premières valeurs</b></p>
<p>Il s&rsquo;agit de la clause TOP n dans la commande SELECT. On peut avoir ainsi les n premières lignes ou les n premier % des lignes. </p>
<p><a href="http://blog.developpez.com/media/413/Windows-Live-Writer/96df9e2bd909_8348/10042012a_2.jpg"><img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="10042012a" border="0" alt="10042012a" src="http://blog.developpez.com/media/413/Windows-Live-Writer/96df9e2bd909_8348/10042012a_thumb.jpg" width="519" height="561" /></a>    <br />On a les 10 premières lignes de la table en fonction de leur ProductID et de leur Nom de façon croissante sur les 2 colonne globalement, c&rsquo;est pour ça qu&rsquo;il est recommandé d&rsquo;associer une clause ORDER BY aux commandes SELECT comprenant une clause TOP. </p>
<p><a href="http://blog.developpez.com/media/413/Windows-Live-Writer/96df9e2bd909_8348/10042012b_2.jpg"><img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="10042012b" border="0" alt="10042012b" src="http://blog.developpez.com/media/413/Windows-Live-Writer/96df9e2bd909_8348/10042012b_thumb.jpg" width="524" height="593" /></a>    <br />On a les 10 premières lignes correspondant aux 10 premiers ProductId de la table. </p>
<p><a href="http://blog.developpez.com/media/413/Windows-Live-Writer/96df9e2bd909_8348/10042012c_2.jpg"><img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="10042012c" border="0" alt="10042012c" src="http://blog.developpez.com/media/413/Windows-Live-Writer/96df9e2bd909_8348/10042012c_thumb.jpg" width="530" height="611" /></a>    <br />Ici on a utilisé la clause PERCENT donc on a les 10 premiers pourcent de la table soit non plus 10 lignes mais 55 lignes ordonnées par ProductID.     <br />La clause WITH TIES est particulière :     <br />- Elle se place après le TOP n     <br />- Elle est fortement liée à la clause ORDER BY     <br />- Elle permet d&rsquo;ajouter, à l&rsquo;ensemble de résultat, les lignes qui correspondent à la dernière ligne du TOP et dont la valeur de la colonne signalée dans la clause ORDER BY correspond.     <br />Je crois qu&rsquo;il vaut mieux un exemple : </p>
<p><a href="http://blog.developpez.com/media/413/Windows-Live-Writer/96df9e2bd909_8348/10042012d_2.jpg"><img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="10042012d" border="0" alt="10042012d" src="http://blog.developpez.com/media/413/Windows-Live-Writer/96df9e2bd909_8348/10042012d_thumb.jpg" width="529" height="529" /></a>    <br />On fait un top simple qui nous ramène 10 lignes.     <br />On prend exactement la même requête et on ajoute la clause WITH TIES. </p>
<p><a href="http://blog.developpez.com/media/413/Windows-Live-Writer/96df9e2bd909_8348/10042012e_2.jpg"><img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="10042012e" border="0" alt="10042012e" src="http://blog.developpez.com/media/413/Windows-Live-Writer/96df9e2bd909_8348/10042012e_thumb.jpg" width="528" height="594" /></a>    <br />On a 94 lignes soit toutes les lignes de la table qui ont la valeur « color=&rsquo;Black&rsquo; ». (J&rsquo;espère que c&rsquo;est plus clair sinon essayez le !! ça peut être utile.). </p>
<p><b>Les fonctions d&rsquo;agrégation</b></p>
<p>Ce sont des fonctions SQL server intégrées que vous pouvez utiliser dans la clause SELECT ou en combinaison dans la clause GROUP BY.    <br />A l&rsquo;exception de la fonction COUNT(*) toutes les fonctions renvoient NULL si aucune ligne ne répond aux conditions.     <br />Voici les fonctions d&rsquo;agrégations les plus communes     <br />AVG: Calcule la moyenne d&rsquo;une colonne     <br />COUNT: Calcule le nombre de lignes correspondant aux critères de la requête     <br />MAX: Calcule la valeur maximale d&rsquo;une colonne     <br />MIN: Calcule la valeur minimale d&rsquo;une colonne     <br />SUM: Effectue la somme des valeurs d&rsquo;une colonne     <br />Il y a certain spécificité pour ces fonctions:     <br />- COUNT est la seule fonction d&rsquo;agrégation avec laquelle on peut utiliser des types de colonne text, ntext, ou image.     <br />- MIN et MAX vous ne pouvez pas utiliser ces clauses avec des types bit.     <br />- SUM et AVG vous pouvez les utiliser seulement avec des colonnes de type int, smallint, tinyint, decimal, numeric, float,real, money, et smallmoney. </p>
<p><a href="http://blog.developpez.com/media/413/Windows-Live-Writer/96df9e2bd909_8348/10042012f_2.jpg"><img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="10042012f" border="0" alt="10042012f" src="http://blog.developpez.com/media/413/Windows-Live-Writer/96df9e2bd909_8348/10042012f_thumb.jpg" width="536" height="319" /></a>    <br />Prix moyen des produits. </p>
<p><a href="http://blog.developpez.com/media/413/Windows-Live-Writer/96df9e2bd909_8348/10042012g_2.jpg"><img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="10042012g" border="0" alt="10042012g" src="http://blog.developpez.com/media/413/Windows-Live-Writer/96df9e2bd909_8348/10042012g_thumb.jpg" width="535" height="349" /></a>    <br />Prix total des produits. </p>
<p><a href="http://blog.developpez.com/media/413/Windows-Live-Writer/96df9e2bd909_8348/10042012h_2.jpg"><img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="10042012h" border="0" alt="10042012h" src="http://blog.developpez.com/media/413/Windows-Live-Writer/96df9e2bd909_8348/10042012h_thumb.jpg" width="546" height="228" /></a>    <br />Prix minimum et prix maximum. </p>
<p><b>Utiliser des fonctions d&rsquo;agrégation avec des valeurs NULL </b></p>
<p>Les valeurs NULL peuvent fausser l&rsquo;ensemble de résultats par exemple si on utilise la fonction COUNT dans une instruction SELECT sur une table qui compte 10 ligne et que la colonne que l&rsquo;on compte contient 2 valeurs NULL, la requête retourne 8 comme résultat. </p>
<p><a href="http://blog.developpez.com/media/413/Windows-Live-Writer/96df9e2bd909_8348/10042012i_2.jpg"><img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="10042012i" border="0" alt="10042012i" src="http://blog.developpez.com/media/413/Windows-Live-Writer/96df9e2bd909_8348/10042012i_thumb.jpg" width="547" height="246" /></a>    <br />Ici nous avons une table qui contient 4 lignes avec des colonnes nom et prénom, mais un des prénom est NULL donc on a 4 noms et 3 prénoms. </p>
<p><b>Les fondamentaux du GROUP BY </b></p>
<p>Utilisez la clause GROUP BY sur des colonnes ou des expressions pour organiser les lignes et pour résumer ces groupes. Par exemple, utilisez la clause GROUP BY pour déterminer la quantité de chaque produit qui a été commandé pour chaque commande.    <br />Lorsque vous utilisez la clause GROUP BY, examinez les directives suivantes: </p>
<p>- Toutes les colonnes qui sont spécifiées dans la clause GROUP BY doivent être incluses dans la commande SELECT.    <br />- Si vous incluez une clause WHERE, SQL Server groupes uniquement les lignes qui satisferont la clause WHERE.     <br />- Ne pas utiliser la clause GROUP BY sur des colonnes qui contiennent plusieurs null parce que les valeurs NULL sont traitées comme un groupe.     <br />- Utilisez le mot-clé ALL avec la clause GROUP BY pour afficher toutes les lignes avec les valeurs NULL dans l&rsquo;ensemble des colonnes, indépendamment de savoir si les lignes de satisferont la clause WHERE. </p>
<p>Exemple :    <br />On a la table qui contient entre autre les données suivantes </p>
<p><a href="http://blog.developpez.com/media/413/Windows-Live-Writer/96df9e2bd909_8348/10042012j_2.jpg"><img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="10042012j" border="0" alt="10042012j" src="http://blog.developpez.com/media/413/Windows-Live-Writer/96df9e2bd909_8348/10042012j_thumb.jpg" width="537" height="504" /></a>    <br />Maintenant si on utilise la clause GROUP BY pour avoir la quantité en stock de chaque produit. </p>
<p><a href="http://blog.developpez.com/media/413/Windows-Live-Writer/96df9e2bd909_8348/10042012k_2.jpg"><img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="10042012k" border="0" alt="10042012k" src="http://blog.developpez.com/media/413/Windows-Live-Writer/96df9e2bd909_8348/10042012k_thumb.jpg" width="538" height="282" /></a></p>
<p><b>Group BY et HAVING</b></p>
<p>Utilisez la clause HAVING sur des colonnes ou des expressions pour définir les conditions sur le groupe inclus dans un ensemble de résultats. La clause HAVING définit les conditions sur la clause GROUP BY, au même titre que la clause WHERE interagit avec la commande SELECT. </p>
<p>Lorsque vous utilisez la clause HAVING, examiner les directives suivantes:    <br />- Utilisez la clause HAVING uniquement avec la clause GROUP BY pour restreindre le groupement. Utilisation de la clause HAVING sans la clause GROUP BY est n&rsquo;a pas de sens.     <br />- Vous pouvez référencer l&rsquo;une des colonnes qui apparait dans le SELECT. </p>
<p><a href="http://blog.developpez.com/media/413/Windows-Live-Writer/96df9e2bd909_8348/10042012l_2.jpg"><img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="10042012l" border="0" alt="10042012l" src="http://blog.developpez.com/media/413/Windows-Live-Writer/96df9e2bd909_8348/10042012l_thumb.jpg" width="513" height="505" /></a></p>
<p>Ici nous avons les produits dont la quantité en stock est comprise entre 1090 et 1300. </p>
<p><b>Génération de valeurs globales Dans Ensembles de résultats </b></p>
<p>Utiliser la clause GROUP BY avec l&rsquo;opérateur CUBE et ROLLUP pour générer des valeurs globales dans les ensembles de résultats. Les opérateurs CUBE ou ROLLUP peuvent être utile pour les références croisées (cross-referencing) dans une table sans avoir à écrire    <br />d&rsquo;autres scripts.     <br />Lorsque vous utilisez les opérateurs ROLLUP ou CUBE, utilisez la fonction GROUPING pour identifier le détail et la synthèse des valeurs dans les résultats.     <br />Utilisez l&rsquo;opérateur ROLLUP avec la clause GROUP BY pour résumer les valeurs groupées.     <br />Exemple : </p>
<p><a href="http://blog.developpez.com/media/413/Windows-Live-Writer/96df9e2bd909_8348/10042012m_2.jpg"><img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="10042012m" border="0" alt="10042012m" src="http://blog.developpez.com/media/413/Windows-Live-Writer/96df9e2bd909_8348/10042012m_thumb.jpg" width="549" height="504" /></a>    <br />Ici on a le nombre d&rsquo;article commandé par commande pour les produits 897 et 898.     <br />Donc on a 4 fois le produit 897 et 15 fois le produit 898 soit 19 articles en tout. Ce que l&rsquo;on voudrait c&rsquo;est ne pas calculer ça à la main WITH ROLLUP est là pour ça !! </p>
<p><a href="http://blog.developpez.com/media/413/Windows-Live-Writer/96df9e2bd909_8348/10042012n_2.jpg"><img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="10042012n" border="0" alt="10042012n" src="http://blog.developpez.com/media/413/Windows-Live-Writer/96df9e2bd909_8348/10042012n_thumb.jpg" width="537" height="588" /></a>    <br />On a juste ajouté la clause WITH ROLLUP entre le GROUP BY et le ORDER BY et ici la première ligne de l&rsquo;ensemble de résultat est la somme totale, la deuxième (surlignée) est la somme des articles 897 ensuite le détail comme précédemment puis la somme des articles 898 et le détail.     <br />La commande CUBE quant à elle permet de résumer les données comme le ROLLUP le fait mais ici on aura toutes les combinaisons possibles.     <br />Un exemple avec la même requête que précédemment : </p>
<p><a href="http://blog.developpez.com/media/413/Windows-Live-Writer/96df9e2bd909_8348/10042012o_2.jpg"><img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="10042012o" border="0" alt="10042012o" src="http://blog.developpez.com/media/413/Windows-Live-Writer/96df9e2bd909_8348/10042012o_thumb.jpg" width="537" height="751" /></a>    <br />Ligne 1 : total des produits     <br />Ligne 2 à 10 : somme des produits commandés par commande     <br />Ligne 11 : somme des articles 897 commandés     <br />Ligne 12 et 13 détail de l&rsquo;article 897     <br />Ligne 14 : somme des articles 898 commandés     <br />Ligne 15 à la fin détail de l&rsquo;article 898     <br />Attention ici le problème de la lisibilité des résultats devient on problème car si on a n colonnes dans le GROUP BY, SQL retournera 2n combinaisons dans l&rsquo;ensemble de résultat.     <br />Pour remédier au risque de lecture difficile la fonction GROUPING est là pour distinguer les lignes résumées des lignes détails.     <br />Exemple : </p>
<p><a href="http://blog.developpez.com/media/413/Windows-Live-Writer/96df9e2bd909_8348/10042012p_2.jpg"><img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="10042012p" border="0" alt="10042012p" src="http://blog.developpez.com/media/413/Windows-Live-Writer/96df9e2bd909_8348/10042012p_thumb.jpg" width="562" height="615" /></a></p>
<p>La colonne « résumé » met un flag à 1 sur les lignes résumées de « productid » et la colonne « resum » met un flag à 1 sur les colonnes résumées de « saleorderid ». Donc toutes les lignes avec un flag à 1 sont des lignes résumées et pas les autres. </p>
<p><b>Utilisation des clauses COMPUTE et COMPUTE BY </b></p>
<p>Les clauses COMPUTE et COMPUTE BY génèrent des lignes résumées supplémentaires dans un format non-relationnelles qui ne sont pas aux normes ANSI. Si c&rsquo;est utile pour la visualisation, la sortie n&rsquo;est pas bien adaptée pour la production d&rsquo;ensembles de résultats à utiliser avec d&rsquo;autres applications.    <br />On ne peut pas inclure de colonne text, ntext ou image dans ces clauses.     <br />Exemple : </p>
<p><a href="http://blog.developpez.com/media/413/Windows-Live-Writer/96df9e2bd909_8348/10042012q_2.jpg"><img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="10042012q" border="0" alt="10042012q" src="http://blog.developpez.com/media/413/Windows-Live-Writer/96df9e2bd909_8348/10042012q_thumb.jpg" width="578" height="622" /></a>    <br />Ici on a 2 ensembles de résultats un pour le détail de la requête et un pour la somme de la quantité globale.     <br />Un exemple en ajoutant un COMPUTE BY : </p>
<p><a href="http://blog.developpez.com/media/413/Windows-Live-Writer/96df9e2bd909_8348/10042012r_2.jpg"><img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="10042012r" border="0" alt="10042012r" src="http://blog.developpez.com/media/413/Windows-Live-Writer/96df9e2bd909_8348/10042012r_thumb.jpg" width="584" height="764" /></a>    <br />Ici on a un résumé par produit, le détail de chaque produit et le résumé total. </p>
]]></content:encoded>
			<wfw:commentRss></wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>[SQL Server]Saga transact-SQL Episode 3 : Retrouver les données avec un SELECT</title>
		<link>https://blog.developpez.com/laurentvalente/p10928/sql-serveur/sql_server_saga_transact_sql_episode_3_r</link>
		<comments>https://blog.developpez.com/laurentvalente/p10928/sql-serveur/sql_server_saga_transact_sql_episode_3_r#comments</comments>
		<pubDate>Tue, 10 Apr 2012 08:18:37 +0000</pubDate>
		<dc:creator><![CDATA[LaurentValente]]></dc:creator>
				<category><![CDATA[SQL Serveur]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[La commande qui permet de trouver des données est le SELECT sa syntaxe générique est la suivante : colonnes demandées c&#8217;est-à-dire les colonnes spécifiées dans le liste des colonnes et qui sont présentent dans la ou les tables spécifiées dans la clause FROM et les lignes de cette ou ces tables qui correspondent au filtre indiqué dans la clause WHERE. Pour spécifier des colonnes :   On peut renommer les colonnes en utilisant ce que [&#8230;]]]></description>
				<content:encoded><![CDATA[<p><b></b></p>
<p>La commande qui permet de trouver des données est le SELECT sa syntaxe générique est la suivante :</p>
<p><a href="http://blog.developpez.com/media/413/Windows-Live-Writer/fb193a0c7462_10BD8/03042012aa_2.png"><img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="03042012aa" border="0" alt="03042012aa" src="http://blog.developpez.com/media/413/Windows-Live-Writer/fb193a0c7462_10BD8/03042012aa_thumb.png" width="646" height="175" /></a></p>
<p> colonnes demandées c&rsquo;est-à-dire les colonnes spécifiées dans le liste des colonnes et qui sont présentent dans la ou les tables spécifiées dans la clause FROM et les lignes de cette ou ces tables qui correspondent au filtre indiqué dans la clause WHERE. </p>
<p><span id="more-10"></span></p>
<p>Pour spécifier des colonnes :</p>
<p><a href="http://blog.developpez.com/media/413/Windows-Live-Writer/fb193a0c7462_10BD8/03042012a_4.jpg"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="03042012a" border="0" alt="03042012a" src="http://blog.developpez.com/media/413/Windows-Live-Writer/fb193a0c7462_10BD8/03042012a_thumb_1.jpg" width="707" height="276" /></a></p>
<p> </p>
<p>On peut renommer les colonnes en utilisant ce que l&rsquo;on appelle un alias :</p>
<p><a href="http://blog.developpez.com/media/413/Windows-Live-Writer/fb193a0c7462_10BD8/03042012b_4.jpg"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="03042012b" border="0" alt="03042012b" src="http://blog.developpez.com/media/413/Windows-Live-Writer/fb193a0c7462_10BD8/03042012b_thumb_1.jpg" width="719" height="216" /></a></p>
<p>Comme vous pouvez le voir le mot clé AS est optionnel.</p>
<p>Si on veut avoir toutes les colonnes de la tables il suffit de remplacer les noms de colonne par * mais à ce moment là bien sûr il n&rsquo;est plus possible de renommer les colonnes. Il faut aussi savoir qu&rsquo;en termes de performance le fait d&rsquo;énoncer chaque colonne est plus performant que d&rsquo;utiliser *.</p>
<p><a href="http://blog.developpez.com/media/413/Windows-Live-Writer/fb193a0c7462_10BD8/03042012c_4.jpg"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="03042012c" border="0" alt="03042012c" src="http://blog.developpez.com/media/413/Windows-Live-Writer/fb193a0c7462_10BD8/03042012c_thumb_1.jpg" width="584" height="398" /></a></p>
<p><b>Utilisez la clause WHERE pour filtrer les lignes.</b></p>
<p>Voici les différentes possibilités pour filtrer</p>
<p><a href="http://blog.developpez.com/media/413/Windows-Live-Writer/fb193a0c7462_10BD8/03042012aaa_2.png"><img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="03042012aaa" border="0" alt="03042012aaa" src="http://blog.developpez.com/media/413/Windows-Live-Writer/fb193a0c7462_10BD8/03042012aaa_thumb.png" width="604" height="314" /></a></p>
<p><b>Opérateur de comparaison</b></p>
<p><a href="http://blog.developpez.com/media/413/Windows-Live-Writer/fb193a0c7462_10BD8/03042012d_4.png"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="03042012d" border="0" alt="03042012d" src="http://blog.developpez.com/media/413/Windows-Live-Writer/fb193a0c7462_10BD8/03042012d_thumb_1.png" width="682" height="380" /></a></p>
<p><b>Comparateur de chaine</b></p>
<p><a href="http://blog.developpez.com/media/413/Windows-Live-Writer/fb193a0c7462_10BD8/03042012e_2.jpg"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="03042012e" border="0" alt="03042012e" src="http://blog.developpez.com/media/413/Windows-Live-Writer/fb193a0c7462_10BD8/03042012e_thumb.jpg" width="680" height="376" /></a></p>
<p>Filtre sur une chaine de caractère qui commence par « lau » (c&rsquo;est la lettre % qui dit « peut importe la suite »).</p>
<p><b>Expression </b><b>Returns </b></p>
<p><a href="http://blog.developpez.com/media/413/Windows-Live-Writer/fb193a0c7462_10BD8/03042012aaaa_2.png"><img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="03042012aaaa" border="0" alt="03042012aaaa" src="http://blog.developpez.com/media/413/Windows-Live-Writer/fb193a0c7462_10BD8/03042012aaaa_thumb.png" width="759" height="249" /></a></p>
<p><b>Opérateurs logique: combinaison de condition</b></p>
<p><a href="http://blog.developpez.com/media/413/Windows-Live-Writer/fb193a0c7462_10BD8/03042012f_4.jpg"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="03042012f" border="0" alt="03042012f" src="http://blog.developpez.com/media/413/Windows-Live-Writer/fb193a0c7462_10BD8/03042012f_thumb_1.jpg" width="780" height="276" /></a></p>
<p>On utilisera l&rsquo;opérateur And pour retrouver les lignes qui correspondent à tous les critères et l&rsquo;opérateur OR pour celle qui correspondent au moins à un des critères.</p>
<p><b>Opérateur logique: négations</b></p>
<p><a href="http://blog.developpez.com/media/413/Windows-Live-Writer/fb193a0c7462_10BD8/03042012g_2.jpg"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="03042012g" border="0" alt="03042012g" src="http://blog.developpez.com/media/413/Windows-Live-Writer/fb193a0c7462_10BD8/03042012g_thumb.jpg" width="735" height="443" /></a></p>
<p>On utilise Not pour renvoyer les lignes qui ne correspondent pas à la condition qui suit.</p>
<p><b>Echelle de valeur</b></p>
<p><a href="http://blog.developpez.com/media/413/Windows-Live-Writer/fb193a0c7462_10BD8/03042012h_2.jpg"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="03042012h" border="0" alt="03042012h" src="http://blog.developpez.com/media/413/Windows-Live-Writer/fb193a0c7462_10BD8/03042012h_thumb.jpg" width="497" height="339" /></a></p>
<p>On a toutes les lignes dont l&rsquo;id est compris entre 1 et 3.</p>
<p><a href="http://blog.developpez.com/media/413/Windows-Live-Writer/fb193a0c7462_10BD8/03042012i_2.jpg"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="03042012i" border="0" alt="03042012i" src="http://blog.developpez.com/media/413/Windows-Live-Writer/fb193a0c7462_10BD8/03042012i_thumb.jpg" width="621" height="320" /></a></p>
<p>On a toutes les lignes dont l&rsquo;id n&rsquo;est pas compris entre 1 et 2.</p>
<p><b>Liste de valeurs</b></p>
<p><a href="http://blog.developpez.com/media/413/Windows-Live-Writer/fb193a0c7462_10BD8/03042012j_2.png"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="03042012j" border="0" alt="03042012j" src="http://blog.developpez.com/media/413/Windows-Live-Writer/fb193a0c7462_10BD8/03042012j_thumb.png" width="625" height="358" /></a></p>
<p>On a toutes les lignes dont la colonne spécifiée possède une des valeurs entre parenthèse.</p>
<p><b>Valeurs inconnues</b></p>
<p><a href="http://blog.developpez.com/media/413/Windows-Live-Writer/fb193a0c7462_10BD8/03042012k_2.png"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="03042012k" border="0" alt="03042012k" src="http://blog.developpez.com/media/413/Windows-Live-Writer/fb193a0c7462_10BD8/03042012k_thumb.png" width="642" height="368" /></a></p>
<p>Toutes les lignes où le prénom est NULL.</p>
<p><a href="http://blog.developpez.com/media/413/Windows-Live-Writer/fb193a0c7462_10BD8/03042012l_2.jpg"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="03042012l" border="0" alt="03042012l" src="http://blog.developpez.com/media/413/Windows-Live-Writer/fb193a0c7462_10BD8/03042012l_thumb.jpg" width="606" height="418" /></a></p>
<p>Toutes les lignes où le prénom n&rsquo;est pas NULL.</p>
<p><b>Formater les résultats.</b></p>
<p><b>Ordonner les résultats</b></p>
<p>La clause ORDER BY permet d&rsquo;ordonner les résultats de façon croissante (ASC) ou décroissante (DESC).</p>
<p>Attention :</p>
<p>- SQL Server ne garantit pas un ordre dans le jeu de résultat, sauf si l&rsquo;ordre est spécifié avec une clause ORDER BY. </p>
<p>- SQL Server trie dans l&rsquo;ordre croissant par défaut. </p>
<p>- Les colonnes qui sont incluse dans la clause ORDER BY ne doivent pas apparaître obligatoirement dans la liste sélectionnée. </p>
<p>- Vous pouvez trier par nom de colonne, colonne de valeurs calculées, ou des expressions. </p>
<p>- Vous ne pouvez pas utiliser de colonnes texte, image ou nText dans la clause ORDER BY. </p>
<p>- Utiliser des index appropriés peut optimiser la clause ORDER BY. </p>
<p><a href="http://blog.developpez.com/media/413/Windows-Live-Writer/fb193a0c7462_10BD8/03042012m_2.jpg"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="03042012m" border="0" alt="03042012m" src="http://blog.developpez.com/media/413/Windows-Live-Writer/fb193a0c7462_10BD8/03042012m_thumb.jpg" width="599" height="625" /></a></p>
<p>Le même résultat aurait pus être obtenu avec la requête suivante : </p>
<p><a href="http://blog.developpez.com/media/413/Windows-Live-Writer/fb193a0c7462_10BD8/aa_2.png"><img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="aa" border="0" alt="aa" src="http://blog.developpez.com/media/413/Windows-Live-Writer/fb193a0c7462_10BD8/aa_thumb.png" width="715" height="122" /></a></p>
<p><b>Eliminer les lignes dupliquées</b></p>
<p>Si vous voulez avoir une liste de valeurs unique, utilisez la clause DISTINCT pour éliminer les lignes dupliquées dans votre Ensemble de résultats.</p>
<p>Attention :</p>
<p>- La combinaison de valeur dans un ensemble de résultats peut déterminer des lignes distinctes donc les lignes qui contiennent une combinaison unique seront retournées dans l&rsquo;ensemble de résultat.</p>
<p>Exemple :</p>
<p><a href="http://blog.developpez.com/media/413/Windows-Live-Writer/fb193a0c7462_10BD8/aaa_2.png"><img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="aaa" border="0" alt="aaa" src="http://blog.developpez.com/media/413/Windows-Live-Writer/fb193a0c7462_10BD8/aaa_thumb.png" width="694" height="93" /></a></p>
<p>Sans la clause DISTINCT on a 504 lignes, Avec on a 286 lignes. </p>
<p><b>Changer les noms de colonnes ou utiliser des littéraux</b></p>
<p>On peut avoir un ensemble de résultat plus lisible lorsqu&rsquo;on utilise la possibilité de renommer des colonnes ou que l&rsquo;on insère une colonne non nommée dans laquelle on met un littéral.</p>
<p>Exemple :</p>
<p><a href="http://blog.developpez.com/media/413/Windows-Live-Writer/fb193a0c7462_10BD8/03042012n_2.png"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="03042012n" border="0" alt="03042012n" src="http://blog.developpez.com/media/413/Windows-Live-Writer/fb193a0c7462_10BD8/03042012n_thumb.png" width="581" height="415" /></a></p>
<p>Ici &lsquo;Mon Nom : &lsquo; est un littéral qui permet de présenter chaque ligne. On a renommé les colonnes « Prenom » et « Employeur » permettant ainsi l&rsquo;utilisation d&rsquo;accent et de majuscule qui sont rarement utilisés pour des noms de colonnes dans une base.</p>
]]></content:encoded>
			<wfw:commentRss></wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>[Sql Server] Saga transact-SQL Episode 2 : Les éléments de syntaxe Transact SQL</title>
		<link>https://blog.developpez.com/laurentvalente/p10882/sql-serveur/sql_server_saga_transact_sql_episode_2_l</link>
		<comments>https://blog.developpez.com/laurentvalente/p10882/sql-serveur/sql_server_saga_transact_sql_episode_2_l#comments</comments>
		<pubDate>Tue, 27 Mar 2012 12:15:13 +0000</pubDate>
		<dc:creator><![CDATA[LaurentValente]]></dc:creator>
				<category><![CDATA[SQL Serveur]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[Les instructions DML (select, insert, update,delete)sont constituées de divers éléments de la syntaxe Transact-SQL, nous allons les détaillés. Directives de lot Une directive de lot indique à SQL server d’analyser et d’exécuter toutes les instructions qu’elle contient. Il existe 2 méthodes de base pour transmettre des lots à sql server : GO Sql interprète l’instruction GO comme signal pour envoyer les instructions transact sql actuelles à SQL server. Une commande GO délimite des lots d’instruction [&#8230;]]]></description>
				<content:encoded><![CDATA[<p style="line-height: normal; margin: 0cm 0cm 15pt; background: white; mso-outline-level: 2" class="MsoNormal"><span style="font-family: ; mso-fareast-font-family: &#39;Times New Roman&#39;; mso-fareast-language: fr-ch"><font face="Times New Roman">Les instructions DML (select, insert, update,delete)sont constituées de divers éléments de la syntaxe Transact-SQL, nous allons les détaillés.</font></span></p>
<p><span id="more-12"></span></p>
<p style="line-height: normal; margin: 0cm 0cm 10pt; background: white; mso-outline-level: 2; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" class="MsoNormal"><b><span style="font-family: ; mso-fareast-font-family: &#39;Times New Roman&#39;; mso-fareast-language: fr-ch"><font face="Tahoma"><font style="font-size: 18pt">Directives de lot</font></font></span></b></p>
<p style="line-height: normal; margin: 0cm 0cm 10pt; background: white; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" class="MsoNormal"><span style="font-family: ; mso-fareast-font-family: &#39;Times New Roman&#39;; mso-fareast-language: fr-ch"><font face="Times New Roman">Une directive de lot indique à SQL server d’analyser et d’exécuter toutes les instructions qu’elle contient. Il existe 2 méthodes de base pour transmettre des lots à sql server :</font></span></p>
<p style="line-height: normal; margin: 0cm 0cm 10pt; background: white; mso-outline-level: 3; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" class="MsoNormal"><b><span style="font-family: ; mso-fareast-font-family: &#39;Times New Roman&#39;; mso-fareast-language: fr-ch"><font face="Tahoma"><font style="font-size: 13.5pt">GO</font></font></span></b></p>
<p style="line-height: normal; margin: 0cm 0cm 10pt; background: white; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" class="MsoNormal"><span style="font-family: ; mso-fareast-font-family: &#39;Times New Roman&#39;; mso-fareast-language: fr-ch"><font face="Times New Roman">Sql interprète l’instruction GO comme signal pour envoyer les instructions transact sql actuelles à SQL server. Une commande GO délimite des lots d’instruction transact sql. La commande GO n’est pas une véritable instruction transact SQL.</font></span></p>
<p style="line-height: normal; margin: 0cm 0cm 10pt; background: white; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" class="MsoNormal"><span style="font-family: ; mso-fareast-font-family: &#39;Times New Roman&#39;; mso-fareast-language: fr-ch"><font face="Times New Roman">Quand vous utilisez GO tenez compte de ce qui suit.</font></span></p>
<p style="line-height: normal; text-indent: -18pt; margin: 0cm 0cm 10pt; background: white; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" class="MsoNormal"><span style="font-family: ; mso-fareast-font-family: &#39;Times New Roman&#39;; mso-fareast-language: fr-ch"><font face="Tahoma"><font style="font-size: 9.5pt">-</font></font></span><span style="font-family: ; mso-fareast-font-family: &#39;Times New Roman&#39;; mso-fareast-language: fr-ch"><font face="Times New Roman"><font style="font-size: 7pt"> </font></font></span><span style="font-family: ; mso-fareast-font-family: &#39;Times New Roman&#39;; mso-fareast-language: fr-ch"><font face="Tahoma"><font style="font-size: 9.5pt">Le lot d’instruction en cours est formé de toutes les instructions entrées depuis la dernière commande GO ou depuis le début de la session</font></font></span></p>
<p style="line-height: normal; text-indent: -18pt; margin: 0cm 0cm 10pt; background: white; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" class="MsoNormal"><span style="font-family: ; mso-fareast-font-family: &#39;Times New Roman&#39;; mso-fareast-language: fr-ch"><font face="Tahoma"><font style="font-size: 9.5pt">-</font></font></span><span style="font-family: ; mso-fareast-font-family: &#39;Times New Roman&#39;; mso-fareast-language: fr-ch"><font face="Times New Roman"><font style="font-size: 7pt"> </font></font></span><span style="font-family: ; mso-fareast-font-family: &#39;Times New Roman&#39;; mso-fareast-language: fr-ch"><font face="Tahoma"><font style="font-size: 9.5pt">Une instruction transact ne peut pas figurer sur la même ligne qu’une instruction GO bien que la ligne puisse contenir des commentaires.</font></font></span></p>
<p style="line-height: normal; text-indent: -18pt; margin: 0cm 0cm 10pt; background: white; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" class="MsoNormal"><span style="font-family: ; mso-fareast-font-family: &#39;Times New Roman&#39;; mso-fareast-language: fr-ch"><font face="Tahoma"><font style="font-size: 9.5pt">-</font></font></span><span style="font-family: ; mso-fareast-font-family: &#39;Times New Roman&#39;; mso-fareast-language: fr-ch"><font face="Times New Roman"><font style="font-size: 7pt"> </font></font></span><span style="font-family: ; mso-fareast-font-family: &#39;Times New Roman&#39;; mso-fareast-language: fr-ch"><font face="Tahoma"><font style="font-size: 9.5pt">La portée des variables locales est limitée à un lot. De ce fait une référence à une telle variable ne peut être faite après une commande GO.</font></font></span></p>
<p style="line-height: normal; margin: 0cm 0cm 10pt; background: white; mso-outline-level: 3; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" class="MsoNormal"><b><span style="font-family: ; mso-fareast-font-family: &#39;Times New Roman&#39;; mso-fareast-language: fr-ch"><font face="Tahoma"><font style="font-size: 13.5pt">EXEC</font></font></span></b></p>
<p style="line-height: normal; margin: 0cm 0cm 10pt; background: white; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" class="MsoNormal"><span style="font-family: ; mso-fareast-font-family: &#39;Times New Roman&#39;; mso-fareast-language: fr-ch"><font face="Times New Roman">Cette instruction est utilisée pour éxécuter une fonction définie par l’utilisateur, une procédure stockée et peut contrôler l’exécution d’une chaine de caractère dans un lot transact. Les paramètres peuvent être transmis sous forme d’arguments et un état de retour peut être attribué</font></span></p>
<p style="line-height: normal; margin: 0cm 0cm 10pt; background: white; mso-outline-level: 3; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" class="MsoNormal"><b><span style="font-family: ; mso-fareast-font-family: &#39;Times New Roman&#39;; mso-fareast-language: fr-ch"><font face="Tahoma"><font style="font-size: 13.5pt">Commentaires</font></font></span></b></p>
<p style="line-height: normal; margin: 0cm 0cm 10pt; background: white; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" class="MsoNormal"><span style="font-family: ; mso-fareast-font-family: &#39;Times New Roman&#39;; mso-fareast-language: fr-ch"><font face="Times New Roman">Les commentaires sont des chaines de textes non exécutables.</font></span></p>
<p style="line-height: normal; margin: 0cm 0cm 10pt; background: white; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" class="MsoNormal"><span style="font-family: ; mso-fareast-font-family: &#39;Times New Roman&#39;; mso-fareast-language: fr-ch"><font face="Times New Roman">Pour une ligne on la fait précéder de 2 traits d’union exemple </font></span><span style="font-family: ; color: ; mso-fareast-font-family: &#39;Times New Roman&#39;; mso-fareast-language: fr-ch"><font face="Courier New"><font style="font-size: 10pt" color="#008000">&#8211; commentaires</font></font></span><span style="font-family: ; mso-fareast-font-family: &#39;Times New Roman&#39;; mso-fareast-language: fr-ch"><font face="Times New Roman">.</font></span></p>
<p style="line-height: normal; margin: 0cm 0cm 10pt; background: white; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" class="MsoNormal"><span style="font-family: ; mso-fareast-font-family: &#39;Times New Roman&#39;; mso-fareast-language: fr-ch"><font face="Times New Roman">Pour plusieurs lignes on encadre le texte de /* et */ exemple : </font></span><span style="font-family: ; color: ; mso-fareast-font-family: &#39;Times New Roman&#39;; mso-fareast-language: fr-ch"><font face="Courier New"><font style="font-size: 10pt" color="#008000">/* commentaires */.</font></font></span><span style="font-family: ; mso-fareast-font-family: &#39;Times New Roman&#39;; mso-fareast-language: fr-ch"></span></p>
<p style="line-height: normal; margin: 0cm 0cm 10pt; background: white; mso-outline-level: 3; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" class="MsoNormal"><b><span style="font-family: ; mso-fareast-font-family: &#39;Times New Roman&#39;; mso-fareast-language: fr-ch"><font face="Tahoma"><font style="font-size: 13.5pt">Identificateurs</font></font></span></b></p>
<p style="line-height: normal; margin: 0cm 0cm 10pt; background: white; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" class="MsoNormal"><span style="font-family: ; mso-fareast-font-family: &#39;Times New Roman&#39;; mso-fareast-language: fr-ch"><font face="Times New Roman">SQL server fournit une série de règles de dénomination standard pour les identificateurs d’objet :</font></span></p>
<p style="line-height: normal; margin: 0cm 0cm 10pt; background: white; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" class="MsoNormal"><span style="font-family: ; mso-fareast-font-family: &#39;Times New Roman&#39;; mso-fareast-language: fr-ch"><font face="Times New Roman">Les Identificateur Standard peuvent contenir de 1 à 128 caractères, notamment des lettres et des symboles ( _ ,@ ou #). Et des nombres. Aucun espace n’est autorisé dans le nom des identificateurs standards. Les règles d’utilisation des identificateurs sont décrites ci-dessous.</font></span></p>
<p style="line-height: normal; text-indent: -18pt; margin: 0cm 0cm 10pt; background: white; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" class="MsoNormal"><span style="font-family: ; mso-fareast-font-family: &#39;Times New Roman&#39;; mso-fareast-language: fr-ch"><font face="Tahoma"><font style="font-size: 9.5pt">-</font></font></span><span style="font-family: ; mso-fareast-font-family: &#39;Times New Roman&#39;; mso-fareast-language: fr-ch"><font face="Times New Roman"><font style="font-size: 7pt"> </font></font></span><span style="font-family: ; mso-fareast-font-family: &#39;Times New Roman&#39;; mso-fareast-language: fr-ch"><font face="Tahoma"><font style="font-size: 9.5pt">Le premier caractère doit être une lettre comprise entre a et z ou A et Z.</font></font></span></p>
<p style="line-height: normal; text-indent: -18pt; margin: 0cm 0cm 10pt; background: white; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" class="MsoNormal"><span style="font-family: ; mso-fareast-font-family: &#39;Times New Roman&#39;; mso-fareast-language: fr-ch"><font face="Tahoma"><font style="font-size: 9.5pt">-</font></font></span><span style="font-family: ; mso-fareast-font-family: &#39;Times New Roman&#39;; mso-fareast-language: fr-ch"><font face="Times New Roman"><font style="font-size: 7pt"> </font></font></span><span style="font-family: ; mso-fareast-font-family: &#39;Times New Roman&#39;; mso-fareast-language: fr-ch"><font face="Tahoma"><font style="font-size: 9.5pt">Les identificateurs commençant par un symbole ont un usage spécial.</font></font></span></p>
<p style="line-height: normal; text-indent: -18pt; margin: 0cm 0cm 10pt 72pt; background: white; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" class="MsoNormal"><span style="font-family: ; mso-fareast-font-family: &#39;Times New Roman&#39;; mso-fareast-language: fr-ch"><font face="Courier New"><font style="font-size: 9.5pt">o</font></font></span><span style="font-family: ; mso-fareast-font-family: &#39;Times New Roman&#39;; mso-fareast-language: fr-ch"><font face="Times New Roman"><font style="font-size: 7pt"> </font></font></span><span style="font-family: ; mso-fareast-font-family: &#39;Times New Roman&#39;; mso-fareast-language: fr-ch"><font face="Tahoma"><font style="font-size: 9.5pt">Un identificateur commençant par le symbole @ représente une variable locale ou un paramètre.</font></font></span></p>
<p style="line-height: normal; text-indent: -18pt; margin: 0cm 0cm 10pt 72pt; background: white; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" class="MsoNormal"><span style="font-family: ; mso-fareast-font-family: &#39;Times New Roman&#39;; mso-fareast-language: fr-ch"><font face="Courier New"><font style="font-size: 9.5pt">o</font></font></span><span style="font-family: ; mso-fareast-font-family: &#39;Times New Roman&#39;; mso-fareast-language: fr-ch"><font face="Times New Roman"><font style="font-size: 7pt"> </font></font></span><span style="font-family: ; mso-fareast-font-family: &#39;Times New Roman&#39;; mso-fareast-language: fr-ch"><font face="Tahoma"><font style="font-size: 9.5pt">Un identificateur commença nt par un # représente une table ou une procédure temporaire.</font></font></span></p>
<p style="line-height: normal; text-indent: -18pt; margin: 0cm 0cm 10pt 72pt; background: white; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" class="MsoNormal"><span style="font-family: ; mso-fareast-font-family: &#39;Times New Roman&#39;; mso-fareast-language: fr-ch"><font face="Courier New"><font style="font-size: 9.5pt">o</font></font></span><span style="font-family: ; mso-fareast-font-family: &#39;Times New Roman&#39;; mso-fareast-language: fr-ch"><font face="Times New Roman"><font style="font-size: 7pt"> </font></font></span><span style="font-family: ; mso-fareast-font-family: &#39;Times New Roman&#39;; mso-fareast-language: fr-ch"><font face="Tahoma"><font style="font-size: 9.5pt">Un identificateur commençant par un ## représente un objet temporaire global.</font></font></span></p>
<p style="line-height: normal; margin: 0cm 0cm 10pt; background: white; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" class="MsoNormal"><span style="font-family: ; mso-fareast-font-family: &#39;Times New Roman&#39;; mso-fareast-language: fr-ch"><font face="Times New Roman">Les noms d’objets temporaires locaux ne doivent pas dépasser 116 caractères y compris le #.</font></span></p>
<p style="line-height: normal; margin: 0cm 0cm 10pt; background: white; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" class="MsoNormal"><span style="font-family: ; mso-fareast-font-family: &#39;Times New Roman&#39;; mso-fareast-language: fr-ch"><font face="Times New Roman">Les identificateurs délimités permettent d’appeler des identificateurs qui ne respectent pas les règles précédemment définies.</font></span></p>
<p style="line-height: 13pt; margin: 0cm 0cm 0pt; background: white" class="MsoNormal"><span style="line-height: 11pt; font-family: ; mso-fareast-font-family: &#39;Times New Roman&#39;; mso-fareast-language: fr-ch"><font face="Tahoma"><font style="font-size: 9.5pt">Exemple : </font></font></span><font face="Courier New"><span style="line-height: 12pt; font-family: ; color: ; mso-fareast-font-family: &#39;Times New Roman&#39;; mso-fareast-language: fr-ch"><font color="#0000ff"><font style="font-size: 10pt">select</font></font></span><span style="line-height: 12pt; font-family: ; mso-fareast-font-family: &#39;Times New Roman&#39;; mso-fareast-language: fr-ch"><font style="font-size: 10pt"> <span style="color: "><font color="#808080">*</font></span> <span style="color: "><font color="#0000ff">from</font></span> [ 1 toto table] </font></span></font></p>
<p style="line-height: normal; margin: 0cm 0cm 10pt; background: white; mso-outline-level: 3; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" class="MsoNormal"><b><span style="font-family: ; mso-fareast-font-family: &#39;Times New Roman&#39;; mso-fareast-language: fr-ch"><font face="Tahoma"><font style="font-size: 13.5pt">Variables</font></font></span></b></p>
<p style="line-height: normal; margin: 0cm 0cm 10pt; background: white; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" class="MsoNormal"><span style="font-family: ; mso-fareast-font-family: &#39;Times New Roman&#39;; mso-fareast-language: fr-ch"><font face="Times New Roman">Les variables sont des éléments du langage auxquels sont affectés des valeurs. Une variable locale est définie par l’utilisateur dans une instruction DECLARE, se voit affecter une valeur initiale dans une instruction SET ou SELECT, puis est utilisée dans une instruction, le lot ou la procédure dans laquelle elle a été déclarée. Le nom d’une variable locale est précédée du caractère @, tandis que le nom d’une variable globale est précédé de @@.</font></span></p>
<p style="line-height: normal; margin: 0cm 0cm 10pt; background: white; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" class="MsoNormal"><span style="font-family: ; mso-fareast-font-family: &#39;Times New Roman&#39;; mso-fareast-language: fr-ch"><font face="Times New Roman">Exemple : </font></span></p>
<p style="line-height: normal; margin: 0cm 0cm 0pt; background: white" class="MsoNormal"><font face="Courier New"><span style="font-family: ; color: ; mso-fareast-font-family: &#39;Times New Roman&#39;; mso-fareast-language: fr-ch"><font color="#0000ff"><font style="font-size: 10pt">Declare</font></font></span><span style="font-family: ; mso-fareast-font-family: &#39;Times New Roman&#39;; mso-fareast-language: fr-ch"><font style="font-size: 10pt"> @mavariable <span style="color: "><font color="#0000ff">varchar</font></span> <span style="color: "><font color="#808080">(</font></span>100</font><span style="color: "><font style="font-size: 10pt" color="#808080">) </font></span></span></font></p>
<p style="line-height: normal; margin: 0cm 0cm 0pt; background: white" class="MsoNormal"><font face="Courier New"><span style="font-family: ; color: ; mso-fareast-font-family: &#39;Times New Roman&#39;; mso-fareast-language: fr-ch"><font color="#0000ff"><font style="font-size: 10pt">set</font></font></span><span style="font-family: ; mso-fareast-font-family: &#39;Times New Roman&#39;; mso-fareast-language: fr-ch"><font style="font-size: 10pt"> @mavariable<span style="color: "><font color="#808080">=</font></span> </font><span style="color: "><font style="font-size: 10pt" color="#ff0000">&lsquo;AKE coucou&rsquo; </font></span></span></font></p>
<p style="line-height: normal; margin: 0cm 0cm 0pt; background: white" class="MsoNormal"><font face="Courier New"><span style="font-family: ; color: ; mso-fareast-font-family: &#39;Times New Roman&#39;; mso-fareast-language: fr-ch"><font color="#0000ff"><font style="font-size: 10pt">print</font></font></span><span style="font-family: ; mso-fareast-font-family: &#39;Times New Roman&#39;; mso-fareast-language: fr-ch"><font style="font-size: 10pt"> @mavariable </font></span></font></p>
<p style="line-height: normal; margin: 0cm 0cm 10pt; background: white; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" class="MsoNormal"><font face="Courier New"><span style="font-family: ; color: ; mso-fareast-font-family: &#39;Times New Roman&#39;; mso-fareast-language: fr-ch"><font color="#0000ff"><font style="font-size: 10pt">select</font></font></span><span style="font-family: ; mso-fareast-font-family: &#39;Times New Roman&#39;; mso-fareast-language: fr-ch"><font style="font-size: 10pt"> <span style="color: "><font color="#808080">*</font></span> <span style="color: "><font color="#0000ff">from</font></span> matable <span style="color: "><font color="#0000ff">where</font></span> moncommentraire<span style="color: "><font color="#808080">=</font></span>@mavariable</font></span></font><span style="font-family: ; mso-fareast-font-family: &#39;Times New Roman&#39;; mso-fareast-language: fr-ch"></span></p>
<p style="line-height: normal; margin: 0cm 0cm 10pt; background: white; mso-outline-level: 3; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" class="MsoNormal"><b><span style="font-family: ; mso-fareast-font-family: &#39;Times New Roman&#39;; mso-fareast-language: fr-ch"><font face="Tahoma"><font style="font-size: 13.5pt">Fonctions système</font></font></span></b></p>
<p style="line-height: normal; margin: 0cm 0cm 10pt; background: white; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" class="MsoNormal"><span style="font-family: ; mso-fareast-font-family: &#39;Times New Roman&#39;; mso-fareast-language: fr-ch"><font face="Times New Roman">Vous pouvez utiliser les expressions systèmes chaque fois qu’une expression est autorisée dans une instruction SELECT. Transact est doté de nombreuses fonctions qui renvoient des résultats, elles sont notées en rose dans l’éditeur de requête.</font></span></p>
<p style="line-height: normal; margin: 0cm 0cm 0pt; background: white" class="MsoNormal"><span style="font-family: ; mso-fareast-font-family: &#39;Times New Roman&#39;; mso-fareast-language: fr-ch"><font face="Courier New"><font style="font-size: 10pt">Exemple : </font></font></span></p>
<p style="line-height: 13pt; margin: 0cm 0cm 0pt; background: white" class="MsoNormal"><font face="Courier New"><span style="line-height: 12pt; font-family: ; color: ; mso-fareast-font-family: &#39;Times New Roman&#39;; mso-fareast-language: fr-ch"><font color="#0000ff"><font style="font-size: 10pt">Select</font></font></span><span style="line-height: 12pt; font-family: ; mso-fareast-font-family: &#39;Times New Roman&#39;; mso-fareast-language: fr-ch"><font style="font-size: 10pt"> <span style="color: "><font color="#ff00ff">AVG</font></span> <span style="color: "><font color="#808080">(</font></span>prixunitaire<span style="color: "><font color="#808080">)</font></span> <span style="color: "><font color="#0000ff">as</font></span> avgprice <span style="color: "><font color="#0000ff">from</font></span> products </font></span></font></p>
<p style="line-height: 13pt; margin: 0cm 0cm 0pt; background: white" class="MsoNormal"><span style="line-height: 12pt; font-family: ; mso-fareast-font-family: &#39;Times New Roman&#39;; mso-fareast-language: fr-ch"><font face="Courier New"><font style="font-size: 10pt">GO </font></font></span></p>
<p style="line-height: normal; margin: 0cm 0cm 0pt; background: white" class="MsoNormal"><font face="Courier New"><span style="font-family: ; color: ; mso-fareast-font-family: &#39;Times New Roman&#39;; mso-fareast-language: fr-ch"><font color="#0000ff"><font style="font-size: 10pt">select</font></font></span><span style="font-family: ; mso-fareast-font-family: &#39;Times New Roman&#39;; mso-fareast-language: fr-ch"><font style="font-size: 10pt"> <span style="color: "><font color="#ff0000">&lsquo;ANSI : &lsquo;</font></span><span style="color: "><font color="#808080">,</font></span> <span style="color: "><font color="#ff00ff">convert</font></span><span style="color: "><font color="#808080">(</font></span><span style="color: "><font color="#0000ff">varchar</font></span><span style="color: "><font color="#808080">(</font></span>30<span style="color: "><font color="#808080">),</font></span><span style="color: "><font color="#ff00ff">GetDATE</font></span><span style="color: "><font color="#808080">(),</font></span>102</font><span style="color: "><font style="font-size: 10pt" color="#808080">) </font></span></span></font></p>
<p style="line-height: normal; margin: 0cm 0cm 0pt; background: white" class="MsoNormal"><span style="font-family: ; color: ; mso-fareast-font-family: &#39;Times New Roman&#39;; mso-fareast-language: fr-ch"><font face="Courier New"><font style="font-size: 10pt" color="#0000ff">union </font></font></span></p>
<p style="line-height: 13pt; margin: 0cm 0cm 0pt; background: white" class="MsoNormal"><font face="Courier New"><span style="line-height: 12pt; font-family: ; color: ; mso-fareast-font-family: &#39;Times New Roman&#39;; mso-fareast-language: fr-ch"><font color="#0000ff"><font style="font-size: 10pt">select</font></font></span><span style="line-height: 12pt; font-family: ; mso-fareast-font-family: &#39;Times New Roman&#39;; mso-fareast-language: fr-ch"><font style="font-size: 10pt"> <span style="color: "><font color="#ff0000">&lsquo;Européen : &lsquo;</font></span><span style="color: "><font color="#808080">,</font></span> <span style="color: "><font color="#ff00ff">convert</font></span><span style="color: "><font color="#808080">(</font></span><span style="color: "><font color="#0000ff">varchar</font></span><span style="color: "><font color="#808080">(</font></span>30<span style="color: "><font color="#808080">),</font></span><span style="color: "><font color="#ff00ff">GetDATE</font></span><span style="color: "><font color="#808080">(),</font></span>113</font><span style="color: "><font style="font-size: 10pt" color="#808080">) </font></span></span></font></p>
<p style="line-height: 13pt; margin: 0cm 0cm 0pt; background: white" class="MsoNormal"><span style="line-height: 12pt; font-family: ; mso-fareast-font-family: &#39;Times New Roman&#39;; mso-fareast-language: fr-ch"><font face="Courier New"><font style="font-size: 10pt">GO </font></font></span></p>
<p style="line-height: 13pt; margin: 0cm 0cm 0pt; background: white" class="MsoNormal"><font face="Courier New"><span style="line-height: 12pt; font-family: ; color: ; mso-fareast-font-family: &#39;Times New Roman&#39;; mso-fareast-language: fr-ch"><font color="#0000ff"><font style="font-size: 10pt">select</font></font></span><span style="line-height: 12pt; font-family: ; mso-fareast-font-family: &#39;Times New Roman&#39;; mso-fareast-language: fr-ch"><font style="font-size: 10pt"> <span style="color: "><font color="#ff00ff">user_name</font></span><span style="color: "><font color="#808080">(),</font></span> <span style="color: "><font color="#ff00ff">app_name</font></span></font><span style="color: "><font style="font-size: 10pt" color="#808080">() </font></span></span></font></p>
<p style="line-height: normal; margin: 0cm 0cm 10pt; background: white; mso-outline-level: 3; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" class="MsoNormal"><b><span style="font-family: ; mso-fareast-font-family: &#39;Times New Roman&#39;; mso-fareast-language: fr-ch"><font face="Tahoma"><font style="font-size: 13.5pt">Opérateurs</font></font></span></b></p>
<p style="line-height: normal; margin: 0cm 0cm 10pt; background: white; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" class="MsoNormal"><span style="font-family: ; mso-fareast-font-family: &#39;Times New Roman&#39;; mso-fareast-language: fr-ch"><font face="Times New Roman">Les opérateurs sont des symboles qui effectuent des calculs mathématiques, des concaténations de chaînes et des comparaisons. Ils peuvent être combinés et utilisés dans des conditions de recherche.</font></span></p>
<p style="line-height: normal; text-indent: -18pt; margin: 0cm 0cm 10pt; background: white; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" class="MsoNormal"><span style="font-family: ; mso-fareast-font-family: &#39;Times New Roman&#39;; mso-fareast-language: fr-ch"><font face="Tahoma"><font style="font-size: 9.5pt">-</font></font></span><span style="font-family: ; mso-fareast-font-family: &#39;Times New Roman&#39;; mso-fareast-language: fr-ch"><font face="Times New Roman"><font style="font-size: 7pt"> </font></font></span><span style="font-family: ; mso-fareast-font-family: &#39;Times New Roman&#39;; mso-fareast-language: fr-ch"><font face="Tahoma"><font style="font-size: 9.5pt">Les opérateurs arithmétiques effectuent des calculs sur des colonnes numériques ou sur des constantes. On multiplication(*), division (/), et modulo (%)(le reste de la division d’entiers) et les opérateurs additifs (addition (+) et soustraction (-).</font></font></span></p>
<p style="line-height: normal; text-indent: -18pt; margin: 0cm 0cm 10pt; background: white; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" class="MsoNormal"><span style="font-family: ; mso-fareast-font-family: &#39;Times New Roman&#39;; mso-fareast-language: fr-ch"><font face="Tahoma"><font style="font-size: 9.5pt">-</font></font></span><span style="font-family: ; mso-fareast-font-family: &#39;Times New Roman&#39;; mso-fareast-language: fr-ch"><font face="Times New Roman"><font style="font-size: 7pt"> </font></font></span><span style="font-family: ; mso-fareast-font-family: &#39;Times New Roman&#39;; mso-fareast-language: fr-ch"><font face="Tahoma"><font style="font-size: 9.5pt">Les opérateurs de comparaison comparent 2 expressions. Des comparaisons peuvent être effectuées entre des variables, colonne et expressions de même type.</font></font></span></p>
<p style="line-height: normal; margin: 0cm 0cm 10pt; background: white; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" class="MsoNormal"><span style="font-family: ; mso-fareast-font-family: &#39;Times New Roman&#39;; mso-fareast-language: fr-ch"><font face="Tahoma"><font style="font-size: 9.5pt">On a égal (=), supérieur(&gt;), inférieur(&lt;) , supérieur ou égal (&gt;=), inférieur ou égal(&lt;=) , différent (&lt;&gt;).</font></font></span></p>
<p style="line-height: normal; text-indent: -18pt; margin: 0cm 0cm 10pt; background: white; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" class="MsoNormal"><span style="font-family: ; mso-fareast-font-family: &#39;Times New Roman&#39;; mso-fareast-language: fr-ch"><font face="Tahoma"><font style="font-size: 9.5pt">-</font></font></span><span style="font-family: ; mso-fareast-font-family: &#39;Times New Roman&#39;; mso-fareast-language: fr-ch"><font face="Times New Roman"><font style="font-size: 7pt"> </font></font></span><span style="font-family: ; mso-fareast-font-family: &#39;Times New Roman&#39;; mso-fareast-language: fr-ch"><font face="Tahoma"><font style="font-size: 9.5pt">Les operateurs de concaténation de chaine(+) concatène des valeurs de chaîne. La chaîne vide n’est jamais évaluée comme une valeur NULL.</font></font></span></p>
<p style="line-height: normal; text-indent: -18pt; margin: 0cm 0cm 10pt; background: white; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" class="MsoNormal"><span style="font-family: ; mso-fareast-font-family: &#39;Times New Roman&#39;; mso-fareast-language: fr-ch"><font face="Tahoma"><font style="font-size: 9.5pt">-</font></font></span><span style="font-family: ; mso-fareast-font-family: &#39;Times New Roman&#39;; mso-fareast-language: fr-ch"><font face="Times New Roman"><font style="font-size: 7pt"> </font></font></span><span style="font-family: ; mso-fareast-font-family: &#39;Times New Roman&#39;; mso-fareast-language: fr-ch"><font face="Tahoma"><font style="font-size: 9.5pt">Les opérateurs Logiques And, OR, et NOT relient des conditions de recherche dans des clauses WHERE</font></font></span></p>
<p style="line-height: normal; text-indent: -18pt; margin: 0cm 0cm 10pt; background: white; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" class="MsoNormal"><span style="font-family: ; mso-fareast-font-family: &#39;Times New Roman&#39;; mso-fareast-language: fr-ch"><font face="Tahoma"><font style="font-size: 9.5pt">-</font></font></span><span style="font-family: ; mso-fareast-font-family: &#39;Times New Roman&#39;; mso-fareast-language: fr-ch"><font face="Times New Roman"><font style="font-size: 7pt"> </font></font></span><span style="font-family: ; mso-fareast-font-family: &#39;Times New Roman&#39;; mso-fareast-language: fr-ch"><font face="Tahoma"><font style="font-size: 9.5pt">Le niveau de priorité est le suivant : groupement () -&gt;multiplicatif */% -&gt;additif +- -&gt;concaténation de chaîne + -&gt;NOT -&gt; AND -&gt; OR. SQL SERVER traite en premier l’expression ayant le niveau d’imbrication le plus élevé. En outre, si tous les opérateurs arithmétiques d’une expression partagent le même niveau de priorité, l’ordre va de droite à gauche.</font></font></span></p>
<p style="line-height: normal; margin: 0cm 0cm 10pt; background: white; mso-outline-level: 3; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" class="MsoNormal"><b><span style="font-family: ; mso-fareast-font-family: &#39;Times New Roman&#39;; mso-fareast-language: fr-ch"><font face="Tahoma"><font style="font-size: 13.5pt">Expressions</font></font></span></b></p>
<p style="line-height: normal; margin: 0cm 0cm 10pt; background: white; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" class="MsoNormal"><span style="font-family: ; mso-fareast-font-family: &#39;Times New Roman&#39;; mso-fareast-language: fr-ch"><font face="Times New Roman">L’exemple suivant calcule la quantité de produits dans une commande en multipliant le prix unitaire par la quantité commandée, puis filtre le résultat pour ne retourner que les lignes qui ont une valeur supérieure à 10 000</font></span></p>
<p style="line-height: normal; margin: 0cm 0cm 10pt; background: white; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" class="MsoNormal"><font face="Courier New"><span style="font-family: ; color: ; mso-fareast-font-family: &#39;Times New Roman&#39;; mso-fareast-language: fr-ch"><font color="#0000ff"><font style="font-size: 10pt">Select</font></font></span><span style="font-family: ; mso-fareast-font-family: &#39;Times New Roman&#39;; mso-fareast-language: fr-ch"><font style="font-size: 10pt"> orderId<span style="color: "><font color="#808080">,</font></span> ProductId<span style="color: "><font color="#808080">,</font></span> <span style="color: "><font color="#808080">(</font></span>Unitprice <span style="color: "><font color="#808080">*</font></span> Quantity<span style="color: "><font color="#808080">)</font></span> <span style="color: "><font color="#0000ff">as</font></span> montant <span style="color: "><font color="#0000ff">from</font></span> [order details] <span style="color: "><font color="#0000ff">where</font></span> <span style="color: "><font color="#808080">(</font></span>unitprice <span style="color: "><font color="#808080">*</font></span> quantity<span style="color: "><font color="#808080">)</font></span> <span style="color: "><font color="#808080">&gt;</font></span> 10000</font></span></font><span style="font-family: ; mso-fareast-font-family: &#39;Times New Roman&#39;; mso-fareast-language: fr-ch"></span></p>
<p style="line-height: normal; margin: 0cm 0cm 10pt; background: white; mso-outline-level: 3; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" class="MsoNormal"><b><span style="font-family: ; mso-fareast-font-family: &#39;Times New Roman&#39;; mso-fareast-language: fr-ch"><font face="Tahoma"><font style="font-size: 13.5pt">Eléments de langage de contrôle de flux</font></font></span></b></p>
<p style="line-height: normal; margin: 0cm 0cm 10pt; background: white; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" class="MsoNormal"><span style="font-family: ; mso-fareast-font-family: &#39;Times New Roman&#39;; mso-fareast-language: fr-ch"><font face="Times New Roman">Transact prend en charge plusieurs éléments de langage qui contrôlent le flux de la logique dans les instructions. Il contient aussi l’instruction CASE qui vous permet d’utiliser une logique conditionnelle sur une seule ligne à la fois dans une instruction SELECT ou UPDATE.</font></span></p>
<p style="line-height: normal; margin: 0cm 0cm 10pt; background: white; mso-outline-level: 4; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" class="MsoNormal"><b><span style="font-family: ; mso-fareast-font-family: &#39;Times New Roman&#39;; mso-fareast-language: fr-ch"><font face="Tahoma">Niveau Instruction :</font></span></b></p>
<p style="line-height: normal; margin: 0cm 0cm 10pt; background: white; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" class="MsoNormal"><span style="font-family: ; mso-fareast-font-family: &#39;Times New Roman&#39;; mso-fareast-language: fr-ch"><font face="Tahoma"><font style="font-size: 9.5pt">Les éléments de langage suivants vous permettent de contrôler le flux de la logique d’un script :</font></font></span></p>
<p style="line-height: normal; margin: 0cm 0cm 10pt; background: white; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" class="MsoNormal"><span style="font-family: ; mso-fareast-font-family: &#39;Times New Roman&#39;; mso-fareast-language: fr-ch"><font face="Tahoma"><font style="font-size: 9.5pt">Blocs Begin… end -&gt; ces éléments délimitent une série d’instructions Transact pour les traiter sous forme d’une unité.</font></font></span></p>
<p style="line-height: normal; margin: 0cm 0cm 10pt; background: white; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" class="MsoNormal"><span style="font-family: ; mso-fareast-font-family: &#39;Times New Roman&#39;; mso-fareast-language: fr-ch"><font face="Tahoma"><font style="font-size: 9.5pt">Blocs If…Else -&gt;Ces éléments indiquent que SQL server doit exécuter la première alternative si une certaine condition est vraie. Dans le cas contraire, SQl server doit exécuter la deuxième alternative.</font></font></span></p>
<p style="line-height: normal; margin: 0cm 0cm 10pt; background: white; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" class="MsoNormal"><span style="font-family: ; mso-fareast-font-family: &#39;Times New Roman&#39;; mso-fareast-language: fr-ch"><font face="Tahoma"><font style="font-size: 9.5pt">Construction WHILE -&gt; Ces éléments exécutent une instruction de façon répétée tant que la condition spécifiée est vraie. Les instructions BREAK et CONTINUE contrôlent le fonctionnement des instructions dans une boucle WHILE.</font></font></span></p>
<p style="line-height: normal; margin: 0cm 0cm 10pt; background: white; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" class="MsoNormal"><span style="font-family: ; mso-fareast-font-family: &#39;Times New Roman&#39;; mso-fareast-language: fr-ch"><font face="Tahoma"><font style="font-size: 9.5pt">Exemple :</font></font></span></p>
<p style="line-height: normal; margin: 0cm 0cm 0pt; background: white" class="MsoNormal"><font face="Courier New"><span style="font-family: ; color: ; mso-fareast-font-family: &#39;Times New Roman&#39;; mso-fareast-language: fr-ch"><font color="#0000ff"><font style="font-size: 10pt">if</font></font></span><span style="font-family: ; mso-fareast-font-family: &#39;Times New Roman&#39;; mso-fareast-language: fr-ch"><font style="font-size: 10pt"> <span style="color: "><font color="#808080">EXISTS</font></span> <span style="color: "><font color="#808080">(</font></span><span style="color: "><font color="#0000ff">select</font></span> <span style="color: "><font color="#808080">*</font></span> <span style="color: "><font color="#0000ff">from</font></span> matable <span style="color: "><font color="#0000ff">where</font></span> monid<span style="color: "><font color="#808080">=</font></span>10</font><span style="color: "><font style="font-size: 10pt" color="#808080">) </font></span></span></font></p>
<p style="line-height: normal; margin: 0cm 0cm 0pt; background: white" class="MsoNormal"><font face="Courier New"><span style="font-family: ; color: ; mso-fareast-font-family: &#39;Times New Roman&#39;; mso-fareast-language: fr-ch"><font color="#0000ff"><font style="font-size: 10pt">begin</font></font></span><span style="font-family: ; mso-fareast-font-family: &#39;Times New Roman&#39;; mso-fareast-language: fr-ch"><font style="font-size: 10pt"> </font></span></font></p>
<p style="line-height: normal; margin: 0cm 0cm 0pt; background: white" class="MsoNormal"><font face="Courier New"><span style="font-family: ; color: ; mso-fareast-font-family: &#39;Times New Roman&#39;; mso-fareast-language: fr-ch"><font color="#0000ff"><font style="font-size: 10pt">print</font></font></span><span style="font-family: ; mso-fareast-font-family: &#39;Times New Roman&#39;; mso-fareast-language: fr-ch"><font style="font-size: 10pt"> </font><span style="color: "><font style="font-size: 10pt" color="#ff0000">&lsquo;il y a des lignes&rsquo; </font></span></span></font></p>
<p style="line-height: normal; margin: 0cm 0cm 0pt; background: white" class="MsoNormal"><span style="font-family: ; color: ; mso-fareast-font-family: &#39;Times New Roman&#39;; mso-fareast-language: fr-ch"><font face="Courier New"><font style="font-size: 10pt" color="#0000ff">End </font></font></span></p>
<p style="line-height: normal; margin: 0cm 0cm 0pt; background: white" class="MsoNormal"><span style="font-family: ; color: ; mso-fareast-font-family: &#39;Times New Roman&#39;; mso-fareast-language: fr-ch"><font face="Courier New"><font style="font-size: 10pt" color="#0000ff">else </font></font></span></p>
<p style="line-height: normal; margin: 0cm 0cm 0pt; background: white" class="MsoNormal"><span style="font-family: ; color: ; mso-fareast-font-family: &#39;Times New Roman&#39;; mso-fareast-language: fr-ch"><font face="Courier New"><font style="font-size: 10pt" color="#0000ff">begin </font></font></span></p>
<p style="line-height: normal; margin: 0cm 0cm 0pt; background: white" class="MsoNormal"><font face="Courier New"><span style="font-family: ; color: ; mso-fareast-font-family: &#39;Times New Roman&#39;; mso-fareast-language: fr-ch"><font color="#0000ff"><font style="font-size: 10pt">print</font></font></span><span style="font-family: ; mso-fareast-font-family: &#39;Times New Roman&#39;; mso-fareast-language: fr-ch"><font style="font-size: 10pt"> </font><span style="color: "><font style="font-size: 10pt" color="#ff0000">&lsquo;pas de ligne&rsquo; </font></span></span></font></p>
<p style="line-height: normal; margin: 0cm 0cm 0pt; background: white" class="MsoNormal"><span style="font-family: ; color: ; mso-fareast-font-family: &#39;Times New Roman&#39;; mso-fareast-language: fr-ch"><font face="Courier New"><font style="font-size: 10pt" color="#0000ff">end </font></font></span></p>
<p style="line-height: normal; margin: 0cm 0cm 10pt; background: white; mso-outline-level: 4; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" class="MsoNormal"><b><span style="font-family: ; mso-fareast-font-family: &#39;Times New Roman&#39;; mso-fareast-language: fr-ch"><font face="Tahoma">Niveau ligne</font></span></b></p>
<p style="line-height: normal; margin: 0cm 0cm 10pt; background: white; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" class="MsoNormal"><span style="font-family: ; mso-fareast-font-family: &#39;Times New Roman&#39;; mso-fareast-language: fr-ch"><font face="Tahoma"><font style="font-size: 9.5pt">Une expression CASE répertorie les prédicats, affecte une valeur à chacun d’eux, puis les teste. Si l’expression renvoie une valeur vraie, l’expression CASE la renvoie dans la clause WHEN. Si l’expression renvoie une valeur fausse et que vous avez spécifié une clause ELSE, SQL renvoie la valeur dans cette clause.</font></font></span></p>
<p style="line-height: normal; margin: 0cm 0cm 0pt; background: white" class="MsoNormal"><font face="Courier New"><span style="font-family: ; color: ; mso-fareast-font-family: &#39;Times New Roman&#39;; mso-fareast-language: fr-ch"><font color="#0000ff"><font style="font-size: 10pt">declare</font></font></span><span style="font-family: ; mso-fareast-font-family: &#39;Times New Roman&#39;; mso-fareast-language: fr-ch"><font style="font-size: 10pt"> @n </font><span style="color: "><font style="font-size: 10pt" color="#0000ff">tinyint </font></span></span></font></p>
<p style="line-height: normal; margin: 0cm 0cm 0pt; background: white" class="MsoNormal"><font face="Courier New"><span style="font-family: ; color: ; mso-fareast-font-family: &#39;Times New Roman&#39;; mso-fareast-language: fr-ch"><font color="#0000ff"><font style="font-size: 10pt">set</font></font></span><span style="font-family: ; mso-fareast-font-family: &#39;Times New Roman&#39;; mso-fareast-language: fr-ch"><font style="font-size: 10pt"> @n<span style="color: "><font color="#808080">=</font></span>5 </font></span></font></p>
<p style="line-height: normal; margin: 0cm 0cm 0pt; background: white" class="MsoNormal"><font face="Courier New"><span style="font-family: ; color: ; mso-fareast-font-family: &#39;Times New Roman&#39;; mso-fareast-language: fr-ch"><font color="#0000ff"><font style="font-size: 10pt">if</font></font></span><span style="font-family: ; mso-fareast-font-family: &#39;Times New Roman&#39;; mso-fareast-language: fr-ch"><font style="font-size: 10pt"> <span style="color: "><font color="#808080">(</font></span>@n <span style="color: "><font color="#808080">between</font></span> 4 <span style="color: "><font color="#808080">and</font></span> 6</font><span style="color: "><font style="font-size: 10pt" color="#808080">) </font></span></span></font></p>
<p style="line-height: normal; margin: 0cm 0cm 0pt; background: white" class="MsoNormal"><span style="font-family: ; color: ; mso-fareast-font-family: &#39;Times New Roman&#39;; mso-fareast-language: fr-ch"><font face="Courier New"><font style="font-size: 10pt" color="#0000ff">Begin </font></font></span></p>
<p style="line-height: normal; margin: 0cm 0cm 0pt; background: white" class="MsoNormal"><font face="Courier New"><span style="font-family: ; color: ; mso-fareast-font-family: &#39;Times New Roman&#39;; mso-fareast-language: fr-ch"><font color="#0000ff"><font style="font-size: 10pt">While</font></font></span><span style="font-family: ; mso-fareast-font-family: &#39;Times New Roman&#39;; mso-fareast-language: fr-ch"><font style="font-size: 10pt"> <span style="color: "><font color="#808080">(</font></span>@n<span style="color: "><font color="#808080">&gt;</font></span>0</font><span style="color: "><font style="font-size: 10pt" color="#808080">) </font></span></span></font></p>
<p style="line-height: normal; margin: 0cm 0cm 0pt; background: white" class="MsoNormal"><span style="font-family: ; color: ; mso-fareast-font-family: &#39;Times New Roman&#39;; mso-fareast-language: fr-ch"><font face="Courier New"><font style="font-size: 10pt" color="#0000ff">begin </font></font></span></p>
<p style="line-height: normal; margin: 0cm 0cm 0pt; background: white" class="MsoNormal"><font face="Courier New"><span style="font-family: ; color: ; mso-fareast-font-family: &#39;Times New Roman&#39;; mso-fareast-language: fr-ch"><font color="#0000ff"><font style="font-size: 10pt">select</font></font></span><span style="font-family: ; mso-fareast-font-family: &#39;Times New Roman&#39;; mso-fareast-language: fr-ch"><font style="font-size: 10pt"> @n <span style="color: "><font color="#0000ff">as</font></span> <span style="color: "><font color="#ff0000">&lsquo;nombre&rsquo;</font></span></font><span style="color: "><font style="font-size: 10pt" color="#808080">, </font></span></span></font></p>
<p style="line-height: normal; margin: 0cm 0cm 0pt; background: white" class="MsoNormal"><font face="Courier New"><span style="font-family: ; color: ; mso-fareast-font-family: &#39;Times New Roman&#39;; mso-fareast-language: fr-ch"><font color="#0000ff"><font style="font-size: 10pt">case</font></font></span><span style="font-family: ; mso-fareast-font-family: &#39;Times New Roman&#39;; mso-fareast-language: fr-ch"><font style="font-size: 10pt"> </font></span></font></p>
<p style="line-height: normal; margin: 0cm 0cm 0pt; background: white" class="MsoNormal"><font face="Courier New"><span style="font-family: ; color: ; mso-fareast-font-family: &#39;Times New Roman&#39;; mso-fareast-language: fr-ch"><font color="#0000ff"><font style="font-size: 10pt">when</font></font></span><span style="font-family: ; mso-fareast-font-family: &#39;Times New Roman&#39;; mso-fareast-language: fr-ch"><font style="font-size: 10pt"> <span style="color: "><font color="#808080">(</font></span>@n<span style="color: "><font color="#808080">%</font></span>2<span style="color: "><font color="#808080">)=</font></span>1 </font></span></font></p>
<p style="line-height: normal; margin: 0cm 0cm 0pt; background: white" class="MsoNormal"><font face="Courier New"><span style="font-family: ; color: ; mso-fareast-font-family: &#39;Times New Roman&#39;; mso-fareast-language: fr-ch"><font color="#0000ff"><font style="font-size: 10pt">then</font></font></span><span style="font-family: ; mso-fareast-font-family: &#39;Times New Roman&#39;; mso-fareast-language: fr-ch"><font style="font-size: 10pt"> </font><span style="color: "><font style="font-size: 10pt" color="#ff0000">&lsquo;Impair&rsquo; </font></span></span></font></p>
<p style="line-height: normal; margin: 0cm 0cm 0pt; background: white" class="MsoNormal"><font face="Courier New"><span style="font-family: ; color: ; mso-fareast-font-family: &#39;Times New Roman&#39;; mso-fareast-language: fr-ch"><font color="#0000ff"><font style="font-size: 10pt">else</font></font></span><span style="font-family: ; mso-fareast-font-family: &#39;Times New Roman&#39;; mso-fareast-language: fr-ch"><font style="font-size: 10pt"> </font><span style="color: "><font style="font-size: 10pt" color="#ff0000">&lsquo;PAIR&rsquo; </font></span></span></font></p>
<p style="line-height: normal; margin: 0cm 0cm 0pt; background: white" class="MsoNormal"><font face="Courier New"><span style="font-family: ; color: ; mso-fareast-font-family: &#39;Times New Roman&#39;; mso-fareast-language: fr-ch"><font color="#0000ff"><font style="font-size: 10pt">end</font></font></span><span style="font-family: ; mso-fareast-font-family: &#39;Times New Roman&#39;; mso-fareast-language: fr-ch"><font style="font-size: 10pt"> <span style="color: "><font color="#0000ff">as</font></span> </font><span style="color: "><font style="font-size: 10pt" color="#ff0000">&lsquo;Type&rsquo; </font></span></span></font></p>
<p style="line-height: normal; margin: 0cm 0cm 0pt; background: white" class="MsoNormal"><font face="Courier New"><span style="font-family: ; color: ; mso-fareast-font-family: &#39;Times New Roman&#39;; mso-fareast-language: fr-ch"><font color="#0000ff"><font style="font-size: 10pt">set</font></font></span><span style="font-family: ; mso-fareast-font-family: &#39;Times New Roman&#39;; mso-fareast-language: fr-ch"><font style="font-size: 10pt"> @n<span style="color: "><font color="#808080">=</font></span>@n <span style="color: "><font color="#808080">-</font></span> 1 </font></span></font></p>
<p style="line-height: normal; margin: 0cm 0cm 0pt; background: white" class="MsoNormal"><span style="font-family: ; color: ; mso-fareast-font-family: &#39;Times New Roman&#39;; mso-fareast-language: fr-ch"><font face="Courier New"><font style="font-size: 10pt" color="#0000ff">end </font></font></span></p>
<p style="line-height: normal; margin: 0cm 0cm 0pt; background: white" class="MsoNormal"><span style="font-family: ; color: ; mso-fareast-font-family: &#39;Times New Roman&#39;; mso-fareast-language: fr-ch"><font face="Courier New"><font style="font-size: 10pt" color="#0000ff">end </font></font></span></p>
<p style="line-height: normal; margin: 0cm 0cm 0pt; background: white" class="MsoNormal"><span style="font-family: ; color: ; mso-fareast-font-family: &#39;Times New Roman&#39;; mso-fareast-language: fr-ch"><font face="Courier New"><font style="font-size: 10pt" color="#0000ff">else </font></font></span></p>
<p style="line-height: normal; margin: 0cm 0cm 10pt; background: white; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" class="MsoNormal"><font face="Courier New"><span style="font-family: ; color: ; mso-fareast-font-family: &#39;Times New Roman&#39;; mso-fareast-language: fr-ch"><font color="#0000ff"><font style="font-size: 10pt">print</font></font></span><span style="font-family: ; mso-fareast-font-family: &#39;Times New Roman&#39;; mso-fareast-language: fr-ch"><font style="font-size: 10pt"> </font><span style="color: "><font style="font-size: 10pt" color="#ff0000">&lsquo;analyse impossible&rsquo;</font></span></span></font><span style="font-family: ; mso-fareast-font-family: &#39;Times New Roman&#39;; mso-fareast-language: fr-ch"></span></p>
<p style="line-height: normal; margin: 0cm 0cm 10pt; background: white; mso-outline-level: 3; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" class="MsoNormal"><b><span style="font-family: ; mso-fareast-font-family: &#39;Times New Roman&#39;; mso-fareast-language: fr-ch"><font face="Tahoma"><font style="font-size: 13.5pt">Mots clés réservés</font></font></span></b></p>
<p style="line-height: normal; margin: 0cm 0cm 10pt; background: white; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" class="MsoNormal"><span style="font-family: ; mso-fareast-font-family: &#39;Times New Roman&#39;; mso-fareast-language: fr-ch"><font face="Times New Roman">SQL server réserve un certain nombre de mot clé à son usage personnel si néanmoins vous devez utiliser certain de ces mot pour un usage qui n’est pas celui définit il suffit de les délimiter par des crochets [].</font></span></p>
<p style="line-height: 13pt; margin: 0cm 0cm 10pt" class="MsoNormal"><font face="Calibri"><font style="font-size: 11pt">&#160;</font></font></p>
]]></content:encoded>
			<wfw:commentRss></wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>[SQL SERVER] Saga transact-SQL Episode 1 : Les types d’instructions transact SQL</title>
		<link>https://blog.developpez.com/laurentvalente/p10880/sql-serveur/sql_server_saga_transact_sql_episode_1_l</link>
		<comments>https://blog.developpez.com/laurentvalente/p10880/sql-serveur/sql_server_saga_transact_sql_episode_1_l#comments</comments>
		<pubDate>Mon, 26 Mar 2012 14:29:55 +0000</pubDate>
		<dc:creator><![CDATA[LaurentValente]]></dc:creator>
				<category><![CDATA[SQL Serveur]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[Les instructions DDL (Data Définition Language) : Elles permettent de gérer des objets dans la base de données. On peut créer (CREATE), modifier (ALTER) ou supprimer(DROP) des bases de données, des tables, des vues, des procédures stockées, des fonctions, des utilisateurs, des rôles ? Par défaut seul les membres des rôles sysadmin, db_creator, db_owner ou db_ddladmin sont autorisés à exécuter des instructions DDL. Exemple : le script ci-dessous crée une table client dans la base [&#8230;]]]></description>
				<content:encoded><![CDATA[<h1>Les instructions DDL (Data Définition Language) :</h1>
<p>Elles permettent de gérer des objets dans la base de données.</p>
<p>On peut créer (CREATE), modifier (ALTER) ou supprimer(DROP) des bases de données, des tables, des vues, des procédures stockées, des fonctions, des utilisateurs, des rôles ?</p>
<p>Par défaut seul les membres des rôles sysadmin, db_creator, db_owner ou db_ddladmin sont autorisés à exécuter des instructions DDL.</p>
<p>Exemple : le script ci-dessous crée une table client dans la base de données toto ; cette table contient les colonnes client_id, nom, prénom.</p>
<p>Use toto</p>
<p>Create table client(client_id int, nom varchar(50),prenom varchar (50))</p>
<p>GO</p>
<h1>Les instructions DCL (Data Control Language) :</h1>
<p>Elles permettent de déterminer qui sera autorisé à afficher ou modifier les données.</p>
<p>Grant : crée une entrée dans le système de sécurité qui permet à un utilisateur donné de travailler avec des données ou d?exécuter certaines instructions.</p>
<p>Deny : crée une entrée dans le système de sécurité qui refuse à un utilisateur, un groupe ou un rôle de travailler avec des données ou d?exécuter certaines instructions.</p>
<p>Revoke : Supprime une autorisation précédemment accordée ou refusée.</p>
<p>Exemple : on donne l?autorisation au rôle public d?interroger la table Client</p>
<p>Use toto</p>
<p>GRANT SELECT on Client TO Public</p>
<p>GO</p>
<h1>Les instructions DML (Data Manipulation Language) :</h1>
<p>Elles permettent d?interroger et de modifier les données.</p>
<p>Les instructions DML sont les suivantes : Select, Insert, Update, Delete.</p>
<p>Exemple : On extrait l?id client, le nom et le prénom de la table client.</p>
<p>Use toto</p>
<p>Select client_id, nom ,prenom from client</p>
<p>GO</p>
<p>Par la suite nous nous concentrerons sur les instructions DML.</p>
]]></content:encoded>
			<wfw:commentRss></wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
