Sunteți pe pagina 1din 5

O.

Belo, DI, UM, 2003


Sistemas de Bases de Dados Relacionais
Introduo ao SQL

Interrogaes diversas sobre a Base de Dados Northwind


/*
Introduo ao SQL - Parte I
===========================
Folha de Exerccios
Resoluo dos exerccios em SQL Server 2000
*/


-- Indicao da base de dados de trabalho
use northwind


-- Utilizao do comando SELECT - Exemplos de aplicao.

-- Query 01: Quais so os produtos registados na base de dados?
-- Objectivo: Demonstrao de queries simples.
-- Seleco de todos os registos da tabela "products" com visualizao de todos
-- os valores correspondentes a todos (*) os atributos da tabela.
select *
from products


-- Query 02: Quais so os cdigos dos fornecedores dos produtos que temos registados
-- na base de dados? Apresentar alm dessa informaooscdigos e os nomes
-- dos produtos.
-- Objectivo: Demonstrao de queries simples com seleco de atributos.
-- Seleco de todos os registos da tabela "products", com visualizao apenas
-- dos valores correspondentes aos atributos "ProductID", "ProductName" e "SupplierID".
select ProductID, ProductName, SupplierID
from products


-- Query 03: Quais so os produtos catalogados que sofornecidospelo fornecedor com o
-- cdigo '1'?
-- Objectivo: Demonstrao de queries simples com critrios de filtragem.
-- Seleco de todos os registos da tabela "products" cujos valores do
-- atributo "SupplierID" sejam iguais a 1. Apenas so visualizados os valores
-- correspondentes aos atributos "ProductID", "ProductName" e "SupplierID" cujos
-- registos obedeam ao critrio de filtragem.
select ProductID, ProductName, supplierid
from products
where supplierid = 1


-- Query 04: Quais so os cdigos dos fornecedores que fornecem od produtos registados
-- na base de dados?
-- Objectivo: Demonstrao de queries simples com a eliminao de registos repetidos.
-- Seleco dos registos da tabela "products" apenas segundo o atributo "SupplierID".
-- Apenas so visualizados os valores correspondentes a esse atributo. Os valores
-- repetidos so eliminados (DISTINCT)
select distinct SupplierID
from products


-- Query 05: Quais so os nomes dos fornecedores que fornecem os produtos registados
-- na base de dados?
-- Objectivo: Demonstrao de queries simples com a utilizao de operaes de juno -
SQL (01)
O.Belo, DI, UM, 2003
-- produto cartesiano com critrio de filtragem.
-- Apenas so visualizados os nomes dos fornecedores. Eventuais valores repetidos so
-- eliminados.
select distinct suppliers.CompanyName
from products, suppliers
where products.supplierid = suppliers.supplierid


-- Query 06: Quais foram os cdigos dos produtos encomendados pelos clientes? Apresentar
-- alm dos cdigos dos produtos apresentar tambm os nmeros das encomendas e os
-- cdigos dos clientes.
-- Objectivo: Demonstrao de queries simples com a utilizao de operaes de
-- (equi-)juno.
select orders.orderid, orders.customerid, [order details].productid
from orders inner join [order details]
on orders.orderid = [order details].orderid


-- Query 07: Quais foram os produtos encomendados pelos clientes? Apresentar
-- alm dos cdigos dos produtos os seus nomes.
-- Objectivo: Demonstrao de queries simples com a utilizao de operaes de
-- (equi-)juno.
select distinct [order details].productid, [products].productname
from [order details] inner join products
on [order details].productid=products.productid


-- Query 08: Quais foram os produtos encomendados pelos clientes? Apresentar
-- alm dos cdigos dos produtos os seus nomes e os cdigos e nomes dos clientes
-- que encomendaram esses produtos.
-- Objectivo: Demonstrao de queries utilizando vrias operaes de (equi-)juno
-- encadeadas.
select orders.customerid, customers.companyname, [order details].productid,
[products].productname
from ((orders inner join [order details]
on orders.orderid= [order details].orderid)
inner join products on [order details].productid=products.productid)
inner join customers on orders.customerid=customers.customerid


-- Query 09: Quais so foram os produtos encomendados pelos clientes? Apresentar
-- juntamente com a lista de produtos os cdigos e os nomes dos clientes; a lista
-- dever estar ordenada por cdigo de cliente.
-- Objectivo: Demonstrao da utilizao de "alias" - sinnimos - em queries
-- envolvendo vrias operaes de juno.
select cl.customerid, cl.companyname, pr.productid, pr.productname
from ((orders as en inner join [order details] as od on en.orderid = od.orderid)
inner join products as pr on od.productid = pr.productid)
inner join customers as cl on en.customerid = cl.customerid
order by cl.customerid


-- Query 10: Quais so os clientes que tm umnmero de fax?
-- Objectivo: Demonstrao da manipulaode valores nulos em queries.
select companyname, fax
from customers
where fax is not null


-- Query 11: Quantos so os clientes registados na base de dados que no tm
-- um nmero de fax?
-- Objectivo: Demonstrao da utilizao de funes de agregao e manipulao de
-- valores nulos em queries simples.
select count(*) as "Nmero de Clientes sem FAX"
from customers
where fax is null


O.Belo, DI, UM, 2003
-- Query 12: Quantos produtos foram encomendados at hoje, qual a mdia dos
-- preos dos produtos encomendados, qual foi o maior e o menor preo de produto
-- encomendado, e qual foi o valor total dos produtos encomendados?
-- Objectivo: Demonstrao da utilizao de funes de agregao em queries.
select count(*) as "Nmero de Produtos Encomendados",
avg(unitprice) as "Mdia dos Produtos Encomendados",
max(unitprice) as "Maior Preo dos Produtos Encomendados",
min(unitprice) as "Menor Preo dos Produtos Encomendados",
sum(unitprice*quantity) as "Valor dos Produtos Encomendados"
from [order details]


-- Query 13: Apresentar uma lista com os cdigos e os nomes dos clientes, ordenada
-- alfabeticamente.
-- Objectivo: Demonstrao da utilizao de funes de ordenao.
select CustomerID, CompanyName
from customers
order by Companyname ASC


-- Query 14: Apresentar uma lista com o nome dos clientes, ordenada decrescentemente pelo
-- valor total das encomendas efectuadas pelos clientes da regio de Lisboa.
-- Objectivo: Demonstrao da utilizao de funes de agregao em queries envolvendo
-- vrias operaes de juno, ordenao de resultados e utilizao de instrues
-- de agrupamento.
select customers.companyname,
sum([order details].quantity * [order details].unitprice) as "Valor Total p/
Cliente"
from ((orders inner join [order details]
on orders.orderid = [order details].orderid)
inner join products on [order details].productid=products.productid)
inner join customers on orders.customerid=customers.customerid
where customers.city = 'Lisboa'
group by customers.companyname
order by sum([order details].quantity * [order details].unitprice) desc


-- Query 15: Apresentar a data actual.
-- Objectivo: Demonstrao da utilizao de algumas funes de manipulao de datas,
-- especficas do SQL2K.
select convert(varchar(11),getdate())


-- Query 16: Apresentar o ms actual.
-- Objectivo: Demonstrao da utilizao de algumas funes de manipulao de datas,
-- especficas do SQL2K.
select datepart(mm,getdate())


-- Query 17: Quais os cdigos dos clientes que fizeram encomendas durante o ms 3
-- (Maro)?
-- Objectivo: Demonstrao da utilizao de algumas funes de manipulao de datas,
-- especficas do SQL2K.
select distinct customerid
from orders
where datepart(mm,orderdate) = 3


