Pular para o conteúdo principal

Postagens

Mostrando postagens de Maio, 2015

Treinamento para Consultas com SQL Server – Parte 2 - JOINS - Outros tipos de joins

No post anterior faltou acrescentar alguns detalhes sobre LEFT JOINS que coloco agora.
Use LEFT JOIN quando:
O objetivo for listar todos os registros de uma tabela e mostrar colunas de outra havendo ou não correspondências.Precisar saber se existem registros filhes de uma tabela pai em uma (ou várias) filho. Não use para fazer filtros, conforme foi demonstrado com INNER JOIN.
A maneira de restringir (condições de busca) também é semelhante ao INNER JOIN. Uma questão sobre desempenho O desempenho com LEFT JOIN é melhor do que com INNER JOIN, porém, pode ser que em alguns casos seja necessário usar mesmo o INNER. Usando CROSS JOIN (na verdade é melhor nem usar) Este tipo de JOIN está aqui meramente para exemplo pois causa muitos problemas. Consiste em vez de usar o termo JOIN, colocar as tabelas relacionadas na cláusula FROM.
SELECT [TABELA1.COLUNAS] ...
   ,[TABELA2.COLUNAS...]
   , ...
   ,[TABELAn.COLUNAS...]
FROM [TABELA1], [TABELA2], ..., [TABELAn]
O problema aqui é que este tipo de JOI…

Treinamento para Consultas com SQL Server – Parte 2 - JOINS - LEFT JOINS

Neste tipo de relacionamento e junção de tabelas, os registros da tabela origem (LEFT) são listados independentemente de haverem registros na tabela filha (à direita).

Considere o exemplo das tabelas PERSON.PERSON e HUMANRESOURCES.EMPLOYEE deste post anterior, na primeira consulta, somente foram exibidos registros da primeira tabela caso fossem encontrados registros na segunda, com LEFT JOIN todos os registros da primeira são exibidos mesmo que não haja registros correspondentes nas tabelas relacionadas. Se for definido na cláusula SELECT mostrar colunas da segunda tabela, os valores serão NULL para quando não houver nenhuma correspondência. A consulta fica da seguinte forma:

select pp.FirstName + ' ' + pp.LastName as CompleteName
   ,HRE.JobTitle
   ,HRE.BirthDate
from person.person as pp
left join HumanResources.Employee HRE on hre.BusinessEntityID =
   pp.BusinessEntityID
Esta consulta produz os seguintes resultados: