<?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>Oracle - Concepts et Exemples &#187; jointures</title>
	<atom:link href="https://blog.developpez.com/pachot/tag/jointures/feed/" rel="self" type="application/rss+xml" />
	<link>https://blog.developpez.com/pachot</link>
	<description>Les fonctionalités et concepts d&#039;Oracle à partir de traductions et de démos</description>
	<lastBuildDate>Sun, 03 Apr 2016 20:36:21 +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>Jointures externes (outer join)</title>
		<link>https://blog.developpez.com/pachot/outer_joins/</link>
		<comments>https://blog.developpez.com/pachot/outer_joins/#comments</comments>
		<pubDate>Mon, 04 Nov 2013 20:23:25 +0000</pubDate>
		<dc:creator><![CDATA[pachot]]></dc:creator>
				<category><![CDATA[MicroLearning]]></category>
		<category><![CDATA[jointures]]></category>
		<category><![CDATA[outer join]]></category>

		<guid isPermaLink="false">http://blog.developpez.com/pachot/?p=890</guid>
		<description><![CDATA[Le type de jointure le plus utilisé, Inner Join, renvoie les lignes qui ont des correspondances dans les deux tables, et les renvoie autant de fois qu&#8217;il y a de correspondances. Par exemple, une jointure entre DEPT et EMP ne &#8230; <a href="https://blog.developpez.com/pachot/outer_joins/">Lire la suite <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>Le type de jointure le plus utilisé, Inner Join, renvoie les lignes qui ont des correspondances dans les deux tables, et les renvoie autant de fois qu&rsquo;il y a de correspondances. Par exemple, une jointure entre DEPT et EMP ne renverra pas les informations des départements qui n&rsquo;ont pas d&rsquo;employés, et renverra plusieurs fois les informations des départements qui ont plusieurs employés.</p>
<p>Il y a des variantes: on peut choisir de ne renvoyer qu&rsquo;une seule fois les infos d&rsquo;une table même s&rsquo;il y a plusieurs correspondances dans l&rsquo;autre: c&rsquo;est un Semi Join (clause EXISTS ou IN) et on peut renvoyer au contraire celles pour lesquelles il n&rsquo;y a pas de correspondance (NOT EXISTS ou NOT IN).</p>
<p>Et on peut combiner cela: un Inner Join qui renvoie en plus les infos d&rsquo;une table même si il n&rsquo;y a pas de correspondance. Il s&rsquo;agit d&rsquo;un Outer Join qui va rajouter (union all) à la jointure Inner Join les lignes venant d&rsquo;un Anti-Join.</p>
<p>DEPT Left Outer Join EMP renvoie toutes les lignes de DEPT. Une seule fois (et avec des null pour les colonnes de EMP) lorsqu&rsquo;il n&rsquo;y a pas d&rsquo;employés dans le département. Et plusieurs fois lorsqu&rsquo;il y a plusieurs employés dans le département. On dit que la table DEPT est ici &lsquo;preserved': on n&rsquo;élimine aucune de ses infos.<br />
Inversement, DEPT Right Outer Join EMP renvoit tous les employés même si on n&rsquo;a pas d&rsquo;info dans DEPT. Bien sûr, ce n&rsquo;est pas le cas lorsqu&rsquo;on a déclaré la Foreign Key.<br />
Et DEPT full outer join EMP va combiner les deux </p>
<p>La <a href="http://ora-demo.pachot.net/outer_joins.html" title="demo" target="_blank">demo</a> montre ces jointures externes (left, right et full) en forçant avec des hints toutes les méthodes de jointures possible &#8211; et dans chaque ordre possible &#8211;  afin de déterminer quelles sont les méthodes compatibles avec Outer Join.</p>
<p>Il n&rsquo;y a que Hash Join qui a la possibilité de faire des Hash Join dans les deux sens: quelle que soit la &lsquo;preserved&rsquo; table, il est toujours possible de choisir l&rsquo;une ou l&rsquo;autre pour construire la table de hachage. Les autres méthodes n&rsquo;acceptent pas la &lsquo;preserved table&rsquo; en second. </p>
<p>Ce qui veut dire que le &lsquo;Full Outer join&rsquo; n&rsquo;est possible directement (sans union all) que par Hash Join</p>
<p>Avec EMP comme table de hachage:</p>
<pre>select /*+ leading(dept emp) use_hash(emp) swap_join_inputs(emp) */ * from DEPT full outer join EMP using(deptno)

-----------------------------------------------------------------------------------------------------------------------
| Id  | Operation             | Name     | Starts | E-Rows | A-Rows |   A-Time   | Buffers |  OMem |  1Mem | Used-Mem |
-----------------------------------------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT      |          |      1 |        |     10 |00:00:00.01 |      15 |       |       |          |
|   1 |  VIEW                 | VW_FOJ_0 |      1 |      9 |     10 |00:00:00.01 |      15 |       |       |          |
|*  2 |   HASH JOIN FULL OUTER|          |      1 |      9 |     10 |00:00:00.01 |      15 |  1055K|  1055K|  517K (0)|
|   3 |    TABLE ACCESS FULL  | EMP      |      1 |      8 |      8 |00:00:00.01 |       7 |       |       |          |
|   4 |    TABLE ACCESS FULL  | DEPT     |      1 |      3 |      3 |00:00:00.01 |       8 |       |       |          |
-----------------------------------------------------------------------------------------------------------------------</pre>
<p>Avec DEPT comme table de hachage:</p>
<pre>select /*+ leading(dept emp) use_hash(emp) no_swap_join_inputs(emp) */ * from DEPT full outer join EMP using(deptno)

-----------------------------------------------------------------------------------------------------------------------
| Id  | Operation             | Name     | Starts | E-Rows | A-Rows |   A-Time   | Buffers |  OMem |  1Mem | Used-Mem |
-----------------------------------------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT      |          |      1 |        |     10 |00:00:00.01 |      15 |       |       |          |
|   1 |  VIEW                 | VW_FOJ_0 |      1 |      9 |     10 |00:00:00.01 |      15 |       |       |          |
|*  2 |   HASH JOIN FULL OUTER|          |      1 |      9 |     10 |00:00:00.01 |      15 |  1321K|  1321K|  636K (0)|
|   3 |    TABLE ACCESS FULL  | DEPT     |      1 |      3 |      3 |00:00:00.01 |       7 |       |       |          |
|   4 |    TABLE ACCESS FULL  | EMP      |      1 |      8 |      8 |00:00:00.01 |       8 |       |       |          |
----------------------------------------------------------------------------------------------------------------------</pre>
]]></content:encoded>
			<wfw:commentRss></wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