-- Query 18: Qual foi o valor das encomendas anotadas em Julho de 1996?
-- Objectivo: Demonstrao da utilizao de algumas funes de manipulao de datas,
-- especficas do SQL2K, em queries envolvendo funes de agregao e de manipulao de
-- datas.
select sum([order details].quantity * [order details].unitprice) as "Valor Encomendas
Julho/1996"
from orders inner join [order details] on orders.orderid= [order details].orderid
where datepart(mm,orders.orderdate) = 7 and datepart(yyyy,orders.orderdate)= 1996


O.Belo, DI, UM, 2003
-- Query 19: Valor total das encomendas efectuadas em cada ms? Apresentar a lista
-- ordenada decrescentemente por valor total.
-- Objectivo: Demonstrao da utilizao de algumas funes de manipulao de datas,
-- especficas do SQL2K, em queries envolvendo funes de agregao e de manipulao de
-- datas, e instrues de agrupamento e de ordenao.
select datepart(mm,orders.orderdate) as "Ms", sum([order details].quantity * [order
details].unitprice) AS "Valor"
from orders inner join [order details] on orders.orderid= [order details].orderid
where datepart(yyyy,orders.orderdate)= 1996
group by datepart(mm,orders.orderdate)
order by sum([order details].quantity * [order details].unitprice) DESC



-- Utilizao do comando INSERT - Exemplos de aplicao.

-- Query 20: Inserir na tabela "Region" um novo registo em que os valores de RegionID e
-- RegionDescription sejam, respectivamente '88' e 'Braga'.
-- Objectivo: Demonstrao da operao de insero de registos. A ordem de apresentao
-- dos valores deve corresponder a ordem pela qual esto definidosna tabela.
insert into Region
values (88, 'Braga')


-- Query 21: Inserir na tabela "Region" um novo registo em que os valores de RegionID e
-- RegionDescription sejam, respectivamente '99' e 'Aveiro'.
-- Objectivo: Demonstrao da operao de insero de registos. Neste caso apresenta-se
-- a lista dos atributos para os quais se quer inserirvalores. Neste caso a ordem
-- de apresentao e o nmero de valores deve corresponder a ordem pela qual foram
-- apresentados os atributos e ao seu nmero.
insert into Region
(RegionDescription,RegionID)
values ('Aveiro', 99)


-- Query 22: Inserir na tabela "Region" todos os registos armazenados na tabela "Region2"
-- Objectivo: Demonstrao da operao de insero de registos com queries embebidos.
-- Os atributos seleccionados (e a sua ordem) sobre a tabela "Region2" devem ser
-- equivalentes aos da tabela "Region".
insert into Region
select *
from Region2



-- Utilizao do comando UPDATE - Exemplos de aplicao.

-- Query 23: Substituir todos os valores do atributo "RegionDescription", em todos os
-- registos nos quais este atributo tenha o valor de 'Aveiro' por 'Beira Litoral'.
-- Objectivo: Demonstrao da operao de actualizao de registos com a aplicao de
-- critrios de filtragem.
update Region
set RegionDescription = 'Beira Litoral'
where RegionDescription = 'Aveiro'




-- Utilizao do comando DELETE - Exemplos de aplicao.

-- Query 24: Remover da tabela "Region" todos os registos cujos valores do atributo
-- "RegionDescription" sejam iguais a 'Aveiro' ou a 'Braga'
-- Objectivo: Demonstrao da operao de remoo de registos com a aplicao de
-- critrios de filtragem.
delete Region
where RegionDescription = 'Aveiro' OR RegionDescription = 'Braga'


O.Belo, DI, UM, 2003
-- Query 25: Remover todos os registos da tabela "Region".
-- Objectivo: Demonstrao da operao de remoo de todos os registos de uma
-- tabela. Recomenda-se muito cuidado na utilizao deste comando.
delete Region


-- Fim da folha de exerccios de demonstrao.
-- O.Belo, DI, UM, 2003

S-ar putea să vă placă și