Comandos sql.docx

24
script para a criação da base de dados drop table fornecedor; create table fornecedor (n_for number(5) not null primary key , nome varchar2(15) not null , endereço varchar2(30) not null, cpf varchar2(14) not null , estrelas varchar2(1) not null , dt_atualiza date not null, vendas number(11,2) not null , comissoes number(11,2) not null, lucro number(11,2) not null); insert into fornecedor values (10,'renata', ‘rua dos gusmões’,'052.433.545-82','3','10-04- 2001',300.00,80.00,10.00); insert into fornecedor values (20,'paulo',’rua b’,'556.747.639- 68','5','14-03-2001',800.00,90.00,20.00); insert into fornecedor values (30,'ana',’rua diamantina’,'078.876.420-90','1','10-01- 2001’,1000.00,95.00,30.00); drop table conta; create table conta (n_contanumber(5) not null primary key , n_for number(5) not null , tipo varchar(1) not null , bloqueada varchar2(1) not null , saldo number(12,2) not null , dt_ult_limp date , dt_ult_lanc date not null, constraint fornec_fk foreign key (n_for) references fornecedor(n_for)); insert into conta values (1,20,'c','n',240000,'01-04-2001','22- 04-2001'); insert into conta values (2,20,'p','n',210000,'01-03-2001','01- 04-2001'); insert into conta values (3,10,'c','n',89000,'01-04-2001','20- 04-2001'); insert into conta values (4,30,'c','n',11300,'01-04-2001','21- 04-2001'); insert into conta values (5,30,'c','n',2500,'15- 03-2001','15-03-2001'); drop table lanc; create table lanc (dt_lanc date not null , n_conta number(5) not null , n_lanc number(5) not null primary key ,

Transcript of Comandos sql.docx

script para a criao da base de dadosdrop table fornecedor;create table fornecedor(n_for number(5) not null primary key ,nome varchar2(15) not null ,endereo varchar2(30) not null,cpf varchar2(14) not null ,estrelas varchar2(1) not null ,dt_atualiza date not null,vendas number(11,2) not null ,comissoes number(11,2) not null,lucro number(11,2) not null);insert into fornecedor values (10,'renata', rua dos gusmes,'052.433.545-82','3','10-04-2001',300.00,80.00,10.00);insert into fornecedor values (20,'paulo',rua b,'556.747.639-68','5','14-03-2001',800.00,90.00,20.00);insert into fornecedor values (30,'ana',rua diamantina,'078.876.420-90','1','10-01-2001,1000.00,95.00,30.00);drop table conta;create table conta(n_contanumber(5) not null primary key ,n_for number(5) not null ,tipo varchar(1) not null ,bloqueada varchar2(1) not null ,saldo number(12,2) not null ,dt_ult_limp date ,dt_ult_lanc date not null,constraint fornec_fk foreign key (n_for) references fornecedor(n_for));insert into conta values (1,20,'c','n',240000,'01-04-2001','22-04-2001');insert into conta values (2,20,'p','n',210000,'01-03-2001','01-04-2001');insert into conta values (3,10,'c','n',89000,'01-04-2001','20-04-2001');insert into conta values (4,30,'c','n',11300,'01-04-2001','21-04-2001');insert into conta values (5,30,'c','n',2500,'15-03-2001','15-03-2001');drop table lanc;create table lanc(dt_lanc date not null ,n_conta number(5) not null ,n_lanc number(5) not null primary key ,valor number(12,2) not null ,historico varchar2(30),constraint conta_fk foreign key (n_conta) references conta (n_conta));insert into lanc values ('01-03-2001',2,106,2000000,'deposito inicial');insert into lanc values ('15-03-2001',5,107,32500,'carto de crdito');insert into lanc values ('01-04-2001',1,108,-100000,'saque');insert into lanc values ('01-04-2001',2,109,100000,'deposito');insert into lanc values ('20-04-2001',3,110,80000,'deposito');insert into lanc values ('21-04-2001',4,111,-8700,'conta de telefone');insert into lanc values ('21-04-2001',1,112,-5000,'saque p/ transferncia');insert into lanc values ('21-04-2001',4,113,5000,'deposito de transferncia');insert into lanc values ('22-04-2001',1,114,35000,'deposito');drop table a_fazer;create table a_fazer(feito varchar2(1),data date not null ,observ varchar2(60) not null);insert into a_fazer values ('s','14-03-2001','avisar ana: carto de credito = 32500');insert into a_fazer values ('s','01-04-2001','enviar extrato da poupana 2 para renata');insert into a_fazer values ('s','14-04-2001','enviar conta de telefone para ana');drop table erro;create table erro(data date not null ,descricao varchar2(60));insert into erro values ('01-04-2001','saque de 12000 de conta 5 no realizado por falta de fundos');drop table cliente;create table cliente(nome varchar2(15),endereo varchar2(30),estado varchar2(02),cep varchar2(08),vendas number(11,2),codigo number(05),primary key (codigo),data_nasc date,parcelas number(05),status varchar2(01),valor_nota number(11,2),emissao_nota date);drop table titulo;create table titulo(codigo number(05) not null,foreign key (codigo) references cliente (codigo),num_titulo number(05) not null,primary key (num_titulo),valor_titulo number(11,2) not null,valor_juros number(11,2) not null,valor_desconto number(11,2) not null,valor_pago number(11,2) not null,data_emisso date,data_vencto date,data_pagto date);insert into clientevalues(maria, rua dos trilhos,sp,03040010, 7500.00,00020,10-10-58 ,5,a,2000.00, 29-09-05);insert into clientevalues(antonio,rua matilde,sp,07050001,5000.00,00010,08-08-60,8,a,3000.00, 01-10-05 );insert into clientevalues(itamar, av. emilio ribas,sp,07050001, 6000.00,00030,01-01-80,10,i,1000.00,01-04-05 );

exerccios de pl-sql com variveis1. alterar o valor de uma varivel, mostrando-a em seguida.- criar um bloco pl-sql para calcular o valor do novo salrio mnimo que dever ser de 25% em cimado atual, que de r$ 240.00, no qual este valor dever ser constante dentro do bloco, informandoem seguida..2. fazer clculos usando variveis, mostrando-a em seguida.- criar um bloco pl-sql para calcular o valor em reais de 45 dlares, sendo que o valor do cmbio aser considerado de 2,98, no qual estes valores devero ser constantes dentro do bloco.3. alterar o valor de uma varivel, sendo que a mesma dever ser informada em tempode execuo- criar um bloco pl-sql para calcular o valor do novo salrio mnimo que dever ser 25% em cima doatual, no qual o salrio dever ser informado em tempo de execuo.4. fazer clculo usando variveis, sendo que a mesma dever ser informada em tempode execuo- criar um bloco pl-sql para converter em reais os dlares informados, sendo que o valor do cmbioa ser considerado de 2,98, no qual o valor dos dlares devero ser informados em tempo deexecuo.5. fazer clculo das parcelas da compra de um carro clculando juros- criar um bloco pl-sql para calcular o valor das parcelas de uma compra de um carro, nasseguintes condies:observao:1 - parcelas para aquisio em 10 pagamentos.2 - o valor da compra dever ser informado em tempo de execuo.3 o valor total dos juros de 3% e dever ser aplicado sobre o montante financiado4 no final informar o valor de cada parcela6. fazer clculo das parcelas da compra de um carro com vrias condies de pagamento criar um bloco pl-sql para calcular o valor de cada parcela de uma compra de um carro, nasseguintes condies: (2.0).- parcelas para aquisio em 6 pagamentos.- parcelas para aquisio em 12 pagamentos.- parcelas para aquisio em 18 pagamentos.observao:1 - o valor da compra dever ser informado em tempo de execuo.2 dever ser dada uma entrada de 20% do valor da compra.3 dever ser aplicada uma taxa juros, no saldo restante, nas seguintes condies:a pagamento em 6 parcelas: 10%.b pagamento em 12 parcelas: 15%.c pagamento em 18 parcelas: 20%.4 no final informar o valor das parcelas para as 3 formas de pagamento, com o valor deaquisio de 10.0007. inserir dados em uma tabela, informando o valor em variveis- criar um bloco pl-sql para adicionar na tabela fornecedor as seguintes informaes:: nmero do fornecedor.: nome do fornecedor.: endereo do fornecedor.: cpf do fornecedor.: estrelas do fornecedor.: data de atualizao = dever ser sysdate.: vendas do fornecedor.: comisses do fornecedor.8. alterar dados em tabelas, com valor informado constante- criar um bloco pl-sql para aumentar o valor das vendas em r$ 3000,00 de todos os fornecedoresque tenham mais que 3 estrelas, sendo que o valor de r$ 3000 dever ser informado em tempo deexecuo.9. deletar dados em tabelas, com o valor a ser deletado informado- criar um bloco pl-sql para deletar da tabela fornecedores o fornecedor de numero 30, no qual onumero do fornecedor dever ser informado em tempo de execuo.10. acessar na tabela fornecedor o endereo e as vendas, sendo que o valor dofornecedor dever ser constante- criar um bloco pl-sql para acessar, na tabela fornecedores, o endereo e as vendas do fornecedorcujo nmero dever ser informado na tela, mostrando em seguida o nmero do fornecedor, oendereo e as vendas.11. acessar tabela fornecedor, cujo cdigo dever ser informado na tela e alterar o valorda comisso, nas condies abaixo.- criar um bloco pl-sql para acessar, na tabela fornecedores, o fornecedor informado na tela.caso no encontre dar a mensagem fornecedor no informado.caso encontre dever fazer a seguinte atualizao na comisso.se as vendas forem maiores que 6000a comisso dever ser 15% do valor das vendascaso contrrioa comisso dever ser de 5% do valor das vendasno final dar uma mensagem do valor calculado da comisso.12. acessar tabela conta e inserir na tabela a fazer.- criar um bloco pl-sql para recuperar o numero da conta com saldo inferior a 1000 em umavarivel e inserir na tabela a-fazer uma tarefa pedindo para enviar uma correspondncia paraaquela conta.13. inserir dados na tabela lanamentos, usando a opo de loop com um nmero fixo devezes.- criar um bloco pl/sql para inserir na tabela de lanamentos, lanamentos de deposito de r$100,00, partindo do lanamento 150 at o lanamento 160, para a conta 4, data de lanamentosysdate, e histrico deposito em conta corrente.obs: usar opo loop com um nmero fixo de 10 vezes e informar totais de lanamento.14. inserir contas na tabela contas- criar um bloco pl/sql para inserir contas na tabela contas, de acordo com as condiles abaixo:- acessar o fornecedor 30- se as vendas forem menor que 500- inserir as contas 6 a 10 com:. tipo = b. bloqueada = n. saldo inicial de 50,00 e ir aumentando de 10,00 em 10,00. dt_ult_limp e lanc = sysdate- se as vendas forem maior ou igual a 500- inserir as contas 11 a 15 com:. tipo = c. bloqueada = n. saldo inicial de 100,00 e ir aumentando de 20,00 em 20,00. dt_ult_limp e lanc = sysdate- no final atualizar a dt_atualiza do fornecedor para sysdate e informar que o processo foi ok.15. seleo de fornecedor tratando o codigo e mensagem de erro- criar uma pl/sql para selecionar da tabela fornecedor o fornecedor informado na tela, caso noencontre dever informar o cdigo e menagem de erro fornecido pelo oracle (sqlcode e sqlmerrm)16. seleo de fornecedor usando a opo raise- criar uma pl/sql para selecionar da tabela fornecedor o fornecedor informado na tela, caso noencontre dever dar uma mensagem de erro utilizando a opo raise17. seleo de fornecedor usando a opo raise_aplication_errorcriar uma pl/sql para selecionar da tabela fornecedor o fornecedor informado na tela, caso noencontre dever dar uma mensagem de erro utilizando a opo raise_aplication_error18. criao de ttulos com base nas notas emitidas dos clientes- criar uma pl-sql para incluir ttulos na tabela ttulos para todos os clientes ativos da tabela cliente,com as seguintes condies:. codigo = codigo do cliente. numero do titulo = sequencial a partr de 1, para cada cliente selecionado.. valor do titulo = valor da compra dividido pelo nmero de parcelas. valor dos juros = 0. valor dos descontos = 0. valor pago = 0. data de emisso = emisso da nota fiscal do cliente. data de vencto = dever ser de 30 em 30 dias a partir da emisso , para cada ttulo. data de pagamento = nulo

Sub-consultas SQLUma sub-consulta uma instruo SELECT aninhada dentro de outra instruo SELECT, INSERT, DELETE ou UPDATE. Veja abaixo alguns exemplos de sintaxe: Comparao [ANY|SOME|ALL] (instruo sql) Expresso [NOT] IN (instruo sql) Expresso [NOT] EXISTS (instruo sql)Os predicados ANY e SOME, sinnimos, so utilizados para recuperar registro na consulta principal que satisfaam a comparao com qualquer registro da sub-consulta.Tabela AXY

15

29

310

46

Tabela BXY10 4 20 3 30 11 40 9Exemplo:Listagem 11:Exemplo de subconsulta12SELECT * FROM AWHERE Y > ANY (SELECT Y FROM B WHERE X>20)

Resultado:XY

310

Os registros da tabela A que forem maior do que qualquer registro do resultado da sub-consulta sero selecionados. Repare que nenhum registro da tabela A maior do que 11, no entanto, o terceiro registro maior do que 9.Vamos a outro exemplo:Listagem 12:Exemplo de subconsulta com o operador ANY1SELECT * FROM A WHERE Y > ANY (SELECT Y FROM B WHERE X < 40)

Resultado:XY

15

29

310

46

Todos os registros foram selecionados porque o valor de y no resultado da sub-consulta assume 3, que menor do que todos os valores de y da tabela A. Se utilizarmos o ANY com sinal de igualdade teremos o mesmo resultado da clusula IN. Exemplo:Listagem 13:Exemplo com o operador ANY e sinal de igualdade1SELECT * FROM A WHERE Y = ANY (SELECT Y FROM B)

Resultado:XY

29

Listagem 17:Outro exemplo de select com operador ANY1SELECT * FROM A WHERE Y > ALL (SELECT Y FROM B WHERE X > 30)

Resultado:XY

310

O uso de != ALL equivale a NOT IN.Listagem 18:Subconsulta com operador ALL1SELECT * FROM A WHERE Y != ALL (SELECT Y FROM B)

Resultado:XY

15

310

46

O predicado IN utilizado para recuperar apenas os registros na consulta principal que contm equivalncia na sub-consulta. o mesmo que =ANY.Listagem 19:Consulta com operador IN1SELECT * FROM A WHERE Y IN(SELECT Y FROM B)

Resultado:XY

29

No cdigo a seguir retornamos os empregados que venderam um montante maior que R$ 50.000,00.Listagem 20:Select com operador IN utilizando HAVING1234SELECT * FROM EMPREGADO WHERE CODIGO IN(SELECT CODEMPREGADO FROM VENDASGROUPY BY CODEMPREGADOHAVING MAX(VALORTOTAL) > 50000)

De maneira contrria, NOT IN pode ser utilizado para recuperar apenas os registros na consulta principal para os quais no exista equivalncia na sub-consulta.Listagem 21:Select com operador NOT IN1SELECT * FROM A WHERE Y NOT IN(SELECT Y FROM B)

Resultado:XY

15

310

46

O predicado EXISTS determina se a sub-consulta retorna algum registro. Esta clusula produz resultados semelhantes ao uso de IN. Veja exemplo:Listagem 22:Consulta com operador EXISTS12345SELECT * FROM EMPREGADO WHERE EXISTS(SELECT * FROM PEDIDOSWHERE EMPREGADO.CODIGO = PEDIDOS.CODEMPREGADOGROUP BY PEDIDOS.CODEMPREGADOHAVING MAX(PEDIDOS.VALOR_TOTAL) > 50000)

Neste comando so retornados o nome e o departamento dos funcionrios cuja soma de vendas ultrapassaram R$ 50.000,00.O predicado NOT EXISTS tambm pode ser utilizado produzindo o efeito contrrio:Listagem 23:Consulta com operador NOT EXISTS123SELECT * FROM EMPREGADO WHERE NOT EXISTS(SELECT * FROM PEDIDOSWHERE EMPREGADO.CODIGO = PEDIDOS.EMPREGADO)

Sintaxe do comando SELECT

SELECT [DISTINCT] {*, coluna [pseudnimo], ... }FROM tabelaWHERE condio(es)GROUP BY coluna(s)HAVING condio(es)ORDER BY {coluna, expr} [ASC|DESC];

SELECT- selecciona pelo menos uma coluna. A sua ordem de execuo segue a sequncias das clusulas apresentadas acima; Pseudnimo- usado como nome alternativo em colunas do select; *- designa todas as colunas; DISTINCT- utilizado para eliminar linhas duplicadas (se as houver); FROM tabela- designa a tabela de onde provm as colunas; WHERE condio- limita a consulta s linhas que satisfazem a condio; GROUP BY- recebe as linhas seleccionadas anteriormente (com ou sem WHERE) e agrupa por coluna. Se forem indicadas vrias colunas usa a segunda para desempatar a primeira (faz quebra); HAVING- s utilizada quando h GROUP BY. Permite excluir grupos formados por GROUP BY ORDER BY- recebe as linhas seleccionadas anteriormente e ordena por uma ou mais colunas. Sempre a ultima clusula; ASC- ordem crescente de ordenao; a opo por omisso; DESC- ordem decrescente de ordenao;

drop table cliente cascade constraint;drop table titulo cascade constraint;drop table locacao cascade constraint;create table cliente(cd_clientenumber primary key,nm_clientevarchar2(30),enderecovarchar2(100),telefonenumber(8));

insert into cliente values (1,'ClienteA','Endereo ClienteA',11111111);insert into cliente values (2,'ClienteB','Endereo ClienteB',11112222);insert into cliente values (3,'ClienteC','Endereo ClienteC',11113333);insert into cliente values (4,'ClienteD','Endereo ClienteD',11114444);insert into cliente values (5,'ClienteE','Endereo ClienteE',11115555);insert into cliente values (6,'ClienteF','Endereo ClienteF',11116666);create table titulo(cd_titulonumber primary key,nm_titulovarchar2(100),valor_locacaonumber(15,2),sinopsevarchar2(500));insert into titulo values (1,'TituloA',10,'SinopseA - blablablablablabla');insert into titulo values (2,'TituloB',15,'SinopseB - blablablablablabla');insert into titulo values (3,'TituloC',15,'SinopseC - blablablablablabla');insert into titulo values (4,'TituloD',10,'SinopseD - blablablablablabla');insert into titulo values (5,'TituloE',10,'SinopseE - blablablablablabla');insert into titulo values (6,'TituloF',15,'SinopseF - blablablablablabla');insert into titulo values (7,'TituloG',10,'SinopseG - blablablablablabla');insert into titulo values (8,'TituloH',5,'SinopseH - blablablablablabla');insert into titulo values (9,'TituloI',5,'SinopseI - blablablablablabla');insert into titulo values (10,'TituloJ',10,'SinopseJ - blablablablablabla');create table locacao(cd_titulo number,cd_clientenumber,dt_saidadate,dt_devolucaodate);alter table locacao add constraint loc_tit_fk foreign key (cd_titulo) references titulo(cd_titulo);alter table locacao add constraint loc_cli_fk foreign key (cd_cliente) references cliente(cd_cliente);insert into locacao values (1, 1, '09/10/2010','10/10/2010');insert into locacao values (1, 2, '08/11/2009','09/11/2009');insert into locacao values (1, 3, '09/03/2009','10/03/2009');insert into locacao values (1, 4, '08/04/2010','09/04/2010');insert into locacao values (2, 5, '09/07/2010','10/07/2010');insert into locacao values (3, 1, '10/06/2010','11/06/2010');insert into locacao values (4, 2, '20/09/2010','21/09/2010');insert into locacao values (5, 3, '30/05/2010','01/05/2010');insert into locacao values (6, 4, '10/02/2009','11/02/2009');insert into locacao values (7, 5, '20/02/2009','21/02/2009');insert into locacao values (8, 1, '28/02/2009','01/02/2009');insert into locacao values (9, 1, '10/02/2009','11/02/2009');insert into locacao values (8, 2, '11/02/2009','12/02/2009');insert into locacao values (9, 2, '15/11/2009','16/11/2009');insert into locacao values (8, 4, '23/11/2009','24/11/2009');insert into locacao values (5, 3, '04/11/2009','05/11/2009');insert into locacao values (4, 5, '05/11/2009','07/11/2009');commit;

-------------------------------------------------------------------------------------CONSULTAS -------------------------------------------------------------------------------------SELECT :comando utilizado identificar a(s) coluna(s)* (ASTERISCO): comando utilizado para retornar todos os campos de uma tabelaFROM : comando utilizado para identificar a(s) tabela(s)ALIAS: apelido, codinome que pode ser utilizado para colunas e tabelas-------------------------------------------------------------------------------------RESTRIGINDO CONSULTAS -------------------------------------------------------------------------------------clausulasWHERE: comando (clasula sql) utilizado para definir o filtro da consultaDISTINCT:elimina linhasduplicadasORDER BY:ordena o resultado do select pode ser ASC (asc)ou DESCGROUP BY:agrupa o resultado do select, mas necessita de funes de agregaoHAVING:igual a clausula WHEREOPERADORESLGICOS:utilizado juntamente com a clausula WHEREandretorna verdadeiro se as condies forem verdadeirasorretorna verdadeiro se uma das condies forem verdadeirasnotretorna verdadeiro se a condio for falsaOPERADORES DECOMPARAO: utilizados juntamente com a clausula WHERE=igual a>maior que>=maior ou igual que