You are on page 1of 8

----------------------------------------------------------------

------------------- EXERCICIOS DE SQL SERVER -------------------


----------------------------------------------------------------

-- SELECIONE TODOS OS DADOS DOS PRODUTOS QUE COMECEM COM AS INICIAIS 'Mo'.
SELECT *
FROM Produto
WHERE Descricao LIKE 'MO%'

-- SELECIONE O NOME DOS CLIENTES CUJO NOME COMECE COM A LETRA 'G'.

SELECT Nome
FROM Cliente
WHERE Nome LIKE 'G%'

-- SELECIONE O ID, NOME, SEXO, E-MAIL DOS CLIENTES QUE POSSUEM E-MAIL DO 'hotmail'.

SELECT Id, Nome, Sexo, Email


FROM Cliente
WHERE Email LIKE '%@hotmail%'

-- ACRESCENTE 50 UNIDADES AO ESTOQUE MINIMO DE TODOS OS PRODUTOS.

Update Produto set QtdeEstoqueMinimo = QtdeEstoqueMinimo + 50


--ou
Update Produto set QtdeEstoqueMinimo += 50

-- SELECIONE TODOS OS DADOS DOS CLIENTES DO SEXO FEMININO.

SELECT Id, Nome, Sexo, Email, DtNascimento


FROM Cliente
WHERE Sexo = 'F'

-- SELECIONE TODOS OS DADOS DOS PRODUTOS QUE ESTEJAM COM O ESTOQUE ATUAL ABAIXO DO
ESTOQUE MINIMO.

SELECT *
FROM Produto
WHERE QtdeEstoqueAtual < QtdeEstoqueMinimo

-- SELECIONE O NOME DOS PRODUTOS QUE POSSUEM VRUNITARIO ACIMA DE R$ 10.00 EM ORDEM
CRESCENTE DE QTDEESTOQUEATUAL.

SELECT Descricao
FROM Produto
WHERE VrUnitario > 10
Order by QtdeEstoqueAtual Asc

-- SELECIONE TODOS OS DADOS DOS CLIENTES QUE NASCERAM NO MES DE JULHO.

SELECT Id, Nome, Sexo, Email, DtNascimento


FROM Cliente
WHERE MONTH(DtNascimento) = 7

-- ACRESCENTE 10% AO VRUNITARIO DE TODOS OS PRODUTOS.


Update Produto set VrUnitario *= 1.10
--ou
Update Produto set VrUnitario = VrUnitario * 1.10
-- SELECIONE O E-MAIL DE TODOS OS CLIENTES.
SELECT Email
FROM Cliente

-- SELECIONE O VALOR TOTAL DE PRODUTOS EM ESTOQUE


-- IMP.: VALOR TOTAL EM ESTOQUE = SOMA (QTDEESTOQUEATUAL * VRUNITARIO)
-- PARA CALCULAR A SOMA UTILIZE A FUN��O SUM.

select SUM(QtdeEstoqueAtual * VrUnitario)


from Produto

-- SELECIONE O E-MAIL DOS CLIENTES DO SEXO MASCULINO.

SELECT Email
FROM Cliente
Where Sexo = 'M'

-- SELECIONE TODOS OS DADOS DOS CLIENTES QUE NASCERAM NOS MESES 08,09 E 10.

SELECT *
FROM Cliente
Where MONTH(DtNascimento) between 8 and 10
--ou
SELECT *
FROM Cliente
Where MONTH(DtNascimento) > 7
And MONTH(DtNascimento) < 11
--ou
SELECT *
FROM Cliente
Where MONTH(DtNascimento) in (8,9,10)
--ou
SELECT *
FROM Cliente
Where MONTH(DtNascimento) = 8
Or MONTH(DtNascimento) = 9
Or MONTH(DtNascimento) = 10

-- SELECIONE O VALOR M�DIO DOS PRODUTOS EM ESTOQUE


