<?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>Profissionais TI - Pra quem respira informação &#187; natural-join</title>
	<atom:link href="http://www.profissionaisti.com.br/tag/natural-join/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.profissionaisti.com.br</link>
	<description>Pra quem respira informação</description>
	<lastBuildDate>Fri, 10 Feb 2012 16:02:41 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>Entendendo Outer Joins SQL &#8211; Parte 3 (Conexões Externas LEFT, RIGHT JOIN)</title>
		<link>http://www.profissionaisti.com.br/2009/06/entendendo-outer-joins-sql-parte-3-conexoes-externas-left-right-join/</link>
		<comments>http://www.profissionaisti.com.br/2009/06/entendendo-outer-joins-sql-parte-3-conexoes-externas-left-right-join/#comments</comments>
		<pubDate>Wed, 24 Jun 2009 09:00:41 +0000</pubDate>
		<dc:creator>Paulinha Winter</dc:creator>
				<category><![CDATA[Desenvolvimento]]></category>
		<category><![CDATA[cross-join]]></category>
		<category><![CDATA[inner-join]]></category>
		<category><![CDATA[join]]></category>
		<category><![CDATA[left-join]]></category>
		<category><![CDATA[natural-join]]></category>
		<category><![CDATA[outer-join]]></category>
		<category><![CDATA[right-join]]></category>
		<category><![CDATA[SQL]]></category>

		<guid isPermaLink="false">http://www.profissionaisti.com.br/?p=2932</guid>
		<description><![CDATA[3 &#8211; Conexões Externas As conexões externas servem para efetuar junções entre tabelas sem que necessariamente exista entre elas uma combinação exata. O LEFT e o RIGHT OUTER JOIN são os componentes desse tipo de conexão. Não é obrigado o uso do termo OUTER, se você encontrar apenas LEFT JOIN, por exemplo, funcionará da mesma [...]]]></description>
			<content:encoded><![CDATA[<p><strong>3 &#8211; Conexões Externas</strong></p>
<p>As conexões externas servem para efetuar junções entre tabelas sem que necessariamente exista entre elas uma combinação exata. O <strong>LEFT</strong> e o <strong>RIGHT OUTER JOIN</strong> são os componentes desse tipo de conexão. Não é obrigado o uso do termo OUTER, se você encontrar apenas LEFT JOIN, por exemplo, funcionará da mesma maneira.</p>
<p>O OUTER JOIN pode ser utilizado quando você quiser retornar uma lista de todos os programadores, mesmo que estes não estejam relacionados a nenhuma linguagem de programação. A diferença do LEFT para o RIGHT está apenas na identificação de qual tabela da junção irá retornar todos os dados. O mais comum é o LEFT, pois normalmente colocamos a tabela mais importante primeiro. Inclusive a ordem das tabelas e das cláusulas de restrições na consulta, em alguns bancos, altera o desempenho.</p>
<p><strong>Obs.:</strong> O modelo de dados utilizado neste post encontra-se em <a title="Produto Cartesiano" href="http://www.profissionaisti.com.br/2009/06/entendendo-outer-joins-sql-parte-1-produto-cartesiano" target="_blank">Entendendo Outer Joins SQL &#8211; Parte 1 (Produto Cartesiano)</a></p>
<p>No exemplo abaixo quero uma lista com todos os programadores e suas empresas independente se eles estão relacionados a uma empresa ou não.</p>
<p><span style="color: #0000ff;">SELECT</span> * <span style="color: #0000ff;">FROM</span> programadores p <span style="color: #0000ff;">LEFT JOIN</span> empresas e <span style="color: #0000ff;">ON</span> e.id_empresa = p.id_empresa;</p>
<p>Já neste exemplo, eu quero a lista de todas as empresas e seus programadores, independente se a empresa tem ou não programadores.</p>
<p><span style="color: #0000ff;">SELECT</span> * <span style="color: #0000ff;">FROM</span> programadores p <span style="color: #0000ff;">RIGHT JOIN</span> empresas e <span style="color: #0000ff;">ON</span> e.id_empresa = p.id_empresa;</p>
<p>O banco vai relacionar cada linha de uma tabela com todas as linhas da outra tabela, trazendo as linhas que atendem a comparação existente na consulta (ON) e para as empresas que não tem nem um programador ele irá preencher com NULL os campos, como é o caso da “Empresa 5”.</p>
<p align="center"><img class="aligncenter size-full wp-image-152" src="http://www.paulinhawinter.com/wp-content/uploads/2009/04/right.jpg" alt="right" width="394" height="157" /></p>
]]></content:encoded>
			<wfw:commentRss>http://www.profissionaisti.com.br/2009/06/entendendo-outer-joins-sql-parte-3-conexoes-externas-left-right-join/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>Entendendo Outer Joins SQL &#8211; Parte 2 (Conexões Internas &#8211; INNER JOIN)</title>
		<link>http://www.profissionaisti.com.br/2009/06/entendendo-outer-joins-sql-parte-2-conexoes-internas-inner-join/</link>
		<comments>http://www.profissionaisti.com.br/2009/06/entendendo-outer-joins-sql-parte-2-conexoes-internas-inner-join/#comments</comments>
		<pubDate>Tue, 23 Jun 2009 09:00:47 +0000</pubDate>
		<dc:creator>Paulinha Winter</dc:creator>
				<category><![CDATA[Desenvolvimento]]></category>
		<category><![CDATA[cross-join]]></category>
		<category><![CDATA[inner-join]]></category>
		<category><![CDATA[join]]></category>
		<category><![CDATA[left-join]]></category>
		<category><![CDATA[natural-join]]></category>
		<category><![CDATA[outer-join]]></category>
		<category><![CDATA[right-join]]></category>
		<category><![CDATA[SQL]]></category>

		<guid isPermaLink="false">http://www.profissionaisti.com.br/?p=2939</guid>
		<description><![CDATA[Leia a Parte 1 2 &#8211; Conexões Internas A conexão interna inicialmente faz a mesma coisa que a conexão cruzada, porém aplica restrições que podem ser de igualdade ou desigualdade, isso faz com que algumas linhas sejam eliminadas do resultado. Vamos lá então, quem faz parte das conexões internas? INNER JOIN, NATURAL JOIN e STRAIGHT_JOIN. [...]]]></description>
			<content:encoded><![CDATA[<p>Leia a <a href="http://www.profissionaisti.com.br/2009/06/entendendo-outer-joins-sql-parte-1-produto-cartesiano/">Parte 1</a></p>
<p><strong>2 &#8211; Conexões Internas</strong></p>
<p>A conexão interna inicialmente faz a mesma coisa que a <a title="Produto Cartesiano" href="http://www.profissionaisti.com.br/2009/06/entendendo-outer-joins-sql-parte-1-produto-cartesiano" target="_blank">conexão cruzada</a>, porém aplica restrições que podem ser de igualdade ou desigualdade, isso faz com que algumas linhas sejam eliminadas do resultado.</p>
<p><strong>Vamos lá então, quem faz parte das conexões internas?</strong> INNER JOIN, NATURAL JOIN e STRAIGHT_JOIN.</p>
<p><strong>Obs.:</strong> O modelo de dados utilizado neste post encontra-se em <a title="Produto Cartesiano" href="http://www.profissionaisti.com.br/2009/06/entendendo-outer-joins-sql-parte-1-produto-cartesiano" target="_blank">Entendendo Outer Joins SQL &#8211; Parte 1 (Produto Cartesiano)</a></p>
<p>Digamos que eu necessite fazer uma busca de todos os programadores e suas respectivas empresas, como resolvo?</p>
<p><span style="color: #0000ff;">SELECT</span> * <span style="color: #0000ff;">FROM</span> programadores p <span style="color: #0000ff;">INNER JOIN</span> empresas e <span style="color: #0000ff;">ON</span> e.id_empresa = p.id_empresa;</p>
<p>Na consulta acima, fiz uma junção entre as duas tabelas que guardam as informações que preciso e fiz uma restrição (ON) comparando a chave da empresa existente nas duas tabelas.</p>
<p>A figura abaixo mostra o comportamento do banco, o qual relaciona cada linha de uma tabela com todos os registros da outra tabela, trazendo como resultado somente as linhas onde a chave da empresa é idêntica (linhas em vermelho).</p>
<p style="text-align: center;"><img class="aligncenter size-full wp-image-156" src="http://www.paulinhawinter.com/wp-content/uploads/2009/04/inner_comofunciona.jpg" alt="inner_comofunciona" width="391" height="594" /></p>
<p>Essa restrição (ON) não impede que eu utilize as outras opções da sintaxe do SELECT, por exemplo, o WHERE. Inclusive eu obteria o mesmo resultado com a consulta abaixo:</p>
<p><span style="color: #0000ff;">SELECT</span> * <span style="color: #0000ff;">FROM</span> programadores p, empresas e <span style="color: #0000ff;">WHERE</span> e.id_empresa = p.id_empresa;</p>
<p>Vamos para uma segunda situação, na qual preciso de uma lista com todos os programadores que programam em pelo menos uma linguagem e saber quais são estas. Como mostra o modelo, temos um relacionamento n:m que originou a tabela programadores_linguagens, como resolvo?</p>
<p><span style="color: #0000ff;">SELECT</span> p.nome, l.nome<br />
 <span style="color: #0000ff;">FROM</span> programadores p<span style="color: #0000ff;"><br />
 INNER JOIN</span> programadores_linguagens pl<br />
 <span style="color: #0000ff;">ON</span> pl.id_programador = p.id_programador<br />
 <span style="color: #0000ff;">INNER JOIN</span> linguagens l <span style="color: #0000ff;"><br />
 ON</span> l.id_linguagens = pl.id_linguagens;</p>
<p style="text-align: center;"><img class="aligncenter size-full wp-image-155" src="http://www.paulinhawinter.com/wp-content/uploads/2009/04/inner2.jpg" alt="inner2" width="131" height="147" /></p>
<p>Repare que os programadores Pinter e Gabriel não apareceram no resultado da consulta, isso porque ambos não estão relacionados à nenhuma linguagem de programação. Mas, e se fosse necessário a presença deles na listagem? Você resolveria utilizando conexões externas (item 3).</p>
<p>O NATURAL JOIN e o STRAIGHT_JOIN fazem exatamente a mesma coisa que o INNER JOIN em questão de resultado, porém com suas particularidades:</p>
<p><strong>NATURAL JOIN:</strong> com ele você não precisa identificar quais colunas serão comparadas, pois ele fará a comparação entre campos com mesmo nome.</p>
<p><span style="color: #0000ff;">SELECT</span> * <span style="color: #0000ff;">FROM</span> programadores <span style="color: #0000ff;">NATURAL JOIN</span> empresas;</p>
<p><strong>STRAIGHT_JOIN:</strong> faz com que a tabela a esquerda seja lida primeiro, isso é utilizado quando o otimizador do JOIN coloca as tabelas em ordem errada. Isto é muito pouco utilizado.</p>
<p><span style="color: #0000ff;">SELECT</span> * <span style="color: #0000ff;">FROM</span> programadores p <span style="color: #0000ff;">STRAIGHT_JOIN</span> empresas e <span style="color: #0000ff;">ON</span> e.id_empresa = p.id_empresa;</p>
<p><strong>Obs.:<br />
 1</strong><strong> –</strong> Posso substituir o <strong>ON</strong> por <strong>USING</strong> quando o nome nas duas tabelas for idêntico.</p>
<p>Ex.: <span style="color: #0000ff;">SELECT</span> * <span style="color: #0000ff;">FROM</span> programadores p <span style="color: #0000ff;">INNER JOIN</span> empresas e <span style="color: #0000ff;">USING</span>(id_empresa);</p>
<p><strong>2 –</strong> O uso do <strong>INNER</strong> é opcional.</p>
<p>Ex.: <span style="color: #0000ff;">SELECT</span> * <span style="color: #0000ff;">FROM</span> programadores p <span style="color: #0000ff;">JOIN</span> empresas e <span style="color: #0000ff;">USING</span> (id_empresa);</p>
<p>Continue lendo: <a href="http://www.profissionaisti.com.br/2009/06/entendendo-outer-joins-sql-parte-3-conexoes-externas-left-right-join/">Parte 3</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.profissionaisti.com.br/2009/06/entendendo-outer-joins-sql-parte-2-conexoes-internas-inner-join/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
	</channel>
</rss>

