29
Structured Query Language - Slide 1 Banco de Dados Banco de Dados Structured Query Structured Query Language (SQL) Language (SQL) 4 4 Livros Texto : Introdução a Sistemas de Banco de Dados - Date Sistemas de Banco de Dados – Korth & Silberschatz Sistemas de Banco de Dados Fundamentos e Aplicações – Elmasri & Navathe

SQL4

Embed Size (px)

DESCRIPTION

SQL4

Citation preview

Banco de DadosLivros Texto : Introdução a Sistemas de Banco de Dados - Date
Sistemas de Banco de Dados – Korth & Silberschatz Sistemas de Banco de Dados Fundamentos e Aplicações – Elmasri & Navathe
Banco de Dados
Subconsultas
Uma subconsulta é uma declaração select, usada como uma expressão, como parte de outra declaração select, update, insert ou delete.
A subconsulta (select aninhado) é resolvida e depois os resultados são substituídos na consulta mais externa.
Se a declaração where da consulta mais externa incluir o nome de uma coluna, esta deverá ser compatível com a coluna nomeada na lista de seleção da subconsulta (ou seja: mesmo domínio ).
Structured Query Language - Slide *
operador-de-comparação (subconsulta)
Ex : Lista dos empregados que ganham o menor salário
select e.nome from empregado e
where salario = (select min(salario) from empregado);
Structured Query Language - Slide *
Tipo 2 – [NOT] IN (subconsulta)
Compara se um valor pertence ao conjunto de valores gerado pela subconsulta
Ex : Selecione matricula dos empregados que trabalham na mesma combinação (projeto, horas) em algum projeto no qual o empregado de matricula 111 trabalha
select mat from trabalhaem
where (codproj, horas) in
Structured Query Language - Slide *
Ex : Selecione o nome do departamento que não tem empregados
select d.nome from departamento d
where cod not in
(select coddepart from empregado);
Structured Query Language - Slide *
Tipo 3 – operador-de-comparação [ANY/SOME/ALL] (subconsulta)
Usado para encontrar tuplas que satisfazem a comparação com alguma ou todas as tuplas da subconsulta
Ex: Obter os nomes dos empregados com salário maior que o dos empregados do departamento 5
select nome from empregado
where coddepart = 5);
Tipo 4 – [NOT] EXISTS (subconsulta)
Funciona como um teste de existência, a subconsulta retorna verdadeiro se existir pelo menos uma tupla ou falso se não existir tupla.
Ex: Obter os nomes dos empregados com pelo menos um dependente
select e.nome from empregado e
where exists
where d.matricula = e.matricula);
Ex: Obter os nomes dos empregados sem dependentes
select e.nome from empregado e
where not exists
where d.matricula = e.matricula);
Not Exists – implementa a diferença algébrica
Peças que são fornecidas por algum fornecedor
select p.nome from pecas p where exits
(select * from pecasfornecedor pf
(select * from pecasfornecedor pf
Subconsultas
É possível utilizar a subconsulta na cláusula from representando uma tabela
select e.nome from (select * from empregado) e where e.coddepart=4;
Select d.nome from (select * from departamento where localizacao = ‘Predio 1’) d;
Structured Query Language - Slide *
Sempre qualificar os atributos com nome ou alias das tabelas;
Dar preferência ao uso de JOIN no lugar de subconsultas;
Utilizar apenas as tabelas e os atributos necessários;
Evitar consultas que varrem toda tabela;
Structured Query Language - Slide *
Subconsultas
Recupere os nomes e salários dos empregados cujos salários sejam maiores que a média do departamento 1.
Recupere os nomes dos empregados que não possuem dependentes
Que empregados moram no mesmo bairro de Luis Inácio?
Quais empregados ganham mais que o salário médio dos empregados?
Que empregados ganham comissão acima das dos empregados do departamento ‘Administração’?
Structured Query Language - Slide *
6. Que empregados participaram de projeto já concluídos?
7. Que dependentes têm o mesmo parentesco do dependente Antonio Carlos?
8. Que empregados possuem algum dependente com parentesco semelhante aos dos dependentes de ‘Ana Maria’?
9. Quais departamentos não têm empregados ?
10. Que empregados não estão alocados em projetos ?
11. Que empregados ganham menos que os de função auxiliar ?
Structured Query Language - Slide *
create table Empregado1 as select * from Empregado;
create table InfoDepart as select d.nome, count(*) as totalemp , sum(e.salario) as totalsalario
from departamento d join empregado e on e.coddepart = d.cod
group by d.nome
order by totalsalario;
(valor1, valor2, ..., valorn)
select d.nome, count(*), sum(e.salario) from
Departamento d join Empregado e
on e.coddepart = d.cod
group by d.nome;
Obs : número de colunas no select e no insert devem ser iguais e os domínios compatíveis
Structured Query Language - Slide *
<atribuições> = <atribuições> = <atributo=constantes>
ou
update Departamento set totsalario = (select sum(e.salario) from empregado e join departamento d1 on e.coddepart=d.cod
where d.nome=‘Informática’) where nome = ‘Informática’;
Structured Query Language - Slide *
<condição> = <atributo> <operador> <constante>
(select cod from Departamento
<condição> = <atributo> <operador> <constante>
(select mat from Trabalhaem
Simples: apenas 4 comandos;
Poderosa: cobre toda a gama de operações possíveis sobre um conjunto de tabelas;
Flexível: permite escrever uma consulta de diversas formas e diversos graus de complexidade
Structured Query Language - Slide *
Exercício
1. Recupere o nome do departamento, a função, o total de empregados e o total de salários por departamento e função cujo total de salários seja maior que a médias dos sálarios ordenados por departamento e função.
2. Selecionar todos os empregados do departamento Informática que desempenham papel de Coordenação por mais de 40 hs.
Structured Query Language - Slide *
Tabela virtual cujo conteúdo é definido por uma consulta SQL.
Características:
Pode ser derivada de uma ou mais tabelas ou visões
Sua existência reduz-se à sua definição, sendo armazenada como uma consulta Select
Seu conteúdo é calculado no momento
Usuários podem fazer uso das visões referenciando-se ao nome delas na cláusula from dos comandos SQL-DMl
Structured Query Language - Slide *
AS SELECT ... [WITH CHECK OPTION]
WITH CHECK OPTION – garante que as modificações executadas sobre as visões (Insert, Update e Delete) não violem os critério da cláusula WHERE do SELECT.
create view infodepart (nomedepart,totempregados,totsalarios) as
select d.nome, count(*), SUM(e.salario) from
Departamento d, Empregado e
Empregado e, Trabahaem t, Projeto p
where e.matricula=t.mat and
Atualizações sobre Visões - Limitações
WITH CHECK OPTION – garante que as atualizações não violem os condições impostas na Visão
INSERT – Pode ser executado em Visões que manipulem apenas uma tabela e todos os atributos not null devem estar presentes na visão.
UPDATE – Pode ser executado em Visões que manipulem apenas uma tabela, ou múltiplas tabelas quando o comando afetar apenas atributos de um única tabela.
DELETE - Pode ser executado em Visões que manipulem uma única tabela.
Para eliminar uma visão : DROP VIEW <nome da visão>
Structured Query Language - Slide *
SQL
Visão
Exercício
Crie uma visão contendo matricula, nome e função dos empregados Analista.
create view Analista as select matricula, nome, funcao from empregado where funcao = ‘Analista’ with check option
update Analista set funcao = ‘Programador’ where matricula = 117 Erro violação da cláusula where da view WITH CHECK OPTION
insert into Analista values (222, 'Carlos Antonio', 'Analista'); Erro
atributo salario é obrigatório (not null)
Structured Query Language - Slide *
SQL
Visão
Exercício
Crie uma visão (MaioresSalarios) contendo a matricula, função e salário dos empregados que ganham mais de R$ 3000 use a opção with check option
O que acontecerá na execução dos seguintes comandos:
insert into MaioresSalarios (matricula, funcao, salario)
values (999, ‘Analista’, 3500);