-- IMP.: VALOR M�DIO DOS PRODUTOS EM ESTOQUE = M�DIA (QTDEESTOQUEATUAL *
VRUNITARIO)
-- PARA CALCULAR A M�DIA UTILIZE A FUN��O AVG.
select AVG(QtdeEstoqueAtual * VrUnitario)
from Produto

-- SELECIONE O ID E NOME DOS CLIENTES CUJO NOME TERMINE COM A LETRA 'A' E NASCERAM
NO ANO DE 1979.
SELECT Id, Nome
FROM Cliente
Where Nome like '%a'
and Year(DtNascimento) = 1979
--ou
SELECT Id, Nome
FROM Cliente
Where Nome like '%a'
and DtNascimento between '1979-01-01' and '1979-12-31'
--ou
SELECT Id, Nome
FROM Cliente
Where Nome like '%a'
and DtNascimento > '1978-12-31'
and DtNascimento < '1980-01-01'

-- SELECIONE TODOS OS DADOS DOS CLIENTES QUE NASCERAM ENTRE OS ANOS DE 1999 E 2008
E TENHAM E-MAIL DO 'gmail'.

SELECT *
FROM Cliente
Where Email like '%@gmail%'
and year(DtNascimento) between 1999 and 2008

SELECT *
FROM Cliente
Where Email like '%@gmail%'
and DtNascimento between '1999-01-01' and '2008-12-31'

-- SELECIONE TODOS OS DADOS DOS CLIENTES QUE NASCERAM NOS MESES 01, 07 E 12.

SELECT *
FROM Cliente
Where MONTH(DtNascimento) in (1,7,12)
--ou
SELECT *
FROM Cliente
Where MONTH(DtNascimento) = 1
Or MONTH(DtNascimento) = 7
Or MONTH(DtNascimento) = 12
--ou
SELECT *
FROM Cliente
Where MONTH(DtNascimento) = 1
UNION All
SELECT *
FROM Cliente
Where MONTH(DtNascimento) = 7
UNION All
SELECT *
FROM Cliente
Where MONTH(DtNascimento) = 12

-- SELECIONAR TODOS OS DADOS DAS VENDAS (INCLUSIVE SEUS PRODUTOS) REALIZADAS PARA O
CLIENTE 'Aroldo Rodrigues'.

Select *
from Venda V
left join VendaProduto VP on V.Id = VP.IdVenda
inner join Produto P on P.Id = VP.IdProduto
inner join Cliente C on C.Id = V.IdCliente
Where c.Nome = 'Aroldo Rodrigues'

-- SELECIONE O NOME DOS CLIENTES JUNTO COM SUA IDADE APROXIMADA.


-- IMP. UTILIZE A FUN��O DATEDIFF.

SELECT Nome, DATEDIFF(year,DtNascimento,GETDATE()) as IdadeAproximada


FROM Cliente

-- SELECIONE O MENOR VRUNITARIO DO CADASTRO DE PRODUTO.


-- IMP.: UTILIZE A FUN��O MIN.
Select Min(VrUnitario)
from Produto

-- SELECIONAR TODOS OS DADOS DAS VENDAS (INCLUSIVE SEUS PRODUTOS) DO CLIENTE


'Beatriz Souza Santos' -- E QUE ESTEJAM FINALIZADAS.

Select *
from Venda V
left join VendaProduto VP on V.Id = VP.IdVenda
inner join Produto P on P.Id = VP.IdProduto
inner join Cliente C on C.Id = V.IdCliente
Where c.Nome = 'Beatriz Souza Santos'
and V.IdStatus = 2 --Vendas Finalizada
--ou
Select *
from Venda V
left join VendaProduto VP on V.Id = VP.IdVenda
inner join Produto P on P.Id = VP.IdProduto
inner join Cliente C on C.Id = V.IdCliente
inner join VendaStatus VS on VS.Id = V.IdStatus
Where c.Nome = 'Beatriz Souza Santos'
and VS.Id = 2 --Vendas Finalizada
--ou
Select *
from Venda V
left join VendaProduto VP on V.Id = VP.IdVenda
inner join Produto P on P.Id = VP.IdProduto
inner join Cliente C on C.Id = V.IdCliente
inner join VendaStatus VS on VS.Id = V.IdStatus
Where c.Nome = 'Beatriz Souza Santos'
and VS.Descricao = 'Finalizada' --Vendas Finalizada

