Como faço para combinar os resultados de várias tabelas SQL (dica: existem três maneiras)
Muitas vezes em um banco de dados relacional, as informações que você deseja mostrar em sua consulta estão em mais de uma mesa. Isso levanta a questão “Como você combina resultados de mais de uma tabela?”
Todos os exemplos para esta lição são baseados no Microsoft SQL Server Management Studio e no banco de dados AdventureWorks2012. Você pode começar a usar estes gratuitamente ferramentas usando meu Guia de Introdução ao SQL Server.
Quais são as maneiras de combinar resultados de mais de uma consulta?
O SQL não seria uma linguagem muito útil se não não fornece um meio fácil para você combinar os resultados de mais de uma consulta. Felizmente, existem três maneiras principais de combinar dados de várias tabelas. Examinaremos brevemente aqui e forneceremos links para artigos mais aprofundados.
Três maneiras principais de combinar dados
Os dados em tabelas de banco de dados relacional são organizados em linhas e colunas. À medida que investigamos maneiras de combinar dados, tenha em mente que o resultado final será adicione mais colunas a um resultado, talvez de outra tabela relacionada, ou linhas, pegando um conjunto de linhas de duas ou mais tabelas s.
Quando a maioria das pessoas aprende a combinar dados, elas aprendem sobre:
- JOIN – você pode usar joins para combinar colunas de uma ou mais consultas em um resultado.
- UNION – Use Unions e outros operadores de conjunto para combinar linhas de uma ou mais consultas em um resultado.
- Subconsultas – Às vezes chamadas de consultas aninhadas, podem ser usadas para realizar uma pesquisa separada em o banco de dados mostrou que os resultados podem ser usados em outra consulta.
Junções
Eu gosto de pensar nas junções como a cola que junta o banco de dados novamente. Os bancos de dados relacionais são normalmente normalizados para tornar os dados mais fáceis de manter e melhorar o desempenho, mas o resultado final é que as informações são separadas em várias tabelas. Você pode usar Joins para recombinar essas informações novamente em um formato mais legível. Os dados são recombinados combinando colunas de cada tabela.
Em todos os casos, as junções requerem dois ingredientes principais: Duas tabelas e uma condição de junção. As tabelas são o que usaremos para extrair as linhas e colunas e a condição de junção é como pretendemos combinar as colunas entre as tabelas.
Exemplo JOIN
SELECT Person.FirstName, Person.LastName, PersonPhone.PhoneNumber FROM Person.Person INNER JOIN Person.PersonPhone ON Person.BusinessEntityID = PersonPhone.BusinessEntityID
Existem dois tipos principais de junções. Inner Joins e Outer Joins.
Inner Joins retornam apenas uma linha resultante se a condição de junção corresponder nas duas tabelas. As junções internas são usadas principalmente para combinar a chave primária de uma tabela com uma chave estrangeira em outra.
O segundo tipo de junção é uma junção externa. As junções externas sempre retornam pelo menos uma linha para a tabela principal, referida como a tabela Esquerda ou Direita, e valores nulos nas colunas correspondentes da coluna não correspondente. As junções externas são úteis para localizar dados não correspondentes.
É importante observar que as junções podem retornar mais linhas do que as existentes em qualquer uma das tabelas combinadas. As junções retornam combinações de correspondências. Se você juntar duas tabelas, uma contendo 5 linhas e a outra 10, o resultado pode conter de 0 a 50 linhas, dependendo da condição de junção.
Uniões
A UNIÃO é usado para combinar as linhas de duas ou mais consultas em um resultado. A união é chamada de operador de conjunto.
Existem algumas condições especiais que devem ocorrer para que uma união funcione. Primeiro, cada consulta deve ter o mesmo número de colunas. Em segundo lugar, os tipos de dados dessas colunas devem ser compatíveis. De modo geral, cada consulta deve retornar o mesmo número e tipo de colunas.
Um exemplo prático de união é quando duas tabelas contêm números de peça e você deseja criar uma lista combinada para um catálogo. Você pode optar por fazer com que o resultado final seja uma lista única para a consulta combinada ou se usar UNION ALL, retorne todas as linhas de cada tabela.
Exemplo UNION
SELECT C.NameFROM Production.ProductCategory AS CUNIONSELECT S.NameFROM Production.ProductSubcategory AS S
Além de Union, há alguns outros operadores de conjunto úteis:
- INTERSECT – você pode usar isso para retornar apenas linhas que são comuns entre duas tabelas.
- EXCETO – você pode usar isto para retornar linhas que existem em uma tabela, mas não são encontradas em outra.
Conforme você aprende mais sobre SQL que você encontra que você pode usar joins para escrever instruções equivalentes para Intersect e Except, mas não há equivalentes para Union.
Subconsultas
As subconsultas às vezes são chamadas de consultas aninhadas. São consultas definidas dentro de outras consultas. As subconsultas podem ser confusas. Acho que muito disso decorre do fato de que eles podem ser usados em muitos lugares em uma instrução SQL select, e para diversos fins!
Por exemplo, aqui estão algumas áreas em que você pode ver uma subconsulta:
- Cláusula SELECT – usada para retornar um valor. Por exemplo, se você estiver consultando uma tabela de vendas, poderá incluir o total de vendas retornando a soma de todas as vendas de uma subconsulta.
- Cláusula WHERE – Subconsultas podem ser usadas na cláusula where em comparações. Você pode configurar uma comparação para comparar as vendas com a média geral. A média geral seria retornada de uma subconsulta. Você também pode usar subconsultas em operadores de associação, como IN. Em vez de codificar a cláusula in, você pode usar uma subconsulta para torná-la mais dinâmica.
- Cláusula HAVING – Um único valor de uma subconsulta é incluído nas comparações da cláusula HAVING.
Exemplo de subconsulta
SELECT SalesOrderID, LineTotal, (SELECT AVG(LineTotal) FROM Sales.SalesOrderDetail) AS AverageLineTotalFROM Sales.SalesOrderDetail
Quando usado em cláusulas de seleção e operadores de comparação, como igual, maior que e menor que , uma subconsulta pode retornar apenas uma linha. Se usado em conjunto com um operador de associação, como IN, é normal que a consulta retorne uma ou mais linhas.