Escolar Documentos
Profissional Documentos
Cultura Documentos
1. INTRODUÇÃO
2. PADRONIZAÇÃO
1
3. OPERADORES
4. FUNÇÕES
Exercícios:
As PEÇAS são identificadas por um número, sendo utilizada a cor das gavetas
onde estão colocadas as peças para uma localização visual mais rápida por
parte dos funcionários. Para a especificação das compras são necessários, o
nome e o preço atual de cada peça.
2
Para a emissão correta das notas de compra e dos pagamentos é necessário o
nome dos FORNECEDORES bem como a cidade e um número de
identificação. A categoria de cada fornecedor é utilizada para indicar a
qualidade de seus produtos e serviços.
Criação de tabelas
3
CREATE TABLE Fornecimento (PeNro number(5) not null,
FNro number(3) not null,
PNro number(5) not null,
Quant number(3),
constraint chavefornecimento primary key(PeNro, FNro,
PNro),
constraint estrangeirapeca foreign key(PeNro) references
Peca,
constraint estrangeirafornecedor foreign key(FNro)
references Fornecedor,
constraint estrangeiraprojeto foreign key(PNro) references
Projeto);
Peca
PeNro PeNome PePreco PeCor
1 Cinto R$22,00 Azul
2 Volante R$18,00 Vermelho
3 Lanterna R$14,00 Preto
4 Limpador R$9,00 Amarelo
5 Painel R$43,00 Vermelho
6 Calota R$70,00 Preto
7 Pára-choque R$50,00 Cinza
Fornecedor
FNro FNome FCidade FCateg
1 Plastec Campinas B
2 CM São Paulo D
3 Kirurgic Campinas A
4 Piloto Piracicaba A
5 Equipament São Paulo C
6 CA Rio de Janeiro A
4
Insert into fornecedor values (1,'Plastec', 'Campinas', 'B');
Insert into fornecedor values (2,'CM', 'São Paulo', 'D');
Insert into fornecedor values (3,'Kirurgic', 'Campinas', 'A');
Insert into fornecedor values (4,'Piloto', 'Piracicaba', 'A');
Insert into fornecedor values (5,'Equipament', 'São Paulo', 'C');
Insert into fornecedor values (6,'CA', 'Rio de Janeiro', 'A');
Projeto
PNro PNome PDuracao PCusto
1 Detroit 5 R$43.000,00
2 Pegasus 3 R$37.000,00
3 Alfa 2 R$26.700,00
4 Sea 3 R$21.200,00
5 Paraíso 1 R$17.000,00
Fornecimento
PeNro FNro PNro Quant
1 5 4 5
2 2 2 1
2 2 3 1
3 3 4 2
4 3 5 2
4 4 5 3
5 1 1 1
5
A) Exercícios:
2) Utilize o Erwin para criar o banco no Oracle e em seguida inclua registros
nas tabelas utilizando o SQL Plus.
PeNome
Cinto
Volante
Lanterna
Limpador
Painel
Calota
Para-choque
Obs: O uso de DISTINCT é para que não haja repetição de linhas no resultado
da consulta, ou seja, se colocarmos mais campos após o PeNro, poderemos ter
repetição do PeNro, mas, sempre outro campo da lista SELECT terá um valor
diferente.
Retornárá um número maior de linhas, pois agora ele só não poderá repitir
uma mesma peça para um mesmo fornecedor.
6
3) Obtenha o nome e o número de todos os fornecedores da cidade de
‘Campinas’
FNome FNro
Plastec 1
Kirurgic 3
4) Obtenha o nome e a duração aproximada em dias de cada projeto
PNome DuracaoDias
Detroit 150
Pegasus 90
Alfa 60
Sea 90
Paraíso 30
SELECT PNome
FROM Projeto
WHERE PCusto < 28000;
PNome
Alfa
Sea
Paraíso
7
6) (Operador Lógico) Obtenha os nomes das peças de cor vermelha e com
preço maior que R$ 25
SELECT PeNome
FROM Peca
WHERE lower(PeCor) = 'vermelho' AND PePreco > 25;
PeNome
Painel
SELECT PeNome
FROM Peca
WHERE (PePreco > 15 AND lower(PeCor) = 'vermelho')
ORDER BY PePreco DESC;
PeNome PePreco
Painel 43
Volante 18
SELECT PeNome
FROM Peca
WHERE (lower(PeCor) = 'vermelho' OR lower(PeCor)='amarelo') AND
PePreco In (9,18,22,40,90)
ORDER BY PePreco;
PeNome
Limpador
Volante
9) (NOT IN) Obtenha o nome das peças cujo preço não seja $ 9,00, $ 14,00 ou
$ 60,00.
8
SELECT PeNome
FROM Peca
WHERE PePreco NOT IN (9,14,60);
PeNome
Cinto
Volante
Painel
Calota
Para-choque
10) (LIKE) Obtenha o nome dos fornecedores residentes em cidades
iniciadas com a letra S
SELECT FNome
FROM Fornecedor
WHERE FCidade LIKE ‘S%’; Obs: utiliza-se * no lugar de % em alguns
outros SGBD’s.
FNome
C&M
Equipament
SELECT PNome
FROM Projeto
WHERE PCusto BETWEEN 20000 AND 30000;
PNome
Alfa
Sea
9
WHERE Fornecedor.FNro = Fornecimento.FNro AND Fornecimento.PNro =
5;
Fnro FNome
F3 Kirurgic
F4 Piloto's
SELECT Peca.PeNome
FROM Peca, Fornecimento
WHERE Fornecimento.Pnro = 4 AND Fornecimento.PeNro = Peca.PeNro;
PeNome
Cinto
Lanterna
SELECT PeNome
FROM Peca
WHERE PeNro In (
SELECT Fornecimento.PeNro
10
FROM Fornecimento
WHERE Fornecimento.PNro = 5);
PeNome
Limpador
SELECT Peca.PeNome
FROM Peca
WHERE Peca.PeNro IN (
SELECT Fornecimento.PeNro
FROM Fornecimento
WHERE Fornecimento.FNro = 4)
AND Peca.PeNro IN (
SELECT
Fornecimento.PeNro
FROM Fornecimento
WHERE
Fornecimento.FNro = 3);
PeNome
Limpador
Obs: Sempre que possível, evite o uso de subconsultas, pois esta estratégia é
lenta quando comparada com consultas realizadas por meio de joins, seja na
cláusula FROM ou WHERE.
SELECT Peca.PeNome
FROM Peca
WHERE Peca.PeNro IN (
SELECT Fornecimento.PeNro
11
FROM Fornecimento
WHERE Fornecimento.PNro IN(
SELECT PNro
FROM Projeto
WHERE
PDuracao > 3));
PeNome
Painel
17) (ANY) Obtenha o nome das peças fornecidas por algum fornecedor de
Piracicaba
SELECT Peca.PeNome
FROM Peca PeNome
WHERE Peca.PeNro IN ( Limpador
SELECT Fornecimento.PeNro
FROM Fornecimento
WHERE Fornecimento.FNro =ANY(
SELECT FNro
FROM Fornecedor
WHERE lower(Fcidade) =
'piracicaba'));
SELECT Peca.PeNome
FROM Peca
WHERE Peca.PeNro IN (SELECT Fornecimento.PeNro
FROM Fornecimento
WHERE Fornecimento.FNro <> ALL (
SELECT FNro
FROM Fornecedor
WHERE Fcateg = 'A'));
PeNome
Cinto
Volante
Painel
12
19) (EXISTS) Obtenha os nomes dos fornecedores que fornecem a peça 2.
ou
SELECT FNome
FROM Fornecedor
WHERE EXISTS (
SELECT *
FROM Fornecimento
WHERE (Fornecimento.FNro = Fornecedor.FNro
AND Fornecimento.PeNro = 2));
FNome
CM
PeNro SomaDeQuant
1 5
2 2
3 2
4 5
5 1
21) (HAVING) Obtenha os códigos das peças que são utilizadas em uma
quantidade inferior a 5 unidades na somatória de todos os projetos
13
SELECT PeNro, SUM(Quant) PeNro Expr1001
FROM Fornecimento 2 2
GROUP BYPeNro 3 2
HAVING SUM(QUANT) < 5; 5 1
22) (UNION) Obtenha os códigos das peças com preço menor que R$ 20 ou
que possuem a cor vermelha
SELECT PeNro
FROM Peca PeNro
WHERE PePreco < 20 2
UNION 3
SELECT PeNro 4
FROM Peca 5
WHERE PeCor = 'Vermelho';
SELECT PeNro
FROM Peca
WHERE PePreco < 20
INTERSECT
SELECT PeNro
FROM Peca
WHERE PeCor = 'Vermelho';
SELECT PeNro
FROM Peca
WHERE PePreco < 20
MINUS
SELECT PeNro
FROM Peca
WHERE PeCor = 'Vermelho';
SELECT PeNro
FROM Peca
WHERE PeCor = 'Vermelho'
MINUS
SELECT PeNro
FROM Peca
WHERE PePreco < 20
14
23) (VARIÁVEIS) Obtenha o código dos fornecedores concorrentes entre si
24) Obtenha o nome das peças fornecidas que tenham o preço maior que R$
20
25) Obtenha o nome das peças fornecidas que não são vermelhas e as suas
cores.
PeNome PeCor
SELECT DISTINCT Peca.PeNome, Peca.PeCor Cinto Azul
FROM Peca, Fornecimento
Lanterna Preto
WHERE (Peca.PeCor <> 'Vermelho') Limpador Amarelo
AND (Peca.PeNro = Fornecimento.PeNro);
SELECT *
FROM Peca INNER JOIN Fornecimento USING(PeNro);
SELECT *
FROM Peca RIGHT JOIN Fornecimento ON Peca.PeNro =
Fornecimento.PeNro;
15
SELECT *
FROM Peca LEFT JOIN Fornecimento ON Peca.PeNro =
Fornecimento.PeNro;
Exercícios complementares:
16
SQL ORACLE Parte 1 ?
Login : SYSTEM
Senha: MANAGER
Para ver os campos e seus respectivos tipos em uma tabela: Desc nome_tabela;
Exemplo:
Inserir uma tupla na tabela cliente:
insert into cliente (cpf, nome, idade, est_civ)
values (‘12345678901’, ‘Ademir’, 34, ‘casado’);
Obs: a ordem dos valores colocada na cláusula values deve ser igual a ordem dos
campos.
Supondo que se quisesse inserir o cliente apenas com número de cpf e nome, pode-
se então omitir os outros campos, desde que os campos omitidos possam receber
valores nulos:
insert into cliente (cpf, nome)
values (‘12345678901’, ‘Ademir’);
Também é possível fazer a inclusão sem utilizar os nomes dos campos, mas isso só é
possível quando se sabe a ordem que os campos estão na tabela no banco:
insert into cliente values (‘12345678901’, ‘Ademir’, 34, ‘casado’);
17
Uma observação do caso acima é que, uma vez que não definido em quais campos
da tabela serão inseridos valores, é preciso colocar valores para todos os campos que
existem na tabela do banco, mesmo que sejam valores nulos:
insert into cliente values (‘12345678901’, ‘Ademir’, null, null);
Para inserir uma tupla na tabela cli_fone, é necessário que o número de telefone
informado exista na tabela telefone e o número de cpf exista na tabela cliente devido
às restrições de integridade dos relacionamentos:
insert into cli_fone (cpf, numero) values (‘12345678901’, 01423451234);
Exemplo:
Delete from cliente
Where cpf = ‘12345678901’; // exclui apenas o cliente de número de cpf 12345678901.
ou
Exemplo:
Update cliente set idade = 15
Where cpf = ‘12345678901’;
ou
18
Recuperação (seleção) de dados
Seleção em uma tabela:
ou
Exemplo:
Select nome, idade
From Clientes
Where est_civ = ‘Solteiro’; // recupera o nome e a idade de cada cliente solteiro.
19