-- SELECIONE O NOME DOS PRODUTOS QUE TERMINEM COM A LETRA 'a'.

Select Descricao
from Produto
Where Descricao like '%a'

-- SELECIONE O ID E DT DA VENDA QUE EST�O FINALIZADAS E FORAM REALIZADAS PELOS


CLIENTES QUE POSSUEM A LETRA 'M' NO NOME.

Select V.Id, V.Dt


from Venda V
inner join Cliente C on C.Id = V.IdCliente
Where c.Nome like '%M%'
and V.IdStatus = 2 --Vendas Finalizada

-- SELECIONAR TODOS OS DADOS DAS VENDAS (SOMENTE VENDAS - N�O INCLUIR OS PRODUTOS)
QUE ESTEJAM COM O STATUS ABERTO E FORAM -- REALIZADAS NO ANO DE 2012.
-- IMP.: AL�M DO ID DO CLIENTE E DO ID DO STATUS DA VENDA, TANTO O NOME QUANTO A
DESCRI��O DOS MESMOS DEVEM SER -- EXIBIDOS NO SELECT. TOME CUIDADO PARA
VENDAS QUE N�O TENHAM CLIENTE.

Select V.*, C.Id, C.Nome, VS.Descricao


from Venda V
left join Cliente C on C.Id = V.IdCliente
inner join VendaStatus VS on VS.Id = V.IdStatus
where V.IdStatus = 1 --Vendas em aberto
and V.dt between '2012-01-01' and '2012-12-31'

-- SELECIONE O NOME DOS CLIENTES QUE COMPRARAM O PRODUTO APONTADOR.

Select C.Nome
from Venda V
inner join VendaProduto VP on V.Id = VP.IdVenda
inner join Produto P on P.Id = VP.IdProduto
inner join Cliente C on C.Id = V.IdCliente
Where V.IdStatus = 2 --Vendas Finalizadas "Compras Efetuadas"
And P.Descricao = 'APONTADOR'

-- SELECIONAR TODOS OS DADOS DAS VENDAS (INCLUSIVE SEUS PRODUTOS) QUE FORAM
REALIZADAS -- A PARTIR DA DATA '20/12/2011'
-- IMP.: AL�M DO ID DO CLIENTE E DO ID DO STATUS DA VENDA, TANTO O NOME QUANTO A
DESCRI��O DOS MESMOS DEVEM SER -- EXIBIDOS NO SELECT. TOME CUIDADO PARA
VENDAS QUE N�O TENHAM CLIENTE.

Select distinct C.id, C.Nome, Vs.Id, VS.Descricao


from Venda V
inner join VendaProduto VP on V.Id = VP.IdVenda
inner join Produto P on P.Id = VP.IdProduto
left join Cliente C on C.Id = V.IdCliente
inner join VendaStatus VS on VS.Id = V.IdStatus
Where V.Dt > '2012-12-20'

-- SELECIONAR O ID, DT DAS VENDAS DOS CLIENTES DO SEXO MASCULINO QUE FORAM
REALIZADAS NO ANO DE 2012 -- ORDENADAS POR DATA DE VENDA (CRESCENTE).

Select V.Id, V.Dt


from Venda V
inner join Cliente C on C.Id = V.IdCliente
Where c.Sexo = 'M'
and V.dt between '2012-01-01' and '2012-12-31'
order by V.Dt asc

