Fundamentos de T-SQL: Consultas em Uma Tabela

Aqui estão alguns exercícios comuns de consultas SQL em uma única tabela para ajudar no entendimento do T-SQL.

Antes de resolver os problemas, é importante entender a ordem lógica dos componetnes de uma consulta SQL:

  1. FROM
  2. WHERE
  3. GROUP BY
  4. HAVING
  5. SELECT
  6. ORDER BY

Você pode usar o script SQL fornecido abaixo para criar um banco de dados, tabelas e inserir dados.

Tarefas:

1. Retornar pedidos gerados em junho de 2007:

Solução:

SELECT id_pedido, data_pedido, id_cliente, id_funcionario
FROM Vendas.Pedidos
WHERE data_pedido >= '2007-06-01'
AND data_pedido < '2007-07-01';

2. Retornar pedidos gerados no último dia de cada mês:

Solução:

SELECT id_pedido, data_pedido, id_cliente, id_funcionario
FROM Vendas.Pedidos
WHERE data_pedido = DATEADD(month, DATEDIFF(month, '2005-12-31', data_pedido), '2005-12-31');

3. Encontrar funcionários cujo sobrenome contém duas ou mais letras 'a':

Solução:

SELECT id_funcionario, nome, sobrenome
FROM RH.Funcionarios
WHERE sobrenome LIKE '%a%a%';

4. Listar todos os pedidos com valor total maior que 10.000, ordenados pelo valor:

Solução:

SELECT id_pedido, SUM(preco_unitario * quantidade) AS valor_total
FROM Vendas.DetalhesPedidos
GROUP BY id_pedido
HAVING SUM(preco_unitario * quantidade) > 10000
ORDER BY valor_total DESC;

5. Exibir os três países com maior média de frete em 2007:

Solução:

SELECT TOP(3) pais_envio, AVG(frete) AS media_frete
FROM Vendas.Pedidos
WHERE data_pedido >= '2007-01-01' AND data_pedido < '2008-01-01'
GROUP BY pais_envio
ORDER BY media_frete DESC;

6. Calcular um número de linha para cada pedido de cliente, ordenado por data do pedido:

Solução:

SELECT id_cliente, data_pedido, id_pedido,
ROW_NUMBER() OVER (PARTITION BY id_cliente ORDER BY data_pedido, id_pedido) AS numero_linha
FROM Vendas.Pedidos
ORDER BY id_cliente, numero_linha;

7. Determinar o gênero baseado no título de cortesia dos funcionários:

Solução usando CASE:

SELECT id_funcionario, nome, sobrenome, titulo_cortesia,
CASE WHEN titulo_cortesia IN ('Sra.', 'Srta.') THEN 'Feminino'
     WHEN titulo_cortesia = 'Sr.' THEN 'Masculino'
     ELSE 'Desconhecido'
END AS genero
FROM RH.Funcionarios;

8. Mostrar cleintes e suas regiões, ordenando por região e colocando valores NULL no final:

Solução:

SELECT id_cliente, regiao
FROM Vendas.Clientes
ORDER BY CASE WHEN regiao IS NULL THEN 1 ELSE 0 END, regiao;

Tags: T-SQL SQL Server Consultas SQL Exercícios SQL

Publicado em 8-22 03:48