<?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>TheUnical Technologies Blog &#187; SQL JOINS</title>
	<atom:link href="http://blog.theunical.com/category/databases/sql-joins/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.theunical.com</link>
	<description>TheUnical Technologies Official Blog</description>
	<lastBuildDate>Sun, 05 Feb 2012 21:46:54 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>SQL JOINS</title>
		<link>http://blog.theunical.com/databases/mysql/sql-joins/</link>
		<comments>http://blog.theunical.com/databases/mysql/sql-joins/#comments</comments>
		<pubDate>Fri, 13 Feb 2009 06:34:00 +0000</pubDate>
		<dc:creator>Steven Wall</dc:creator>
				<category><![CDATA[Featured]]></category>
		<category><![CDATA[MySQL 5.1]]></category>
		<category><![CDATA[MySql]]></category>
		<category><![CDATA[Oracle]]></category>
		<category><![CDATA[SQL]]></category>
		<category><![CDATA[SQL JOINS]]></category>
		<category><![CDATA[MS-Sql]]></category>

		<guid isPermaLink="false">http://rachasatish.wordpress.com/2009/02/13/sql-joins/</guid>
		<description><![CDATA[&#160; The SQL JOIN clause is used whenever we have to select data from 2 or more tables. To be able to use SQL JOIN clause to extract data from 2 (or more) tables, we need a relationship between certain columns in these tables. We are going to illustrate our SQL JOIN example with the [...]]]></description>
			<content:encoded><![CDATA[<div class="Section1">
<p class="MsoNormal">&nbsp;</p>
<p>The <strong>SQL JOIN</strong> clause is used whenever we have to select data from 2 or more tables.</p>
<p>To be able to use <strong>SQL JOIN</strong> clause to extract data from 2 (or more) tables, we need a relationship between certain columns in these tables.</p>
<p>We are going to illustrate our <strong>SQL JOIN</strong> example with the following 2 tables:</p>
<p><strong>Customers:</strong></p>
<table class="MsoNormalTable" border="1" cellpadding="0" width="96%" style='width:96%;' id="Table3">
<tr>
<td style='padding:.75pt;'>
<p class="MsoNormal">CustomerID<span style='font-size:12pt;'></span></p>
</td>
<td style='padding:.75pt;'>
<p class="MsoNormal">FirstName<span style='font-size:12pt;'></span></p>
</td>
<td style='padding:.75pt;'>
<p class="MsoNormal">LastName<span style='font-size:12pt;'></span></p>
</td>
<td style='padding:.75pt;'>
<p class="MsoNormal">Email<span style='font-size:12pt;'></span></p>
</td>
<td style='padding:.75pt;'>
<p class="MsoNormal">DOB<span style='font-size:12pt;'></span></p>
</td>
<td style='padding:.75pt;'>
<p class="MsoNormal">Phone<span style='font-size:12pt;'></span></p>
</td>
</tr>
<tr>
<td style='padding:.75pt;'>
<p class="MsoNormal">1<span style='font-size:12pt;'></span></p>
</td>
<td style='padding:.75pt;'>
<p class="MsoNormal">John<span style='font-size:12pt;'></span></p>
</td>
<td style='padding:.75pt;'>
<p class="MsoNormal">Smith<span style='font-size:12pt;'></span></p>
</td>
<td style='padding:.75pt;'>
<p class="MsoNormal">John.Smith@yahoo.com<span style='font-size:12pt;'></span></p>
</td>
<td style='padding:.75pt;'>
<p class="MsoNormal">2/4/1968<span style='font-size:12pt;'></span></p>
</td>
<td style='padding:.75pt;'>
<p class="MsoNormal">626 222-2222<span style='font-size:12pt;'></span></p>
</td>
</tr>
<tr>
<td style='padding:.75pt;'>
<p class="MsoNormal">2<span style='font-size:12pt;'></span></p>
</td>
<td style='padding:.75pt;'>
<p class="MsoNormal">Steven<span style='font-size:12pt;'></span></p>
</td>
<td style='padding:.75pt;'>
<p class="MsoNormal">Goldfish<span style='font-size:12pt;'></span></p>
</td>
<td style='padding:.75pt;'>
<p class="MsoNormal">goldfish@fishhere.net<span style='font-size:12pt;'></span></p>
</td>
<td style='padding:.75pt;'>
<p class="MsoNormal">4/4/1974<span style='font-size:12pt;'></span></p>
</td>
<td style='padding:.75pt;'>
<p class="MsoNormal">323 455-4545<span style='font-size:12pt;'></span></p>
</td>
</tr>
<tr>
<td style='padding:.75pt;'>
<p class="MsoNormal">3<span style='font-size:12pt;'></span></p>
</td>
<td style='padding:.75pt;'>
<p class="MsoNormal">Paula<span style='font-size:12pt;'></span></p>
</td>
<td style='padding:.75pt;'>
<p class="MsoNormal">Brown<span style='font-size:12pt;'></span></p>
</td>
<td style='padding:.75pt;'>
<p class="MsoNormal">pb@herowndomain.org<span style='font-size:12pt;'></span></p>
</td>
<td style='padding:.75pt;'>
<p class="MsoNormal">5/24/1978<span style='font-size:12pt;'></span></p>
</td>
<td style='padding:.75pt;'>
<p class="MsoNormal">416 323-3232<span style='font-size:12pt;'></span></p>
</td>
</tr>
<tr>
<td style='padding:.75pt;'>
<p class="MsoNormal">4<span style='font-size:12pt;'></span></p>
</td>
<td style='padding:.75pt;'>
<p class="MsoNormal">James<span style='font-size:12pt;'></span></p>
</td>
<td style='padding:.75pt;'>
<p class="MsoNormal">Smith<span style='font-size:12pt;'></span></p>
</td>
<td style='padding:.75pt;'>
<p class="MsoNormal">jim@supergig.co.uk<span style='font-size:12pt;'></span></p>
</td>
<td style='padding:.75pt;'>
<p class="MsoNormal">20/10/1980<span style='font-size:12pt;'></span></p>
</td>
<td style='padding:.75pt;'>
<p class="MsoNormal">416 323-8888<span style='font-size:12pt;'></span></p>
</td>
</tr>
</table>
<p><strong>Sales:</strong></p>
<table class="MsoNormalTable" border="1" cellpadding="0" width="96%" style='width:96%;' id="Table2">
<tr>
<td style='padding:.75pt;'>
<p class="MsoNormal">CustomerID<span style='font-size:12pt;'></span></p>
</td>
<td style='padding:.75pt;'>
<p class="MsoNormal">Date<span style='font-size:12pt;'></span></p>
</td>
<td style='padding:.75pt;'>
<p class="MsoNormal">SaleAmount<span style='font-size:12pt;'></span></p>
</td>
</tr>
<tr>
<td style='padding:.75pt;'>
<p class="MsoNormal">2<span style='font-size:12pt;'></span></p>
</td>
<td style='padding:.75pt;'>
<p class="MsoNormal">5/6/2004<span style='font-size:12pt;'></span></p>
</td>
<td style='padding:.75pt;'>
<p class="MsoNormal">$100.22<span style='font-size:12pt;'></span></p>
</td>
</tr>
<tr>
<td style='padding:.75pt;'>
<p class="MsoNormal">1<span style='font-size:12pt;'></span></p>
</td>
<td style='padding:.75pt;'>
<p class="MsoNormal">5/7/2004<span style='font-size:12pt;'></span></p>
</td>
<td style='padding:.75pt;'>
<p class="MsoNormal">$99.95<span style='font-size:12pt;'></span></p>
</td>
</tr>
<tr>
<td style='padding:.75pt;'>
<p class="MsoNormal">3<span style='font-size:12pt;'></span></p>
</td>
<td style='padding:.75pt;'>
<p class="MsoNormal">5/7/2004<span style='font-size:12pt;'></span></p>
</td>
<td style='padding:.75pt;'>
<p class="MsoNormal">$122.95<span style='font-size:12pt;'></span></p>
</td>
</tr>
<tr>
<td style='padding:.75pt;'>
<p class="MsoNormal">3<span style='font-size:12pt;'></span></p>
</td>
<td style='padding:.75pt;'>
<p class="MsoNormal">5/13/2004<span style='font-size:12pt;'></span></p>
</td>
<td style='padding:.75pt;'>
<p class="MsoNormal">$100.00<span style='font-size:12pt;'></span></p>
</td>
</tr>
<tr>
<td style='padding:.75pt;'>
<p class="MsoNormal">4<span style='font-size:12pt;'></span></p>
</td>
<td style='padding:.75pt;'>
<p class="MsoNormal">5/22/2004<span style='font-size:12pt;'></span></p>
</td>
<td style='padding:.75pt;'>
<p class="MsoNormal">$555.55<span style='font-size:12pt;'></span></p>
</td>
</tr>
</table>
<p>As you can see those 2 tables have common field called CustomerID and thanks to that we can extract information from both tables by matching their CustomerID columns.</p>
<p>Consider the following SQL statement:</p>
<table class="MsoNormalTable" border="1" cellpadding="0" width="96%" style='width:96%;' id="Table4">
<tr>
<td style='padding:3pt;'>
<p class="MsoNormal">SELECT Customers.FirstName, Customers.LastName,   SUM(Sales.SaleAmount) AS SalesPerCustomer<br />   FROM Customers, Sales<br />   WHERE Customers.CustomerID = Sales.CustomerID<br />   GROUP BY Customers.FirstName, Customers.LastName<span style='font-size:12pt;'></span></p>
</td>
</tr>
</table>
<p>The SQL expression above will select all distinct customers (their first and last names) and the total respective amount of dollars they have spent.<br /> The <strong>SQL JOIN</strong> condition has been specified after the <a href="http://www.sql-tutorial.net/sql-where.asp" title="SQL WHERE">SQL WHERE</a> clause and says that the 2 tables have to be matched by their respective CustomerID columns.</p>
<p>Here is the result of this SQL statement:</p>
<table class="MsoNormalTable" border="1" cellpadding="0" width="96%" style='width:96%;' id="Table5">
<tr>
<td style='padding:.75pt;'>
<p class="MsoNormal">FirstName<span style='font-size:12pt;'></span></p>
</td>
<td style='padding:.75pt;'>
<p class="MsoNormal">LastName<span style='font-size:12pt;'></span></p>
</td>
<td style='padding:.75pt;'>
<p class="MsoNormal">SalesPerCustomers<span style='font-size:12pt;'></span></p>
</td>
</tr>
<tr>
<td style='padding:.75pt;'>
<p class="MsoNormal">John<span style='font-size:12pt;'></span></p>
</td>
<td style='padding:.75pt;'>
<p class="MsoNormal">Smith<span style='font-size:12pt;'></span></p>
</td>
<td style='padding:.75pt;'>
<p class="MsoNormal">$99.95<span style='font-size:12pt;'></span></p>
</td>
</tr>
<tr>
<td style='padding:.75pt;'>
<p class="MsoNormal">Steven<span st</p>
<p>yle='font-size:12pt;'></span></p>
</td>
<td style='padding:.75pt;'>
<p class="MsoNormal">Goldfish<span style='font-size:12pt;'></span></p>
</td>
<td style='padding:.75pt;'>
<p class="MsoNormal">$100.22<span style='font-size:12pt;'></span></p>
</td>
</tr>
<tr>
<td style='padding:.75pt;'>
<p class="MsoNormal">Paula<span style='font-size:12pt;'></span></p>
</td>
<td style='padding:.75pt;'>
<p class="MsoNormal">Brown<span style='font-size:12pt;'></span></p>
</td>
<td style='padding:.75pt;'>
<p class="MsoNormal">$222.95<span style='font-size:12pt;'></span></p>
</td>
</tr>
<tr>
<td style='padding:.75pt;'>
<p class="MsoNormal">James<span style='font-size:12pt;'></span></p>
</td>
<td style='padding:.75pt;'>
<p class="MsoNormal">Smith<span style='font-size:12pt;'></span></p>
</td>
<td style='padding:.75pt;'>
<p class="MsoNormal">$555.55<span style='font-size:12pt;'></span></p>
</td>
</tr>
</table>
<p>The SQL statement above can be re-written using the <strong>SQL JOIN</strong> clause like this:</p>
<table class="MsoNormalTable" border="1" cellpadding="0" width="96%" style='width:96%;' id="Table6">
<tr>
<td style='padding:3pt;'>
<p class="MsoNormal">SELECT Customers.FirstName, Customers.LastName, SUM(Sales.SaleAmount)   AS SalesPerCustomer<br />   FROM Customers JOIN Sales<br />   ON Customers.CustomerID = Sales.CustomerID<br />   GROUP BY Customers.FirstName, Customers.LastName<span style='font-size:12pt;'></span></p>
</td>
</tr>
</table>
<p>There are 2 types of SQL JOINS &#8211; <strong>INNER JOINS</strong> and <strong>OUTER JOINS</strong>. If you don&#8217;t put INNER or OUTER keywords in front of the <strong>SQL JOIN</strong> keyword, then <strong>INNER JOIN</strong> is used. In short &#8220;INNER JOIN&#8221; = &#8220;JOIN&#8221; (note that different databases have different syntax for their JOIN clauses).</p>
<p>The <strong>INNER JOIN</strong> will select all rows from both tables as long as there is a match between the columns we are matching on. In case we have a customer in the Customers table, which still hasn&#8217;t made any orders (there are no entries for this customer in the Sales table), this customer will not be listed in the result of our SQL query above.</p>
<p>If the Sales table has the following rows:</p>
<table class="MsoNormalTable" border="1" cellpadding="0" width="96%" style='width:96%;' id="Table7">
<tr>
<td style='padding:.75pt;'>
<p class="MsoNormal">CustomerID<span style='font-size:12pt;'></span></p>
</td>
<td style='padding:.75pt;'>
<p class="MsoNormal">Date<span style='font-size:12pt;'></span></p>
</td>
<td style='padding:.75pt;'>
<p class="MsoNormal">SaleAmount<span style='font-size:12pt;'></span></p>
</td>
</tr>
<tr>
<td style='padding:.75pt;'>
<p class="MsoNormal">2<span style='font-size:12pt;'></span></p>
</td>
<td style='padding:.75pt;'>
<p class="MsoNormal">5/6/2004<span style='font-size:12pt;'></span></p>
</td>
<td style='padding:.75pt;'>
<p class="MsoNormal">$100.22<span style='font-size:12pt;'></span></p>
</td>
</tr>
<tr>
<td style='padding:.75pt;'>
<p class="MsoNormal">1<span style='font-size:12pt;'></span></p>
</td>
<td style='padding:.75pt;'>
<p class="MsoNormal">5/6/2004<span style='font-size:12pt;'></span></p>
</td>
<td style='padding:.75pt;'>
<p class="MsoNormal">$99.95<span style='font-size:12pt;'></span></p>
</td>
</tr>
</table>
<p>And we use the same <strong>SQL JOIN</strong> statement from above:</p>
<table class="MsoNormalTable" border="1" cellpadding="0" width="96%" style='width:96%;' id="Table8">
<tr>
<td style='padding:3pt;'>
<p class="MsoNormal">SELECT Customers.FirstName, Customers.LastName, SUM(Sales.SaleAmount)   AS SalesPerCustomer<br />   FROM Customers JOIN Sales<br />   ON Customers.CustomerID = Sales.CustomerID<br />   GROUP BY Customers.FirstName, Customers.LastName<span style='font-size:12pt;'></span></p>
</td>
</tr>
</table>
<p>We&#8217;ll get the following result:</p>
<table class="MsoNormalTable" border="1" cellpadding="0" width="96%" style='width:96%;' id="Table9">
<tr>
<td style='padding:.75pt;'>
<p class="MsoNormal">FirstName<span style='font-size:12pt;'></span></p>
</td>
<td style='padding:.75pt;'>
<p class="MsoNormal">LastName<span style='font-size:12pt;'></span></p>
</td>
<td style='padding:.75pt;'>
<p class="MsoNormal">SalesPerCustomers<span style='font-size:12pt;'></span></p>
</td>
</tr>
<tr>
<td style='padding:.75pt;'>
<p class="MsoNormal">John<span style='font-size:12pt;'></span></p>
</td>
<td style='padding:.75pt;'>
<p class="MsoNormal">Smith<span style='font-size:12pt;'></span></p>
</td>
<td style='padding:.75pt;'>
<p class="MsoNormal">$99.95<span style='font-size:12pt;'></span></p>
</td>
</tr>
<tr>
<td style='padding:.75pt;'>
<p class="MsoNormal">Steven<span style='font-size:12pt;'></span></p>
</td>
<td style='padding:.75pt;'>
<p class="MsoNormal">Goldfish<span style='font-size:12pt;'></span></p>
</td>
<td style='padding:.75pt;'>
<p class="MsoNormal">$100.22<span style='font-size:12pt;'></span></p>
</td>
</tr>
</table>
<p>Even though Paula and James are listed as customers in the Customers table they won&#8217;t be displayed because they haven&#8217;t purchased anything yet.</p>
<p>But what if you want to display all the customers and their sales, no matter if they have ordered something or not? We&#8217;ll do that with the help of <strong>SQL OUTER JOIN</strong> clause.</p>
<p>The second type of <strong>SQL JOIN</strong> is called <strong>SQL OUTER JOIN</strong> and it has 2 sub-types called <strong>LEFT OUTER JOIN</strong> and <strong>RIGHT OUTER JOIN</strong>.</p>
<p>The <strong>LEFT OUTER JOIN</strong> or simply <strong>LEFT JOIN</strong> (you can omit the OUTER keyword in most databases), selects all the rows from the first table listed after the FROM clause, no matter if they have matches in the second table.</p>
<p>If we slightly modify our last SQL statement to:</p>
<table class="MsoNormalTable" border="1" cellpadding="0" width="96%" style='width:96%;' id="Table10">
<tr>
<td style='padding:3pt;'>
<p class="MsoNormal">SELECT Customers.FirstName, Customers.LastName,   SUM(Sales.SaleAmount) AS SalesPerCustomer<br />   FROM Customers LEFT JOIN Sales<br />   ON Customers.CustomerID = Sales.CustomerID<br />   GROUP BY Customers.FirstName, Customers.LastName<span style='font-size:12pt;'></span></p>
</td>
</tr>
</table>
<p>and the Sales table still has the following rows:</p>
<table class="MsoNormalTable" border="1" cellpadding="0" width="96%" style='width:96%;' id="Table11">
<tr>
<td style='padding:.75pt;'>
<p class="MsoNormal">CustomerID<span style='font-size:12pt;'></span></p>
</td>
<td style='padding:.75pt;'>
<p class="MsoNormal">Date<span style='font-size:12pt;'></span></p>
</td>
<td style='padding:.75pt;'>
<p class="MsoNormal">SaleAmount<span style='font-size:12pt;'></span></p>
</td>
</tr>
<tr>
<td style='padding:.75pt;'>
<p class="MsoNormal">2<span style='font-size:12pt;'></span></p>
</td>
<td style='padding:.75pt;'>
<p class="MsoNormal">5/6/2004<span style='font-size:12pt;'></span></p>
</td>
<td style='padding:.75pt;'>
<p class="MsoNormal">$100.22<span style='font-size:12pt;'></span></p>
</td>
</tr>
<tr>
<td style='padding:.75pt;'>
<p class="MsoNormal">1<span style='font-size:12pt;'></span></p>
</td>
<td style='padding:.75pt;'>
<p class="MsoNormal">5/6/2004<span style='font-size:12pt;'></span></p>
</td>
<td style='padding:.75pt;'>
<p class="MsoNormal">$99.95<span style='font-size:12pt;'></span></p>
</td>
</tr>
</table>
<p>The result will be the following:</p>
<table class="MsoNormalTable" border="1" cellpadding="0" width="96%" style='width:96%;' id="Table12">
<tr>
<td style='padding:.75pt;'>
<p class="MsoNormal">FirstName<span style='font-size:12pt;'></span></p>
</td>
<td style='padding:.75pt;'>
<p class="MsoNormal">LastName<span style='font-size:12pt;'></span></p>
</td>
<td style='padding:.75pt;'>
<p class="MsoNormal">SalesPerCustomers<span style='font-size:12pt;'></s</p>
<p>pan></p>
</td>
</tr>
<tr>
<td style='padding:.75pt;'>
<p class="MsoNormal">John<span style='font-size:12pt;'></span></p>
</td>
<td style='padding:.75pt;'>
<p class="MsoNormal">Smith<span style='font-size:12pt;'></span></p>
</td>
<td style='padding:.75pt;'>
<p class="MsoNormal">$99.95<span style='font-size:12pt;'></span></p>
</td>
</tr>
<tr>
<td style='padding:.75pt;'>
<p class="MsoNormal">Steven<span style='font-size:12pt;'></span></p>
</td>
<td style='padding:.75pt;'>
<p class="MsoNormal">Goldfish<span style='font-size:12pt;'></span></p>
</td>
<td style='padding:.75pt;'>
<p class="MsoNormal">$100.22<span style='font-size:12pt;'></span></p>
</td>
</tr>
<tr>
<td style='padding:.75pt;'>
<p class="MsoNormal">Paula<span style='font-size:12pt;'></span></p>
</td>
<td style='padding:.75pt;'>
<p class="MsoNormal">Brown<span style='font-size:12pt;'></span></p>
</td>
<td style='padding:.75pt;'>
<p class="MsoNormal">NULL<span style='font-size:12pt;'></span></p>
</td>
</tr>
<tr>
<td style='padding:.75pt;'>
<p class="MsoNormal">James<span style='font-size:12pt;'></span></p>
</td>
<td style='padding:.75pt;'>
<p class="MsoNormal">Smith<span style='font-size:12pt;'></span></p>
</td>
<td style='padding:.75pt;'>
<p class="MsoNormal">NULL<span style='font-size:12pt;'></span></p>
</td>
</tr>
</table>
<p>As you can see we have selected everything from the Customers (first table). For all rows from Customers, which don&#8217;t have a match in the Sales (second table), the SalesPerCustomer column has amount NULL (NULL means a column contains nothing).</p>
<p>The <strong>RIGHT OUTER JOIN</strong> or just <strong>RIGHT JOIN</strong> behaves exactly as <strong>SQL LEFT JOIN</strong>, except that it returns all rows from the second table (the right table in our <strong>SQL JOIN</strong> statement).</p>
<p><strong>interesting?..</strong>http://www.devshed.com/c/a/MySQL/Understanding-SQL-Joins<span style='color:#1F497D;'>/</span></p>
<p><span style='font-size:11pt;font-family:Calibri,sans-serif;color:#1F497D;'>&nbsp;</span></p>
<p><span style='font-size:11pt;font-family:Calibri,sans-serif;color:#1F497D;'>&nbsp;</span></p>
<p class="MsoNormal">&nbsp;</p>
</p></div>
]]></content:encoded>
			<wfw:commentRss>http://blog.theunical.com/databases/mysql/sql-joins/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

