Ao trabalhar com um banco de dados SQL, a recuperação de dados é uma tarefa comum. É aqui que entra a declaração SELECT. Neste tutorial, exploraremos como usar a declaração SELECT para ler, agregar e classificar dados de uma ou mais tabelas de banco de dados.
Começando
Antes de mergulharmos em exemplos, vamos configurar nosso ambiente. Usaremos o banco de dados de exemplo Adventure Works para nossas consultas. Você pode instalar esse banco de dados em sua máquina para acompanhar e executar as consultas por conta própria. Alternativamente, você pode substituir os nomes de tabela e coluna nos exemplos pelos nomes do seu próprio banco de dados.
Declaração SELECT básica
A forma mais básica da declaração SELECT recupera todas as colunas e todas as linhas de uma tabela. Aqui está a sintaxe:
SELECT *
FROM NomeDaTabela;
Por exemplo, para selecionar todos os dados da tabela “Person” no esquema “Person”, podemos usar a seguinte consulta:
SELECT *
FROM [Person].[Person];
Se quisermos apenas um subconjunto das colunas, podemos listar explicitamente cada coluna separada por vírgula em vez de usar o símbolo asterisco. Por exemplo:
SELECT BusinessEntityID, FirstName, LastName, ModifiedDate
FROM [Person].[Person];
Classificando os resultados
Às vezes, queremos exibir as linhas em uma ordem específica. Podemos usar a cláusula ORDER BY para isso. Aqui está a sintaxe:
SELECT coluna1, coluna2, coluna3, ...
FROM NomeDaTabela
ORDER BY colunaX ASC|DESC;
Podemos classificar em uma ou mais colunas e escolher classificar em ordem ascendente (ASC) ou descendente (DESC). Por exemplo, para classificar as linhas por data de modificação ascendente:
SELECT BusinessEntityID, FirstName, LastName, ModifiedDate
FROM [Person].[Person]
ORDER BY ModifiedDate ASC;
Se quisermos classificar por data de modificação descendente:
SELECT BusinessEntityID, FirstName, LastName, ModifiedDate
FROM [Person].[Person]
ORDER BY ModifiedDate DESC;
Também podemos classificar em várias colunas. Por exemplo, vamos classificar por data de modificação descendente primeiro e depois por nome ascendente:
SELECT BusinessEntityID, FirstName, LastName, ModifiedDate
FROM [Person].[Person]
ORDER BY ModifiedDate DESC, FirstName;
Filtrando dados
Frequentemente, queremos recuperar um subconjunto das linhas de uma tabela. Podemos usar a cláusula WHERE para filtrar os dados com base em condições específicas. Aqui está a sintaxe:
SELECT coluna1, coluna2, ...
FROM NomeDaTabela
WHERE ExpressãoBooleana;
A expressão booleana determina quais linhas são retornadas pela consulta. Por exemplo, para recuperar todas as pessoas com o nome “Rob”:
SELECT BusinessEntityID, FirstName, LastName, ModifiedDate
FROM [Person].[Person]
WHERE FirstName = 'Rob';
Também podemos usar operadores de comparação e funções para filtragem mais avançada. Por exemplo, para recuperar linhas em que o BusinessEntityID é igual, menor ou maior que 130:
SELECT BusinessEntityID, FirstName, LastName, ModifiedDate
FROM [Person].[Person]
WHERE BusinessEntityID = 130;
SELECT BusinessEntityID, FirstName, LastName, ModifiedDate
FROM [Person].[Person]
WHERE BusinessEntityID < 130;
SELECT BusinessEntityID, FirstName, LastName, ModifiedDate
FROM [Person].[Person]
WHERE BusinessEntityID > 130;
Podemos usar o operador LIKE para correspondência de padrões. Por exemplo, para pesquisar pessoas cujo nome começa com “Rob”:
SELECT BusinessEntityID, FirstName, LastName, ModifiedDate
FROM [Person].[Person]
WHERE FirstName LIKE 'Rob%';
Há muitos outros operadores e funções disponíveis para filtrar dados. Você pode explorá-los mais a fundo na documentação do SQL Server.
Agrupando dados
Às vezes, queremos recuperar resultados agregados em vez de linhas de detalhes individuais. Podemos usar a cláusula GROUP BY para esse fim. Aqui está a sintaxe:
SELECT coluna1, coluna2, FunçãoAgregação(coluna3)
FROM NomeDaTabela
GROUP BY coluna1, coluna2;
Podemos usar várias funções de agregação, como SUM, AVG, MIN, MAX, etc. Por exemplo, para contar o número de linhas em uma tabela:
SELECT COUNT(1) AS RowCnt
FROM [Person].[Person];
Se combinarmos a cláusula GROUP BY com uma cláusula WHERE, podemos contar o número de vezes que um nome começa com “Rob”:
SELECT FirstName, COUNT(1) AS RowCnt
FROM [Person].[Person]
WHERE FirstName LIKE 'Rob%'
GROUP BY FirstName;
Lembre-se de incluir todas as colunas não agregadas na cláusula GROUP BY. Caso contrário, você encontrará um erro.
Unindo tabelas
Frequentemente, precisamos recuperar dados de várias tabelas combinando-as com base em colunas comuns. Podemos fazer isso usando operações de junção. Existem diferentes tipos de junções disponíveis:
- INNER JOIN: Retorna apenas as linhas que têm valores correspondentes em ambas as tabelas.
- LEFT OUTER JOIN: Retorna todas as linhas da primeira tabela e quaisquer linhas correspondentes da segunda tabela.
- RIGHT OUTER JOIN: Retorna todas as linhas da segunda tabela e quaisquer linhas correspondentes da primeira tabela.
- FULL OUTER JOIN: Retorna todas as linhas de ambas as tabelas, incluindo linhas não correspondentes.
Aqui está um exemplo de uso de INNER JOIN para recuperar todas as pessoas que são funcionários da AdventureWorks:
SELECT *
FROM [Person].[Person]
INNER JOIN [HumanResources].[Employee] ON [Employee].[BusinessEntityID] = [Person].[BusinessEntityID];
Podemos usar aliases de tabela para tornar a consulta mais legível:
SELECT *
FROM [Person].[Person] p
INNER JOIN [HumanResources].[Employee] e ON e.[BusinessEntityID] = p.[BusinessEntityID];
Ao unir tabelas com colunas de mesmo nome, precisamos prefixá-las com o nome ou alias da tabela. Por exemplo:
SELECT p.[FirstName], p.[LastName], p.[BusinessEntityID], e.[BusinessEntityID], e.[HireDate]
FROM [Person].[Person] p
INNER JOIN [HumanResources].[Employee] e ON e.[BusinessEntityID] = p.[BusinessEntityID];
É uma boa prática prefixar todas as colunas na declaração SELECT com o alias da tabela para evitar confusão.
LEFT OUTER JOIN, RIGHT OUTER JOIN e FULL OUTER JOIN seguem uma sintaxe semelhante, mas retornam resultados diferentes com base no tipo de junção. Você pode explorar esses tipos de junção mais a fundo na documentação do SQL Server.
Conclusão
A declaração SELECT é uma ferramenta poderosa para recuperar e manipular dados no SQL Server. Ao entender sua sintaxe e várias cláusulas, você pode consultar e analisar efetivamente seu banco de dados. Neste tutorial, abordamos o básico das declarações SELECT, classificação de resultados, filtragem de dados, agrupamento de dados e junção de tabelas. Com esse conhecimento, você pode escrever consultas SQL com confiança para atender às suas necessidades específicas.
Boas consultas!