<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	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/"
		>
<channel>
	<title>Comments on: Basic SQL join semantics</title>
	<atom:link href="http://blog.mclaughlinsoftware.com/oracle-sql-programming/basic-sql-join-semantics/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.mclaughlinsoftware.com</link>
	<description>Michael McLaughlin's Technical Blog</description>
	<lastBuildDate>Wed, 28 Jul 2010 12:12:28 +0000</lastBuildDate>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
	<item>
		<title>By: Kyle Hailey</title>
		<link>http://blog.mclaughlinsoftware.com/oracle-sql-programming/basic-sql-join-semantics/comment-page-1/#comment-6184</link>
		<dc:creator>Kyle Hailey</dc:creator>
		<pubDate>Fri, 26 Jun 2009 16:59:45 +0000</pubDate>
		<guid isPermaLink="false">http://blog.mclaughlinsoftware.com/?page_id=1290#comment-6184</guid>
		<description>Nice writeup. I like the graphic on left, right and inner join. I did an extension of it here:

http://db-optimizer.blogspot.com/2009/06/sql-joins.html</description>
		<content:encoded><![CDATA[<p>Nice writeup. I like the graphic on left, right and inner join. I did an extension of it here:</p>
<p><a href="http://db-optimizer.blogspot.com/2009/06/sql-joins.html" rel="nofollow">http://db-optimizer.blogspot.com/2009/06/sql-joins.html</a></p>
]]></content:encoded>
	</item>
	<item>
		<title>By: maclochlainn</title>
		<link>http://blog.mclaughlinsoftware.com/oracle-sql-programming/basic-sql-join-semantics/comment-page-1/#comment-913</link>
		<dc:creator>maclochlainn</dc:creator>
		<pubDate>Sun, 15 Feb 2009 21:06:30 +0000</pubDate>
		<guid isPermaLink="false">http://blog.mclaughlinsoftware.com/?page_id=1290#comment-913</guid>
		<description>Thanks for the observation. I concur wholeheartedly with your observations that there&#039;s nothing natural about natural joins. :-) BTW, that&#039;s a nice page.</description>
		<content:encoded><![CDATA[<p>Thanks for the observation. I concur wholeheartedly with your observations that there&#8217;s nothing natural about natural joins. <img src='http://blog.mclaughlinsoftware.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' />  BTW, that&#8217;s a nice page.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Gints Plivna</title>
		<link>http://blog.mclaughlinsoftware.com/oracle-sql-programming/basic-sql-join-semantics/comment-page-1/#comment-911</link>
		<dc:creator>Gints Plivna</dc:creator>
		<pubDate>Sun, 15 Feb 2009 20:12:42 +0000</pubDate>
		<guid isPermaLink="false">http://blog.mclaughlinsoftware.com/?page_id=1290#comment-911</guid>
		<description>Natural join can be also outer join. Actually I&#039;d say it is just another (potentially dangerous!!!) syntactical notation. And I&#039;ve tried to explain joins here http://www.gplivna.eu/papers/sql_join_types.htm</description>
		<content:encoded><![CDATA[<p>Natural join can be also outer join. Actually I&#8217;d say it is just another (potentially dangerous!!!) syntactical notation. And I&#8217;ve tried to explain joins here <a href="http://www.gplivna.eu/papers/sql_join_types.htm" rel="nofollow">http://www.gplivna.eu/papers/sql_join_types.htm</a></p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Laurent Schneider</title>
		<link>http://blog.mclaughlinsoftware.com/oracle-sql-programming/basic-sql-join-semantics/comment-page-1/#comment-722</link>
		<dc:creator>Laurent Schneider</dc:creator>
		<pubDate>Wed, 04 Feb 2009 10:53:43 +0000</pubDate>
		<guid isPermaLink="false">http://blog.mclaughlinsoftware.com/?page_id=1290#comment-722</guid>
		<description>UNION differs from FULL OUTER JOIN as it will remove duplicates.

SELECT   ordinal_english_text
,        ordinal_french_text
FROM     ordinal_english, ordinal_french
WHERE    ordinal_english_id(+) = ordinal_french_id
UNION
SELECT   ordinal_english_text
,        ordinal_french_text
FROM     ordinal_english, ordinal_french
WHERE    ordinal_english_id = ordinal_french_id(+);

this will remove the duplicates for ordinal_english_text , ordinal_french_text


use UNION ALL instead

SQL&gt; create table lsc_t1(x number, y number)
Table created.
SQL&gt; insert into lsc_t1 values(1,1)
1 row created.
SQL&gt; insert into lsc_t1 values(1,1)
1 row created.
SQL&gt; insert into lsc_t1 values(2,2)
1 row created.
SQL&gt; create table lsc_t2(y number, z number)
Table created.
SQL&gt; insert into lsc_t2 values(2,2)
1 row created.
SQL&gt; insert into lsc_t2 values(3,3)
1 row created.
SQL&gt; insert into lsc_t2 values(3,3)
1 row created.
SQL&gt; commit
Commit complete.
SQL&gt; select x,y,z from lsc_t1 full join lsc_t2 using (y) order by y

         X          Y          Z
---------- ---------- ----------
         1          1           
         1          1           
         2          2          2
                    3          3
                    3          3


5 rows selected.
SQL&gt; select x,lsc_t1.y,z from lsc_t1 , lsc_t2 where lsc_t1.y=lsc_t2.y(+) order by y

         X          Y          Z
---------- ---------- ----------
         1          1           
         1          1           
         2          2          2


3 rows selected.
SQL&gt; select x,lsc_t2.y,z from lsc_t1 , lsc_t2 where lsc_t1.y(+)=lsc_t2.y order by y

         X          Y          Z
---------- ---------- ----------
         2          2          2
                    3          3
                    3          3


3 rows selected.
SQL&gt; select x,lsc_t1.y,z from lsc_t1 , lsc_t2 where lsc_t1.y=lsc_t2.y(+)
union
select x,lsc_t2.y,z from lsc_t1 , lsc_t2 where lsc_t1.y(+)=lsc_t2.y order by y

         X          Y          Z
---------- ---------- ----------
         1          1           
         2          2          2
                    3          3


3 rows selected.
SQL&gt; select x,lsc_t1.y,z from lsc_t1 , lsc_t2 where lsc_t1.y=lsc_t2.y(+)
union all
select x,lsc_t2.y,z from lsc_t1 , lsc_t2 where lsc_t1.y(+)=lsc_t2.y and lsc_t1.y is null order by y

         X          Y          Z
---------- ---------- ----------
         1          1           
         1          1           
         2          2          2
                    3          3
                    3          3


5 rows selected.</description>
		<content:encoded><![CDATA[<p>UNION differs from FULL OUTER JOIN as it will remove duplicates.</p>
<p>SELECT   ordinal_english_text<br />
,        ordinal_french_text<br />
FROM     ordinal_english, ordinal_french<br />
WHERE    ordinal_english_id(+) = ordinal_french_id<br />
UNION<br />
SELECT   ordinal_english_text<br />
,        ordinal_french_text<br />
FROM     ordinal_english, ordinal_french<br />
WHERE    ordinal_english_id = ordinal_french_id(+);</p>
<p>this will remove the duplicates for ordinal_english_text , ordinal_french_text</p>
<p>use UNION ALL instead</p>
<p>SQL&gt; create table lsc_t1(x number, y number)<br />
Table created.<br />
SQL&gt; insert into lsc_t1 values(1,1)<br />
1 row created.<br />
SQL&gt; insert into lsc_t1 values(1,1)<br />
1 row created.<br />
SQL&gt; insert into lsc_t1 values(2,2)<br />
1 row created.<br />
SQL&gt; create table lsc_t2(y number, z number)<br />
Table created.<br />
SQL&gt; insert into lsc_t2 values(2,2)<br />
1 row created.<br />
SQL&gt; insert into lsc_t2 values(3,3)<br />
1 row created.<br />
SQL&gt; insert into lsc_t2 values(3,3)<br />
1 row created.<br />
SQL&gt; commit<br />
Commit complete.<br />
SQL&gt; select x,y,z from lsc_t1 full join lsc_t2 using (y) order by y</p>
<p>         X          Y          Z<br />
&#8212;&#8212;&#8212;- &#8212;&#8212;&#8212;- &#8212;&#8212;&#8212;-<br />
         1          1<br />
         1          1<br />
         2          2          2<br />
                    3          3<br />
                    3          3</p>
<p>5 rows selected.<br />
SQL&gt; select x,lsc_t1.y,z from lsc_t1 , lsc_t2 where lsc_t1.y=lsc_t2.y(+) order by y</p>
<p>         X          Y          Z<br />
&#8212;&#8212;&#8212;- &#8212;&#8212;&#8212;- &#8212;&#8212;&#8212;-<br />
         1          1<br />
         1          1<br />
         2          2          2</p>
<p>3 rows selected.<br />
SQL&gt; select x,lsc_t2.y,z from lsc_t1 , lsc_t2 where lsc_t1.y(+)=lsc_t2.y order by y</p>
<p>         X          Y          Z<br />
&#8212;&#8212;&#8212;- &#8212;&#8212;&#8212;- &#8212;&#8212;&#8212;-<br />
         2          2          2<br />
                    3          3<br />
                    3          3</p>
<p>3 rows selected.<br />
SQL&gt; select x,lsc_t1.y,z from lsc_t1 , lsc_t2 where lsc_t1.y=lsc_t2.y(+)<br />
union<br />
select x,lsc_t2.y,z from lsc_t1 , lsc_t2 where lsc_t1.y(+)=lsc_t2.y order by y</p>
<p>         X          Y          Z<br />
&#8212;&#8212;&#8212;- &#8212;&#8212;&#8212;- &#8212;&#8212;&#8212;-<br />
         1          1<br />
         2          2          2<br />
                    3          3</p>
<p>3 rows selected.<br />
SQL&gt; select x,lsc_t1.y,z from lsc_t1 , lsc_t2 where lsc_t1.y=lsc_t2.y(+)<br />
union all<br />
select x,lsc_t2.y,z from lsc_t1 , lsc_t2 where lsc_t1.y(+)=lsc_t2.y and lsc_t1.y is null order by y</p>
<p>         X          Y          Z<br />
&#8212;&#8212;&#8212;- &#8212;&#8212;&#8212;- &#8212;&#8212;&#8212;-<br />
         1          1<br />
         1          1<br />
         2          2          2<br />
                    3          3<br />
                    3          3</p>
<p>5 rows selected.</p>
]]></content:encoded>
	</item>
</channel>
</rss>
