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