{"id":7464,"date":"2018-07-24T12:08:17","date_gmt":"2018-07-24T10:08:17","guid":{"rendered":"https:\/\/www.auditsi.eu\/?p=7464"},"modified":"2018-07-24T12:10:58","modified_gmt":"2018-07-24T10:10:58","slug":"sql-bien-comprendre-les-clauses-where-et-having-pour-ne-pas-les-confondre","status":"publish","type":"post","link":"https:\/\/www.auditsi.eu\/?p=7464","title":{"rendered":"SQL : bien comprendre les clauses Where et Having pour ne pas les confondre"},"content":{"rendered":"<p style=\"text-align: justify;\">Les clauses WHERE et HAVING ont des usages en apparence similaires mais&nbsp;en r\u00e9alit\u00e9 leurs r\u00f4les sont diff\u00e9rents.<\/p>\n<pre class=\"lang:tsql decode:true\">SELECT [Stock N].R\u00e9f\u00e9rence, [Stock N].D\u00e9signation, Sum([Stock N].Quantit\u00e9) AS SommeDeQuantit\u00e9\r\nFROM [Stock N]\r\nWHERE [Stock N].PU&gt;50\r\nGROUP BY [Stock N].R\u00e9f\u00e9rence, [Stock N].D\u00e9signation\r\nHAVING (((Sum([Stock N].Quantit\u00e9))&gt;1000));<\/pre>\n<p>Ainsi, leurs fonctions se r\u00e9sument ainsi :<\/p>\n<ul>\n<li><em>WHERE<\/em> : La clause&nbsp;<em>WHERE<\/em> conditionne l\u2019extraction de donn\u00e9es au respect de certains crit\u00e8res, cf d\u00e9tails sur la&nbsp;<a href=\"https:\/\/www.auditsi.eu\/?p=6899\">r\u00e9daction de requ\u00eates SQL&nbsp;avec&nbsp;la&nbsp;clause&nbsp;WHERE<\/a> ;<\/li>\n<li style=\"text-align: justify;\"><em>HAVING<\/em> :&nbsp;La clause <em>HAVING<\/em> positionn\u00e9e \u00e0 la fin d&#8217;une <a href=\"https:\/\/www.auditsi.eu\/?p=6913\">requ\u00eate regroupement<\/a>&nbsp;permet d\u2019ajouter un crit\u00e8re (\u00e0 l\u2019aide <a href=\"https:\/\/www.auditsi.eu\/?p=6979\">d\u2019op\u00e9rateurs de comparaison<\/a>) afin de restreindre le nombre de lignes compris dans le r\u00e9sultat de la requ\u00eate.<\/li>\n<\/ul>\n<p style=\"text-align: justify;\">Ces deux clauses sont combinables dans une requ\u00eate regroupement (et uniquement dans ce type de requ\u00eate). Dans ce cas, la clause <em>WHERE<\/em> conditionne les donn\u00e9es avant le regroupement et <em>HAVING<\/em> conditionne les donn\u00e9es une fois regroup\u00e9es. Dans la&nbsp;construction de la requ\u00eate,&nbsp;<em>WHERE<\/em> se positionne avant <em>GROUP BY<\/em> et <em>HAVING<\/em> apr\u00e8s.<\/p>\n<p style=\"text-align: justify;\">Dans l&#8217;exemple qui pr\u00e9c\u00e8de, la requ\u00eate va traiter les donn\u00e9es de la table Stock (<em>FROM<\/em>) dont le prix unitaire est sup\u00e9rieur \u00e0 50 \u20ac (<em>WHERE<\/em>) puis regrouper (<em>GROUP BY<\/em>) les r\u00e9f\u00e9rences en stock (r\u00e9pondant \u00e0 ce crit\u00e8re de prix) en additionnant les quantit\u00e9s par r\u00e9f\u00e9rence (<em>SUM<\/em>)&nbsp;et enfin&nbsp;ne donner en r\u00e9sultat que les r\u00e9f\u00e9rences dont la quantit\u00e9 est sup\u00e9rieure \u00e0 1000 (clause <em>HAVING<\/em>).<\/p>\n<p style=\"text-align: justify;\">Approfondir le sujet : <a href=\"https:\/\/www.auditsi.eu\/?cat=1820\">Ma\u00eetriser le langage de requ\u00eate SQL<\/a>&nbsp;\/ <a href=\"https:\/\/www.auditsi.eu\/?cat=50\">Analyse de donn\u00e9es<\/a><\/p>\n<div style=\"padding-bottom:20px; padding-top:10px;\" class=\"hupso-share-buttons\"><!-- Hupso Share Buttons - https:\/\/www.hupso.com\/share\/ --><a class=\"hupso_counters\" href=\"https:\/\/www.hupso.com\/share\/\"><img decoding=\"async\" src=\"https:\/\/static.hupso.com\/share\/buttons\/lang\/fr\/share-small.png\" style=\"border:0px; padding-top:2px; float:left;\" alt=\"Share Button\"\/><\/a><script type=\"text\/javascript\">var hupso_services_c=new Array(\"twitter\",\"facebook_like\",\"facebook_send\",\"email\",\"print\",\"linkedin\");var hupso_counters_lang = \"fr_FR\";var hupso_image_folder_url = \"\";var hupso_twitter_via=\"BenoitRiviere14\";var hupso_url_c=\"\";var hupso_title_c=\"SQL%20%3A%20bien%20comprendre%20les%20clauses%20Where%20et%20Having%20pour%20ne%20pas%20les%20confondre\";<\/script><script type=\"text\/javascript\" src=\"https:\/\/static.hupso.com\/share\/js\/counters.js\"><\/script><!-- Hupso Share Buttons --><\/div>","protected":false},"excerpt":{"rendered":"<p>Les clauses WHERE et HAVING ont des usages en apparence similaires mais&nbsp;en r\u00e9alit\u00e9 leurs r\u00f4les sont diff\u00e9rents. SELECT [Stock N].R\u00e9f\u00e9rence, [Stock N].D\u00e9signation, Sum([Stock N].Quantit\u00e9) AS SommeDeQuantit\u00e9 FROM [Stock N] WHERE [Stock N].PU&gt;50 GROUP BY [Stock N].R\u00e9f\u00e9rence, [Stock N].D\u00e9signation HAVING (((Sum([Stock N].Quantit\u00e9))&gt;1000)); Ainsi, leurs fonctions se r\u00e9sument ainsi : WHERE : La clause&nbsp;WHERE conditionne l\u2019extraction de &#8230;<\/p>\n<p><a href=\"https:\/\/www.auditsi.eu\/?p=7464\" class=\"more-link\">Continue reading &lsquo;SQL : bien comprendre les clauses Where et Having pour ne pas les confondre&rsquo; &raquo;<\/a><\/p>\n<div style=\"padding-bottom:20px; padding-top:10px;\" class=\"hupso-share-buttons\"><!-- Hupso Share Buttons - https:\/\/www.hupso.com\/share\/ --><a class=\"hupso_counters\" href=\"https:\/\/www.hupso.com\/share\/\"><img src=\"https:\/\/static.hupso.com\/share\/buttons\/lang\/fr\/share-small.png\" style=\"border:0px; padding-top:2px; float:left;\" alt=\"Share Button\"\/><\/a><script type=\"text\/javascript\">var hupso_services_c=new Array(\"twitter\",\"facebook_like\",\"facebook_send\",\"email\",\"print\",\"linkedin\");var hupso_counters_lang = \"fr_FR\";var hupso_image_folder_url = \"\";var hupso_twitter_via=\"BenoitRiviere14\";var hupso_url_c=\"\";var hupso_title_c=\"SQL%20%3A%20bien%20comprendre%20les%20clauses%20Where%20et%20Having%20pour%20ne%20pas%20les%20confondre\";<\/script><script type=\"text\/javascript\" src=\"https:\/\/static.hupso.com\/share\/js\/counters.js\"><\/script><!-- Hupso Share Buttons --><\/div>","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"advanced_seo_description":"","jetpack_seo_html_title":"","jetpack_seo_noindex":false,"ngg_post_thumbnail":0,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","_links_to":"","_links_to_target":""},"categories":[1820,282],"tags":[166,290,1861,57,1907,1908],"class_list":["post-7464","post","type-post","status-publish","format-standard","hentry","category-requetes-sql","category-sql","tag-analyse-de-donnees","tag-group-by","tag-having","tag-requete-sql","tag-select-from-where-group-by-having","tag-where"],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"jetpack_likes_enabled":false,"_links":{"self":[{"href":"https:\/\/www.auditsi.eu\/index.php?rest_route=\/wp\/v2\/posts\/7464","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.auditsi.eu\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.auditsi.eu\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.auditsi.eu\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.auditsi.eu\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=7464"}],"version-history":[{"count":4,"href":"https:\/\/www.auditsi.eu\/index.php?rest_route=\/wp\/v2\/posts\/7464\/revisions"}],"predecessor-version":[{"id":7468,"href":"https:\/\/www.auditsi.eu\/index.php?rest_route=\/wp\/v2\/posts\/7464\/revisions\/7468"}],"wp:attachment":[{"href":"https:\/\/www.auditsi.eu\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=7464"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.auditsi.eu\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=7464"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.auditsi.eu\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=7464"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}