Você está na página 1de 5

SQL (01)

Sistemas de Bases de Dados Relacionais Introdução ao SQL

Interrogações diversas sobre a Base de Dados Northwind

/* Introdução ao SQL - Parte I =========================== Folha de Exercícios Resolução dos exercícios em SQL Server 2000 */

-- Indicação da base de dados de trabalho use northwind

-- Utilização do comando SELECT - Exemplos de aplicação.

-- Query 01: Quais são os produtos registados na base de dados? -- Objectivo: Demonstração de queries simples. -- Selecção de todos os registos da tabela "products" com visualização de todos -- os valores correspondentes a todos (*) os atributos da tabela. select * from products

-- Query 02: Quais são os códigos dos fornecedores dos produtos que temos registados

--

na base de dados? Apresentar além dessa informaçãooscódigos e os nomes

--

dos produtos.

-- Objectivo: Demonstração de queries simples com selecção de atributos. -- Selecção de todos os registos da tabela "products", com visualização apenas -- dos valores correspondentes aos atributos "ProductID", "ProductName" e "SupplierID". select ProductID, ProductName, SupplierID from products

-- Query 03: Quais são os produtos catalogados que sãofornecidospelo fornecedor com o

-- código '1'?

-- Objectivo: Demonstração de queries simples com critérios de filtragem. -- Selecção de todos os registos da tabela "products" cujos valores do -- atributo "SupplierID" sejam iguais a 1. Apenas são visualizados os valores -- correspondentes aos atributos "ProductID", "ProductName" e "SupplierID" cujos -- registos obedeçam ao critério de filtragem. select ProductID, ProductName, supplierid from products where supplierid = 1

-- Query 04: Quais são os códigos dos fornecedores que fornecem od produtos registados

-- na base de dados?

-- Objectivo: Demonstração de queries simples com a eliminação de registos repetidos. -- Selecção dos registos da tabela "products" apenas segundo o atributo "SupplierID". -- Apenas são visualizados os valores correspondentes a esse atributo. Os valores -- repetidos são eliminados (DISTINCT) select distinct SupplierID

from products

-- Query 05: Quais são os nomes dos fornecedores que fornecem os produtos registados

-- na base de dados?

-- Objectivo: Demonstração de queries simples com a utilização de operações de junção -

O.Belo, DI, UM, 2003

-- produto cartesiano com critério de filtragem. -- Apenas são visualizados os nomes dos fornecedores. Eventuais valores repetidos são -- eliminados. select distinct suppliers.CompanyName from products, suppliers where products.supplierid = suppliers.supplierid

-- Query 06: Quais foram os códigos dos produtos encomendados pelos clientes? Apresentar

--

além dos códigos dos produtos apresentar também os números das encomendas e os

--

códigos dos clientes.

-- Objectivo: Demonstração de queries simples com a utilização de operações de -- (equi-)junção. 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

-- além dos códigos dos produtos os seus nomes.

-- Objectivo: Demonstração de queries simples com a utilização de operações de -- (equi-)junção. 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

--

além dos códigos dos produtos os seus nomes e os códigos e nomes dos clientes

--

que encomendaram esses produtos.

-- Objectivo: Demonstração de queries utilizando várias operações de (equi-)junção -- 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 são foram os produtos encomendados pelos clientes? Apresentar -- juntamente com a lista de produtos os códigos e os nomes dos clientes; a lista -- deverá estar ordenada por código de cliente. -- Objectivo: Demonstração da utilização de "alias" - sinónimos - em queries -- envolvendo várias operações de junção. 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 são os clientes que têm umnúmero de fax? -- Objectivo: Demonstração da manipulaçãode valores nulos em queries. select companyname, fax from customers where fax is not null

-- Query 11: Quantos são os clientes registados na base de dados que não têm

-- um número de fax?

-- Objectivo: Demonstração da utilização de funções de agregação e manipulação de -- valores nulos em queries simples. select count(*) as "Número 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 média dos

-- preços dos produtos encomendados, qual foi o maior e o menor preço de produto

-- encomendado, e qual foi o valor total dos produtos encomendados? -- Objectivo: Demonstração da utilização de funções de agregação em queries. select count(*) as "Número de Produtos Encomendados", avg(unitprice) as "Média dos Produtos Encomendados", max(unitprice) as "Maior Preço dos Produtos Encomendados", min(unitprice) as "Menor Preço dos Produtos Encomendados", sum(unitprice*quantity) as "Valor dos Produtos Encomendados" from [order details]

-- Query 13: Apresentar uma lista com os códigos e os nomes dos clientes, ordenada -- alfabeticamente. -- Objectivo: Demonstração da utilização de funções de ordenação. 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 região de Lisboa.

-- Objectivo: Demonstração da utilização de funções de agregação em queries envolvendo -- várias operações de junção, ordenação de resultados e utilização de instruções -- 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: Demonstração da utilização de algumas funções de manipulação de datas, -- específicas do SQL2K. select convert(varchar(11),getdate())

-- Query 16: Apresentar o mês actual. -- Objectivo: Demonstração da utilização de algumas funções de manipulação de datas, -- específicas do SQL2K. select datepart(mm,getdate())

-- Query 17: Quais os códigos dos clientes que fizeram encomendas durante o mês 3 -- (Março)? -- Objectivo: Demonstração da utilização de algumas funções de manipulação de datas, -- específicas 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: Demonstração da utilização de algumas funções de manipulação de datas, -- específicas do SQL2K, em queries envolvendo funções de agregação e de manipulação 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 mês? Apresentar a lista

-- ordenada decrescentemente por valor total.

-- Objectivo: Demonstração da utilização de algumas funções de manipulação de datas, -- específicas do SQL2K, em queries envolvendo funções de agregação e de manipulação de -- datas, e instruções de agrupamento e de ordenação. select datepart(mm,orders.orderdate) as "Mês", 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

-- Utilização do comando INSERT - Exemplos de aplicação.

-- Query 20: Inserir na tabela "Region" um novo registo em que os valores de RegionID e

-- RegionDescription sejam, respectivamente '88' e 'Braga'.

-- Objectivo: Demonstração da operação de inserção de registos. A ordem de apresentação

-- dos valores deve corresponder a ordem pela qual estão 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: Demonstração da operação de inserção de registos. Neste caso apresenta-se

--

a lista dos atributos para os quais se quer inserirvalores. Neste caso a ordem

--

de apresentação e o número de valores deve corresponder a ordem pela qual foram

-- apresentados os atributos e ao seu número. insert into Region (RegionDescription,RegionID) values ('Aveiro', 99)

-- Query 22: Inserir na tabela "Region" todos os registos armazenados na tabela "Region2" -- Objectivo: Demonstração da operação de inserção 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

-- Utilização do comando UPDATE - Exemplos de aplicação.

-- 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: Demonstração da operação de actualização de registos com a aplicação de -- critérios de filtragem. update Region set RegionDescription = 'Beira Litoral' where RegionDescription = 'Aveiro'

-- Utilização do comando DELETE - Exemplos de aplicação.

-- Query 24: Remover da tabela "Region" todos os registos cujos valores do atributo

-- "RegionDescription" sejam iguais a 'Aveiro' ou a 'Braga'

-- Objectivo: Demonstração da operação de remoção de registos com a aplicação de -- critérios 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: Demonstração da operação de remoção de todos os registos de uma

-- tabela. Recomenda-se muito cuidado na utilização deste comando. delete Region

-- Fim da folha de exercícios de demonstração. -- O.Belo, DI, UM, 2003

O.Belo, DI, UM, 2003