-- SELECIONE O NOME DOS CLIENTES QUE N�O COMPRARAM O PRODUTO MOUSE.

Select distinct C.Nome


from Venda V
inner join VendaProduto VP on V.Id = VP.IdVenda
inner join Produto P on P.Id = VP.IdProduto
left join Cliente C on C.Id = V.IdCliente
Where P.Descricao <> 'Mouse'

-- FA�A A INSTRU��O PARA INSERIR O SEGUINTE CLIENTE:


-- Nome = Zecas Mussarelas
-- Sexo = M
-- DtNascimento = 01/10/1967
-- Email = zecas@mussarelas.com.br

insert into Cliente (Nome, DtNascimento, Sexo, Email) values ('Zecas


Mussarelas','1967-10-01','M','zecas@mussarelas.com.br')

-- SELECIONAR O ID, DT DAS VENDAS DOS CLIENTES DE SEXO FEMININO ORDENADAS POR DATA
DE VENDA (DECRESCENTE).

Select V.Id, V.Dt


from Venda V
inner join Cliente C on C.Id = V.IdCliente
Where c.Sexo = 'F'
order by V.Dt desc

-- EXIBIR O RELAT�RIO DE VENDAS FINALIZADAS COM OS SEGUINTES CAMPOS:


---- ID VENDA, DESCRICAO DO STATUS DA VENDA, IDCLIENTE E NOME DO CLIENTE
---- IMP.: OS DADOS DO CLIENTE DA VENDA S� DEVEM SER EXIBIDOS SE A VENDA POSSUIR
CLIENTES
---------- ASSIM, SE A VENDA N�O POSSUIR CLIENTE, ELA DEVE SER EXIBIDA NO RELAT�RIO
COM OS CAMPOS DE CLIENTE COM VALOR NULO.

Select V.Id as IdVenda, VS.Descricao, C.Id as IdCliente, C.Nome


from Venda V
left join Cliente C on C.Id = V.IdCliente
inner join VendaStatus VS on VS.Id = V.IdStatus
where V.IdStatus = 2 --Vendas finalizadas

-- EXIBIR O NUMERO DE VENDAS QUE EST�O FINALIZADAS.


-- IMP.: PROCURAR PELA FUN��O COUNT.

Select COUNT(Id) as NumeroVendasFinalizadas


from Venda
where IdStatus = 2 --Vendas finalizadas

-- EXIBIR O NUMERO DE VENDAS QUE EST�O EM ABERTO.


-- IMP.: PROCURAR PELA FUN��O COUNT.

Select COUNT(Id) as NumeroVendasEmAberto


from Venda
where IdStatus = 1 --Vendas finalizadas

-- EXIBIR O NUMERO DE VENDAS QUE EST�O FINALIZADAS E EM ABERTO.


-- IMP.: PROCURAR PELA FUN��O COUNT E GROUP BY.

Select Count(1) as NumeroVendas, VS.Descricao


from Venda V
inner join VendaStatus VS on VS.Id = V.IdStatus
group by VS.Descricao

-- SELECIONE O ID, DESCRICAO E VRUNITARIO DOS PRODUTOS QUE FORAM VENDIDOS PARA
CLIENTES DO SEXO MASCULINO NO ANO DE 2013,
-- CONSIDERANDO SOMENTE VENDAS FINALIZADAS.

Select P.Id, P.Descricao, P.VrUnitario


from Venda V
inner join VendaProduto VP on V.Id = VP.IdVenda
inner join Produto P on P.Id = VP.IdProduto
inner join Cliente C on C.Id = V.IdCliente
Where V.dt between '2013-01-01' and '2013-12-31'
And C.Sexo = 'M'
And V.IdStatus = 2 --Vendas Finalizadas

-- SELECIONE O ID DA VENDA, O ID E DESCRICAO DOS PRODUTOS QUE FORAM VENDIDOS ACIMA


DO SEU VALOR DE TABELA, CONSIDERANDO SOMENTE
-- VENDAS FINALIZADAS.

Select V.Id, P.Id, P.Descricao


from Venda V
inner join VendaProduto VP on V.Id = VP.IdVenda
inner join Produto P on P.Id = VP.IdProduto
Where VP.Vr > P.VrUnitario
And V.IdStatus = 2 --Vendas Finalizadas

-- SELECIONE O ID, DESCRICAO DOS PRODUTOS QUE NAO FORAM INCLU�DOS EM VENDA ALGUMA.

Select P.Id, P.Descricao


from Venda V
inner join VendaProduto VP on V.Id = VP.IdVenda
right join Produto P on P.Id = VP.IdProduto
where V.Id is null
--ou
Select P.Id, P.Descricao
from VendaProduto VP
right join Produto P on P.Id = VP.IdProduto
where VP.Id is null

-- SELECIONE O NOME DOS CLIENTES QUE N�O COMPRARAM.

Select C.Nome, V.Id


from Cliente C
left join Venda V on C.Id = V.IdCliente
where V.Id is null
or V.IdStatus = 1

-- SELECIONE O ID DA VENDA, DESCRICAO, VR UNITARIO, QTDE DO PRODUTO E CALCULE PARA


CADA PRODUTO O VALOR TOTAL
-- CONSIDERANDO SOMENTE AS VENDAS FINALIZADAS PARA CLIENTES DO SEXO FEMININO.

Select V.Id, P.Descricao, VP.Qtde, VP.Vr,


(VP.Qtde * VP.Vr) as ValorTotal
from Venda V
inner join VendaProduto VP on V.Id = VP.IdVenda
inner join Produto P on P.Id = VP.IdProduto
inner join Cliente C on C.Id = V.IdCliente
Where C.Sexo = 'F'
And V.IdStatus = 2 --Vendas Finalizadas

-- SELECIONE O ID, NOME DO CLIENTE, DESCRI��O DO STATUS E O TOTAL DE TODAS VENDAS


FINALIZADAS.

Select C.Id, C.Nome, VS.Descricao, COUNT(1) TotalVendasFinalizadas


from Venda V
inner join Cliente C on C.Id = V.IdCliente
inner join VendaStatus VS on VS.Id = V.IdStatus
Where VS.Id = 2 --Vendas Finalizadas
Group by C.Id, C.Nome, VS.Descricao

-- SELECIONE O ID, DESCRICAO E VRUNITARIO DOS PRODUTOS E O ID DA VENDA DOS PRODUTOS


QUE FORAM VENDIDOS
-- ENTRE OS MESES 10 E 11 DE 2013, CONSIDERANDO SOMENTE VENDAS FINALIZADAS
Select P.Id, P.Descricao, P.VrUnitario
from Venda V
inner join VendaProduto VP on V.Id = VP.IdVenda
inner join Produto P on VP.IdProduto = P.Id
Where V.IdStatus = 2
and V.Dt between '2013-10-01' and '2013-11-30'

-- ALTERE A DATA DA(S) VENDA(S) DO CLIENTE 'Aroldo Rodrigues' PARA 01/01/2012.


Update V set V.Dt = '2012-01-01'
from Venda V
inner join Cliente C on C.Id = V.IdCliente
Where c.Nome = 'Aroldo Rodrigues'

-- SELECIONE O ID, DESCRICAO E VRUNITARIO DOS PRODUTOS QUE FORAM VENDIDOS PARA
CLIENTES DO SEXO FEMINIO.
Select P.Id, P.Descricao, P.VrUnitario
from Venda V
inner join VendaProduto VP on V.Id = VP.IdVenda
inner join Produto P on VP.IdProduto = P.Id
inner join Cliente C on V.IdCliente = C.Id
Where V.IdStatus = 2 -- Foram vendidos - vendas finalizadas
and C.Sexo = 'F'

You might also like