Centro de Ciências
Departamento de Computação
☞
5. A Linguagem SQL
6. Acesso a Bancos de Dados
7. Restrições de Integridade
8. Técnicas Avançadas de Projeto de BD’s Relacionais (Normalização)
2
4. Projeto de Bancos de Dados
- Fases -
Mini-mundo
(mundo real)
Análise de
Requisitos
Requisitos de dados
Projeto
Conceitual
Análise Esquema Conceitual (MER)
Independente Funcional
do SGBD Projeto Lógico
(mapeamento de
Específico para modelo de dados)
cada SGBD
Esquema Conceitual representado
no modelo de dados do SGBD
Projeto Projeto Físico
(Software) Estruturas de armazenamento
e caminhos de acesso (índices)
Implementação
Implementação
Expressões DDL e carga do BD
3
4. Projeto de Bancos de Dados
- Fases -
4
4. Projeto de Bancos de Dados
- Fases -
• Projeto Físico
• Definir estruturas de armazenamento
• Como e onde devem ser armazenadas as tabelas
• Uma tabela em um arquivo
• Várias tabelas em um único arquivo
• Definir caminhos de acesso
• Definir índices
• Definir tipo de índice
• Ordenado
• Primário
• Secundário
• Hash
• Utilizar critérios de performance
• Específico por SGBD
• Implementação
• Com base no DR definido na fase 3 e as estruturas de armazenamento e caminhos de acesso
definidos na fase anterior
• Criar o banco de dados
• Expressões DDL
• Carregar o BD
5
4. Projeto de Bancos de Dados
- Mapeamento do MER para um Banco de Dados Relacional -
• Ferramentas CASE
• Modelagem ER gráfica
• Geração automática de esquema (DDL)
• Algoritmo de mapeamento
• Sete passos
6
4. Projeto de Bancos de Dados
- Mapeamento do MER para um Banco de Dados Relacional -
• Passo 2
• Para cada relacionamento binário 1:1 entre os
conjuntos de entidades E1 e E2
• Escolher uma das tabelas, por exemplo E2, e incluir
como chave estrangeira em E2 a chave primária da
outra tabela (E1)
• Critério de escolha
>> Entidade com participação total no relacionamento
• Atributos de relacionamentos devem ser incluídos na
tabela com chave estrangeira
• Notação
PK
E1 E2
PK
8
4. Projeto de Bancos de Dados
- Mapeamento do MER para um Banco de Dados Relacional -
• Passo 2
• Para cada relacionamento binário 1:1 entre os conjuntos
de entidades E1 e E2
PK
Empregado Emp Dep
codigo
nome PK
matr dt_nasc
nome 1 PK
Departamento Dep Emp
1
gerência
PK
4. Projeto de Bancos de Dados
- Mapeamento do MER para um Banco de Dados Relacional -
• Passo 2
• Para cada relacionamento binário 1:1 entre os conjuntos
de entidades E1 e E2
PK
Departamento Empregado
PK
Empregado Departamento
matr nome codigo codigo nome
1 RH
1 Gal NULL
2 Vendas
2 Gil NULL
3 Sá 1
4 Dé 2
5 Ana NULL
10
4. Projeto de Bancos de Dados
- Mapeamento do MER para um Banco de Dados Relacional -
• Passo 2
• Para cada relacionamento binário 1:1 entre os conjuntos
de entidades E1 e E2
PK
Empregado Departamento
PK
Empregado Departamento
matr nome codigo nome matr
1 RH 3
1 Gal
2 Vendas 4
2 Gil
3 Sá
4 Dé Valores nulos não são armazenados….
5 Ana
11
4. Projeto de Bancos de Dados
- Mapeamento do MER para um Banco de Dados Relacional -
• Passo 3
• Para cada relacionamento binário 1:N entre os
conjuntos de entidades E1 e E2
• Identificar o conjunto de entidades que participa do lado
N (suponha que seja E2)
• Incluir como chave estrangeira na tabela E2 a chave
primária da outra tabela (E1)
• Atributos de relacionamentos devem ser incluídos na
tabela com chave estrangeira
• Notação
PK
E1 E2
12
4. Projeto de Bancos de Dados
- Mapeamento do MER para um Banco de Dados Relacional -
• Passo 4
• Para cada relacionamento binário N:N entre os
conjuntos de entidades E1 e E2
• Criar uma nova tabela auxiliar tab-aux para representar o
relacionamento
• Incluir como chaves estrangeiras na tabela tab-aux as
chaves primárias de E1 e E2
• Estes dois atributos comporão a chave primária de tab-aux
• Atributos de relacionamento devem ser incluídos na
tabela tab-aux
• Notação
PK-E1 PK-E2
E1 Tab-aux E2
PK-E1
PK-E2
13
4. Projeto de Bancos de Dados
- Mapeamento do MER para um Banco de Dados Relacional -
• Passo 5
• Para relacionamento de grau maior que 2
• Criar uma nova tabela auxiliar tab-aux para representar o
relacionamento
• Incluir como chaves estrangeiras na tabela tab-aux as chaves
primárias das tabelas que participam do relacionamento
• Estes atributos comporão a chave primária de tab-aux
• Passo 6
• Para cada conjunto de entidades fracas F
• Cria uma tabela TFr com todos os atributos de F
• Incluir como chave estrangeira de TFr a chave primária da
tabela correspondente ao conjunto de entidades fortes R
• A chave primária de TFr será a chave parcial de F mais a
chave primária de R
14
4. Projeto de Bancos de Dados
- Mapeamento do MER para um Banco de Dados Relacional -
• Passo 7
• Para cada atributo multivalorado A de um conjunto de
entidades E1
• Criar uma tabela T com o atributo A
• Incluir como chave estrangeira em T a chave primária de
E1
• A chave primária de T será composta do atributo A mais
a chave primária de E1
15
4. Projeto de Bancos de Dados
- Mapeamento do MER para um Banco de Dados Relacional -
• Exercício
• Construa o DR para o seguinte DER
cod-ag nome ender gerente num-conta saldo
Agência 1 n Conta
n
data_abertura
cod-cliente n ender
CPF Cliente
data-nasc
nome
16
4. Projeto de Bancos de Dados
- Mapeamento do MER para um Banco de Dados Relacional -
cod_ag
Agência Conta
cod-ag num-conta
data-abert
Cliente_Conta
cod-cliente
cod-cliente ender
CPF Cliente
data-nasc
nome
17
4. Projeto de Bancos de Dados
- Mapeamento do MER para um Banco de Dados Relacional -
• Exercício
• Construa o DR para o DER do slide correspondente ao
MER da empresa com empregado, departamento,
vencimentos, descontos, dependentes.
18
UFC
CC
DC4. Projeto de Bancos de Dados
- Construção do Diagrama Relacional -
Construa o DR para o DER do slide 42
descrição
Cod_venc valor
dt_lotação
matr Emp_Venc Vencimento
nome Cod_venc
descrição
Em
pr Emp_Desc Descont0 valor
eg matr Cod_desc
Cod_Dep ad Cod_desc
Cod_Dep o
Cod_Dep
©Angelo Brayner Fundamentos de Banco de Dados 1
4. Projeto de Bancos de Dados
- Mapeamento do MER para um Banco de Dados Relacional -
cic N End
Sal
DN
Empregado
ISA ISA
Es
Piloto Técnico
B HV
4. Projeto de Bancos de Dados
- Mapeamento do MER para um Banco de Dados Relacional -
Primeira Alternativa
• Uma tabela EMP
Atributos CIC, DN, N, End,Sal
Chave Primária CIC
• Uma tabela PILOTO
Atributos CIC, B,HV
Chave Primária CIC
Chave Estrangeira : CIC referencia EMP
• Uma tabela TEC
Atributos CIC, Es
Chave Primária CIC
Chave Estrangeira CIC referencia EMP
4. Projeto de Bancos de Dados
- Mapeamento do MER para um Banco de Dados Relacional -
Segunda Alternativa
• Uma tabela PILOTO
Atributos CIC, DN, N, End,Sal, B,HV
Chave Primária CIC
Vantagens e
Desvantagens
• Primeira Alternativa com 3 tabelas
• Mais geral
• Permite fazer consultas sobre empregados que não são
nem pilotos nem técnicos.
• Não é a adequada quando se quer consultar atributos
gerais de Pilotos e Técnicos: é preciso combinar as
tabelas PILOTO e TEC com a tabela EMP.
4. Projeto de Bancos de Dados
- Mapeamento do MER para um Banco de Dados Relacional -
Vantagens e
Desvantagens
• Segunda Alternativa com 2 tabelas
• É adequada quando se quer consultar somente
informações relacionadas a Pilotos ou Técnicos.
• Não é aplicável se tivermos empregados que não são
nem Pilotos nem Técnicos.
• Não é aplicável se existem Pilotos que também são
Técnicos e vice-versa : os dados deveriam ser
armazenados duas vezes !!!
• Uma consulta que pede para listar todos os
empregados deve varrer duas tabelas !!!
DP CREATE TABLE PAT
( DID char(4),
PID char(4),
PROJ PAT DEP DP DATE,
PRIMARY KEY (DID,PID),
FOREIGN KEY (PID)
REFERENCES PROJ,
MON DM FOREIGN KEY (DID)
REFERENCES DEP)
☞ 7.
8.
Restrições de Integridade
Técnicas Avançadas de Projeto de BD’s Relacionais (Normalização)
26
5. SQL
- Histórico -
28
5. SQL
- Comandos DDL -
• Criando tabelas
• Estrutura básica
• CREATE TABLE nome-tabela
(nome-coluna tipo-de-dados [not null],
[nome-coluna tipo-de-dados [not null] … ],
[CONSTRAINT nome-restrição]
UNIQUE nome-coluna
Especifica | PRIMARY KEY(nome-coluna {, nome-coluna})
chaves | FOREIGN KEY (nome-coluna {, nome-coluna})
candidatas
REFERENCES nome-tabela
[ON DELETE CASCADE |
SET NULL | NO ACTION ],
Definição
de restrições [ON UPDATE CASCADE],
| CHECK (predicado)
)
29
5. SQL
- Comandos DDL -
• Removendo tabelas
• Estrutura básica
• DROP TABLE nome-tabela [CASCADE | RESTRICT]
• Remove as tuplas da tabela e sua definição do catálogo
• CASCADE remove as restrições do tipo foreign key: tabelas que referenciam a
tabela removida
• Alterando tabelas
• Estrutura básica
• ALTER TABLE nome-tabela
[ADD nome-coluna tipo de dados]
[DROP nome-coluna ]
[ADD CONSTRAINT nome-restrição]
[DROP CONSTRAINT nome-restrição]
[DROP PRIMARY KEY]
[ repetir ADD ou DROP em qualquer ordem]
30
UFC
CC
5. SQL
DC
- Operações da DDL -
Alterando tabelas
ALTER TABLE nome-tabela
[ADD nome-coluna tipo-dado [not null]]
[ALTER COLUMN nome-coluna tipo-dado [not null] ]
[DROP column nome-coluna ]
[ADD CONSTRAINT nome-restrição]
[DROP CONSTRAINT nome-restrição]
[DROP PRIMARY KEY]
[ repetir ADD ou DROP em qualquer ordem]
• CREATE TABLE
• Alguns tipos de dados suportados pelo SQL 92
• char(n)
• String de caracteres de tamanho fixo n
• varchar(n)
• String de caracteres de tamanho variável (máximo n)
• integer
• smallint
• decimal(p,d)
• Numérico com p dígitos
• Dos p dígitos, d dígitos representam casas decimais após a
vírgula
• real ••
••
Alphabetic
Alphabeticdate
dateformats
formats( (‘April
‘April15,
15,1998’)
1998’)
Numeric date formats ( ‘4/15/1998’)
Numeric date formats ( ‘4/15/1998’)
• numérico ponto flutuante •• Unseparated
Unseparatedstring
stringformats
formats(‘19921225')
(‘19921225')
• date
• data de calendário 32
5. SQL
- Comandos DDL -
• CREATE TABLE
• Exemplo: Considere o seguinte esquema de banco de
dados
Departamento(codigo, dnome, ender)
Empregado(matr, enome, ender, cpf, salário, lotacao)
• Crie as tabelas Departamento e Empregado utilizando
a DDL do SQL:
• Vamos tentar no PostgreSQL???
33
5. SQL
- Comandos DML -
34
5. SQL
- Comandos DML -
35
5. SQL
- Comandos DML -
•
36
5. SQL
- Comandos DML -
37
5. SQL
- Comandos DML -
38
5. SQL
- Comandos DDL -
• CREATE TABLE
• Desafio 1: Considere o seguinte esquema de banco de
dados
Departamento(cod_depart, nome, ender)
Empregado(matr, nome, ender, cpf,salário,lotação)
• Crie as tabelas Departamento e Empregado utilizando a
DDL do SQL com as seguintes restrições
• O salário de cada empregado deve ser maior que 2000
• Não podem existir valores de cpf repetidos
• Não se pode permitir a remoção de departamentos para os
quais ainda existam empregados lotados
• Ao alterar o código de de um departamento, alterar o valor
do atributo lotação para todos empregados do
departamento
39
UFC
CC
5. SQL
DC
- Operações da DDL -
• Criar o BD de lojas, com as seguintes restrições
– O salário de cada vendedor deve ser maior que 1000
– Não podem existir valores de cpf repetidos
– Não se pode permitir a remoção de filiais para os quais ainda existam
vendedores lotados
– Não se pode remover itens de estoque e nem vendedores, para os quais
existam vendas na tabela Histórico.
-
• Relembrando o BD lojas:
• Cada item de estoque possui um código, descrição, quantidade em
estoque, preço de compra, preço de venda e o fornecedor.
• Cada fornecedor terá um código, nome, endereço, telefones,
cidade e estado.
• Existem várias lojas (filiais) vendendo produtos da empresa X.
Cada loja tem um código identificador, nome, endereço, cidade de
localização e um gerente (um vendedor da loja).
• Cada vendedor terá uma matrícula, nome, RG, CPF, salário e filial
de lotação.
• Para cada venda efetuada (tabela histórico), deve ser identificado o
código do item vendido, a matrícula do vendedor que realizou a
venda, a quantidade vendida, o preço de venda, a data e hora da
venda.
- Operações da DDL -
Alterar o BD lojas, com as seguintes restrições
O salário de cada vendedor deve ser maior que 1200
Ao alterar o código de uma filial, o valor do atributo codfil para todos
empregados da filial deve ser automaticamente alterado
Incluir a coluna cnpj em Fornecedores e Filiais
Não podem existir valores de cnpj repetidos
cnpj não pode ser nulo
43
5. SQL
- Comandos DDL -
44
5. SQL
- Comandos DDL -
45
5. SQL
- Comandos DDL -
• Estudo de Caso:
48
5. SQL
- Conjunto de Operações para Manipulação de Dados -
49
5. SQL
- Conjunto de Operações para Manipulação de Dados -
51
5. SQL
- Conjunto de Operações para Manipulação de Dados -
52
5. SQL
- Conjunto de Operações para Manipulação de Dados -
53
5. SQL
- Conjunto de Operações para Manipulação de Dados -
54
5. SQL
- Conjunto de Operações para Manipulação de Dados -
55
5. SQL
- Conjunto de Operações para Manipulação de Dados -
56
5. SQL
- Conjunto de Operações para Manipulação de Dados -
57
5. SQL
- Conjunto de Operações para Manipulação de Dados -
58
5. SQL
- Conjunto de Operações para Manipulação de Dados -
59
5. SQL
- Conjunto de Operações para Manipulação de Dados -
60
5. SQL
- Conjunto de Operações para Manipulação de Dados -
61
5. SQL
- Conjunto de Operações para Manipulação de Dados -
63
5. SQL
- Conjunto de Operações para Manipulação de Dados -
• Consultas com o operador de união
• Exemplo
• Considere as seguintes relações
64
5. SQL
- Conjunto de Operações para Manipulação de Dados -
65
5. SQL
- Conjunto de Operações para Manipulação de Dados -
• Exercícios:
66
5. SQL
- Conjunto de Operações para Manipulação de Dados -
• Exercícios:
• Forma alternativa:
67
5. SQL
- Conjunto de Operações para Manipulação de Dados -
• Exercícios:
68
5. SQL
- Conjunto de Operações para Manipulação de Dados -
• Exercícios:
69
5. SQL
- Conjunto de Operações para Manipulação de Dados -
70
5. SQL
- Conjunto de Operações para Manipulação de Dados -
• Exercícios:
71
5. SQL
- Conjunto de Operações para Manipulação de Dados -
• Exercícios
• Listar matrícula dos empregados que não possuem dependentes
Select
Selecte.matr
e.matr
From
From empregadoee
empregado
EXCEPT
EXCEPT
Select
Selectd.matr-resp
d.matr-resp
From
Fromdependente
dependentedd
Select
Selecte.matr
e.matr
From
From empregadoee
empregado
• Listar matrícula INTERSECT
dos empregados
INTERSECT Select
Selectd.matr-resp
que possuem dependentes
d.matr-resp
Select
Selectd.matr-resp From
From
d.matr-resp Fromdependente
dependentedd
Fromdependente
dependentedd
72
5. SQL
- Conjunto de Operações para Manipulação de Dados -
73
5. SQL
- Conjunto de Operações para Manipulação de Dados -
• Funções Agregadas
• Funções embutidas (built-in) aplicadas sobre uma
coleção de valores (colunas) do banco de dados
• sum
• Retorna o somatório dos valores de uma coleção
• avg
• Retorna a média dos valores de uma coleção
• max
• Retorna o maior valor de uma coleção de valores
• min
• Retorna o menor valor de uma coleção
• count
• Retorna o número de elementos de uma coleção
• Sintaxe
• nome-da-função (ALL | DISTINCT nome-coluna) |
count(*)
• Não podem ser utilizados na cláusula WHERE
74
5. SQL
- Conjunto de Operações para Manipulação de Dados -
• Exercícios
• Encontre o número de empregados lotados no
departamento de Informática
select
selectcount(*)
count(*)
from
from Empregadoe,
Empregado e,Departamento
Departamentodd
where
wheree.lotacao=d.cod_dep
e.lotacao=d.cod_depand
andd.nome
d.nomelike
like
'_nform_tica'
'_nform_tica'
matr
select
selectsum(salario)
sum(salario)
from Empregado
• fromoEmpregado
Encontre montante da folha de pagamento da empresa
select
selectavg(distinct
avg(distinctsalario)
salario)
from Empregado
from Empregado
76
5. SQL
- Conjunto de Operações para Manipulação de Dados -
• Agrupando tuplas no SQL (cont.)
• Todas colunas que aparecem na cláusula select têm
que aparecer na cláusula group by
• Exceto os argumentos da funções agregadas
77
5. SQL
- Conjunto de Operações para Manipulação de Dados -
• Agrupando tuplas no SQL
select lotação, count(*) as quantidade_empregados
from Empregado
group by lotação AAfunção
funçãocount
countééaplicada
aplicada
para
paraooconjunto
conjuntode
detuplas
tuplas
Empregado de cada grupo
de cada grupo
matr nome cpf salário lotação
11 Bárbara 231 8000 2
lotação quantidade_empregados
21 André 451 9000 1
33 Sofia 472 3000 2 1 3
35 Lucas 549 500 2 2 3
37 Rebeca 465 400 3 3 1
40 Caio 555 800 1
57 Yasmin 800 400 1
78
5. SQL
- Conjunto de Operações para Manipulação de Dados -
• Agrupando tuplas no SQL
select lotação, sum(salário)
from Empregado
group by lotação
Empregado
matr nome cpf salário lotação lotação sum of salário
11 Bárbara 231 8000 2
21 André 451 9000 1 1 10200
33 Sofia 472 3000 2 2 11500
35 Lucas 549 500 2 3 400
37 Rebeca 465 400 3
40 Caio 555 800 1
57 Yasmin 800 400 1
79
5. SQL
- Conjunto de Operações para Manipulação de Dados -
• Agrupando tuplas no SQL
select lotação, sum(salário), max(salário)
from Empregado
group by lotação
Empregado
matr nome cpf salário lotação lotação sum of salário max of salário
11 Bárbara 231 8000 2
21 André 451 9000 1 1 10200 9000
33 Sofia 472 3000 2 2 11500 8000
35 Lucas 549 500 2
3 400 400
37 Rebeca 465 400 3
40 Caio 555 800 1
57 Yasmin 800 400 1
80
5. SQL
- Conjunto de Operações para Manipulação de Dados -
• Selecionando grupos
• Listar nome dos departamentos cuja média salarial seja
maior que 7000
• Cláusula having
• Filtro de grupos
• Exemplo
select d.nome, avg(salario)
from Departamento d, Empregado e
where d.cod_depart=e.lotacao
group by d.nome
having avg(e.salario)>7000
Funções
Agregadas =>
Podem ser
utilizados na
cláusula 81
HAVING
5. SQL
- Conjunto de Operações para Manipulação de Dados -
• Selecionando grupos
• Consulta com where e having
• predicado da cláusula where é avaliado primeiramente
• Tuplas que satisfazem o predicado são agrupadas pelo group by
• Predicado da cláusula having é avaliado
• Grupos que satisfazem o predicado aparecem no resultado
82
5. SQL
- Conjunto de Operações para Manipulação de Dados -
• Agrupando tuplas no SQL
select lotação, sum(salário), max(salário)
from Empregado
group by lotação
having lotação > 1
Empregado
matr nome cpf salário lotação lotação sum of salário max of salário
11 Bárbara 231 8000 2
21 André 451 9000 1 2 11500 8000
33 Sofia 472 3000 2 3 400 400
35 Lucas 549 500 2
37 Rebeca 465 400 3
40 Caio 555 800 1
57 Yasmin 800 400 1
83
5. SQL
- Conjunto de Operações para Manipulação de Dados -
• Agrupando tuplas no SQL
select lotação, sum(salário), max(salário)
from Empregado
group by lotação
having max(salario) > 500
Empregado
matr nome cpf salário lotação lotação sum of salário max of salário
11 Bárbara 231 8000 2
21 André 451 9000 1 1 10200 9000
33 Sofia 472 3000 2 2 11500 8000
35 Lucas 549 500 2
37 Rebeca 465 400 3
40 Caio 555 800 1
57 Yasmin 800 400 1
84
5. SQL
- Conjunto de Operações para Manipulação de Dados -
• Agrupando tuplas no SQL
select lotação, sum(salário), max(salário)
from Empregado
group by lotação
having count(*) > 1
Empregado
matr nome cpf salário lotação lotação sum of salário max of salário
11 Bárbara 231 8000 2
21 André 451 9000 1 1 10200 9000
33 Sofia 472 3000 2 2 11500 8000
35 Lucas 549 500 2
37 Rebeca 465 400 3
40 Caio 555 800 1
57 Yasmin 800 400 1
85
5. SQL
- Conjunto de Operações para Manipulação de Dados -
• Agrupando tuplas no SQL
select lotação, sum(salário), max(salário)
from Empregado
where salário > 1.000
group by lotação
Empregado
matr nome cpf salário lotação lotação sum of salário max of salário
11 Bárbara 231 8000 2
21 André 451 9000 1 1 9000 9000
33 Sofia 472 3000 2 2 11.000 8000
35 Lucas 549 500 2
37 Rebeca 465 400 3
40 Caio 555 800 1
57 Yasmin 800 400 1
86
5. SQL
- Conjunto de Operações para Manipulação de Dados -
• Agrupando tuplas no SQL
select lotação, sum(salário), max(salário)
from Empregado
where salario > 1.000
group by lotação
having count(*) > 1
Empregado
matr nome cpf salário lotação lotação sum of salário max of salário
11 Bárbara 231 8000 2
21 André 451 9000 1 2 11.000 8000
33 Sofia 472 3000 2
35 Lucas 549 500 2
37 Rebeca 465 400 3
40 Caio 555 800 1
57 Yasmin 800 400 1
87
5. SQL
- Conjunto de Operações para Manipulação de Dados -
• Agrupando tuplas no SQL (cont.)
• Exemplos
• Lista de todos dependentes com respectivos
responsáveis e nome do departamento de lotação
dos responsáveis.
• Agrupar o resultado por departamento e por
empregado
select
selectd.nome,
d.nome,e.nome,
e.nome,p.nome
p.nome
from
fromDepartamento
Departamentod,d,Empregado
Empregadoe,e,Dependente
Dependentepp
where
whered.cod_dep=e.lotacao
d.cod_dep=e.lotacaoand
ande.matr=p.matr_resp
e.matr=p.matr_resp
group
groupbybyd.nome,
d.nome,e.nome,
e.nome,p.nome
p.nome
GROUP
GROUPBY
BYDesnecessário
Desnecessário
88
5. SQL
- Conjunto de Operações para Manipulação de Dados -
• Agrupando tuplas no SQL (cont.)
• Exemplos (cont.)
• Listar para cada departamento o seu código, além do
maior e do menor salário
select
selectlotacao,
lotacao,max(salario)
max(salario)as
asMaior_Salario,
Maior_Salario,min(salario)
min(salario)as
as
Menor_Salario
Menor_Salario
from
fromEmpregado
Empregadoee
group
groupbybylotacao
lotacao
89
5. SQL
- Conjunto de Operações para Manipulação de Dados -
• Agrupando tuplas no SQL (cont.)
• Exemplos (cont.)
• Listar para cada departamento o seu nome, além do
maior e do menor salário
SELECT
SELECTd.nome,
d.nome,tab.Maior_Salario,
tab.Maior_Salario,tab.Menor_Salario
tab.Menor_Salario
FROM
FROM((
SELECT
SELECTlotacao,
lotacao,max(salario)
max(salario)as
asMaior_Salario,
Maior_Salario,
min(salario)
min(salario)as
asMenor_Salario
Menor_Salario
FROM empregado
FROM empregado e e
GROUP
GROUPBY BYlotacao
lotacao
)) AS
AStab,
tab,departamento
departamentodd
WHERE
WHEREtab.lotacao
tab.lotacao==d.cod_dep
d.cod_dep
90
5. SQL
- Conjunto de Operações para Manipulação de Dados -
• Agrupando tuplas no SQL (cont.)
• Exemplos (cont.)
• Listar para cada departamento o seu nome, além do
maior e do menor salário
select
selectlotacao,
lotacao,max(salario)
max(salario)as
asMaior_Salario,
Maior_Salario,min(salario)
min(salario)as
as
Menor_Salario
Menor_Salario
from
fromEmpregado
Empregadoee
group
groupbybylotacao
lotacao
91
5. SQL
- Conjunto de Operações para Manipulação de Dados -
• Selecionando grupos
select lotação, count(*) as quantidade_empregados
from Empregado
group by lotação
Empregado
matr nome cpf salário lotação lotação quantidade_empregados
11 Bárbara 231 8000 2 1 3
21 André 451 9000 1
33 Sofia 472 3000 2 2 3
35 Lucas 549 500 2 3 1
37 Rebeca 465 400 3
40 Caio 555 800 1
57 Yasmin 800 400 1
select lotação, count(*) as quantidade_empregados
from Empregado
group by lotação lotação quantidade_empregados
having count(*) > 1 1 3
2 3
92
5. SQL
- Conjunto de Operações para Manipulação de Dados -
• Selecionando grupos
select lotação, count(*) as quantidade_empregados
from Empregado
group by lotação
Empregado
matr nome cpf salário lotação lotação quantidade_empregados
11 Bárbara 231 8000 2 1 3
21 André 451 9000 1
33 Sofia 472 3000 2 2 3
35 Lucas 549 500 2 3 1
37 Rebeca 465 400 3
40 Caio 555 800 1
57 Yasmin 800 400 1
• Selecionando grupos
select lotação, sum(salário), max(salário)
from Empregado
group by lotação
Empregado
matr nome cpf salário lotação lotação sum of salário max of salário
11 Bárbara 231 8000 2
21 André 451 9000 1 1 10200 9000
33 Sofia 472 3000 2 2 11500 8000
35 Lucas 549 500 2
3 400 400
37 Rebeca 465 400 3
40 Caio 555 800 1
57 Yasmin 800 400 1
select lotação , lotação sum of salário
sum(salário) 1 10200
from Empregado 2 11500
group by lotação
having max(salário) > 500 94
5. SQL
- Conjunto de Operações para Manipulação de Dados -
• Selecionando grupos
select lotação, sum(salário), max(salário)
from Empregado
group by lotação
Empregado
matr nome cpf salário lotação lotação sum of salário max of salário
11 Bárbara 231 8000 2
21 André 451 9000 1 1 10200 9000
33 Sofia 472 3000 2 2 11500 8000
35 Lucas 549 500 2
3 400 400
37 Rebeca 465 400 3
40 Caio 555 800 1
57 Yasmin 800 400 1
select lotação , lotação sum of salário
sum(salário) 1 10200
from Empregado 2 11500
group by lotação
having count(*) > 2 95
5. SQL
- Conjunto de Operações para Manipulação de Dados -
• Selecionando grupos (cont.)
• Exemplos
• Listar nome e média salarial dos departamentos que
possuem mais de 10 empregados lotados
select
selectd.nome,
d.nome,avg(e.salario)
avg(e.salario)as
asMédia_Salarial
Média_Salarial
from
fromDepartamento
Departamentod,d,Empregado
Empregadoee
where
whered.cod_dep=e.lotacao
d.cod_dep=e.lotacao
group
groupbybyd.nome
d.nome
having
havingcount(matr)>=11
count(matr)>=11
• Listar nome e quantidade de empregados dos
departamentos cuja média salarial é maior que 5000
select
selectd.nome,
d.nome,count(*)
count(*)as
asNúmero_Empregados
Número_Empregados
from
fromDepartamento
Departamentod, d,Empregado
Empregadoee
where
whered.cod_dep=e.lotacao
d.cod_dep=e.lotacao
group
groupbybyd.nome
d.nome
having
havingavg(e.salario)>=5000
avg(e.salario)>=5000
96
5. SQL
- Conjunto de Operações para Manipulação de Dados -
• Agrupando tuplas no SQL (cont.)
• Exemplos (cont.)
• Totalizar a quantidade de itens vendidos por vendedor
e por item, considerando o seguinte esquema
• Vendedor(matr, nome, salário)
• Vendas(matr,cod_item,qtde, pr-venda,dt-hora-venda)
• Estoque(cod_item, referência, pr_compra,pr_venda,qtde)
select
selectv.nome,
v.nome,e.referência,
e.referência,sum(d.qtde)
sum(d.qtde)as
astotal
total
from
fromEstoque
Estoquee,e,Vendedor
Vendedorv,v,Vendas
Vendasdd
where
wheree.cod_item=d.cod_item
e.cod_item=d.cod_itemand andv.matr=d.matr
v.matr=d.matr
group
groupbybyv.nome,
v.nome,e.referência
e.referência
97
5. SQL
- Conjunto de Operações para Manipulação de Dados -
• Selecionando grupos (cont.)
• Exemplos
• Listar nome de vendedores e quantidade de vendas
efetuadas dos vendedores com volume de vendas superior
a R$ 10000 (classificado em ordem decrescente por
quantidade de vendas), considerando o seguinte esquema:
• Vendedor(matr, nome, salário)
• Vendas(matr,cod_item,qtde, pr-venda,dt-hora-venda)
• Estoque(cod_item, referência, pr_compra,pr_venda,qtde)
select
selectv.nome,
v.nome,count(*)
count(*)as
astotal_de_vendas
total_de_vendas
from
fromVendedor
Vendedorv,v,Vendas
Vendasdd
where
wherev.matr=d.matr
v.matr=d.matr
group
groupbybyv.nome
v.nome
having
havingsum(d.qtde*d.pr_venda)
sum(d.qtde*d.pr_venda)>>10000
10000
order
orderbybycount(*)
count(*)DESC
DESC
98
5. SQL
- Conjunto de Operações para Manipulação de Dados -
99
5. SQL
- Conjunto de Operações para Manipulação de Dados -
10
0
5. SQL
- Conjunto de Operações para Manipulação de Dados -
select
selectd.nome
d.nome
• from Departamento
Listar nome dos
from Departamento d,
d,Empregado
Empregadoee com média salarial
departamentos
where
whered.cod_depart=e.lotação
d.cod_depart=e.lotação
maior
group que a média salarial da empresa
group byd.nome
by d.nome
having
havingavg(e.salário)
avg(e.salário)>>(select
(selectavg(salário)
avg(salário)from
fromEmpregado)
Empregado)
10
2
5. SQL
- Conjunto de Operações para Manipulação de Dados -
• Consulta SQL aninhada (cont.)
• Consulta correlacionada
• Listar todos os empregado que possuem salário
maior que a média salarial de seus departamentos
• Variável de correlação
• Variável da consulta mais externa utilizada pela consulta
mais interna
select e.nome
from Empregado e
where salário > (
select avg(salário)
from Empregado
where lotação=e.lotação
)
10
3
5. SQL
- Conjunto de Operações para Manipulação de Dados -
• Consulta SQL aninhada (cont.)
• Predicado IN
• Verifica a pertinência de elementos em um conjunto
• Sintaxe
• expr [NOT] IN (subconsulta) | expr [NOT] IN (val [,val
…])
• Exemplo
select nome
from Empregado
where matr in (1,5,8,9)
10
4
5. SQL
- Conjunto de Operações para Manipulação de Dados -
• Consulta SQL aninhada (cont.)
• Exemplo:
• Listar os empregados lotados nos departamentos
localizados em Fortaleza, considerando o seguinte
esquema
Departamento(cod_depart, nome, ender,cidade)
Empregado(matr, nome, ender, cpf,salário,lotação)
select
selectnome
nome
from Empregado
from Empregado
where
wherelotação
lotaçãoin
in((
select
selectcod_depart
cod_depart
from Departamento
from Departamento
where
wherecidade=‘Fortaleza'
cidade=‘Fortaleza'
))
10
5
5. SQL
- Conjunto de Operações para Manipulação de Dados -
select
selectnome
nome
from
from Empregadoe,
Empregado e,Departamento
Departamentodd
where
wheree.lotação
e.lotação==d.cod_depart
d.cod_depart
and d.cidade='Fortaleza'
and d.cidade='Fortaleza'
10
6
5. SQL
- Conjunto de Operações para Manipulação de Dados -
• Consulta SQL aninhada (cont.)
• Listar os empregados lotados nos departamentos
localizados em Fortaleza, considerando o seguinte
esquema
Departamento(cod_depart, nome, ender,cidade)
Empregado(matr, nome, ender, cpf,salário,lotação)
select
selectnome
nome
from Empregado
from Empregado
where
wherelotação
lotaçãoin
in(select
(selectcod_depart
cod_departfrom
fromDepartamento
Departamento
where cidade='Fortaleza' or cidade='Natal')
where cidade='Fortaleza' or cidade='Natal')
select
selecte.nome
e.nome
from
fromEmpregado
Empregado e,e,Departamento
Departamento dd
where
wheree.lotacao
e.lotacao ==d.cod_depart
d.cod_depart
and
and (d.cidade==‘Fortaleza'
(d.cidade ‘Fortaleza'or
ord.cidade=‘Natal')
d.cidade=‘Natal')
10
7
5. SQL
- Conjunto de Operações para Manipulação de Dados -
select
selectnome
nome
from Empregado
from Empregado
where
wheresalário
salário>=some
>=some((select
selectavg(salário)
avg(salário)
from
fromEmpregado
Empregado
group by lotação
group by lotação
))
10
8
5. SQL
- Conjunto de Operações para Manipulação de Dados -
• qALL (subconsulta)
• Retorna verdade se e somente se,
• Para todo elemento s retornado pela subconsulta,
expr q s é verdade
10
9
5. SQL
- Conjunto de Operações para Manipulação de Dados -
select
selectnome
nome
from Empregado
from Empregado
where
wheresalário
salário>=all
>=all((
select
selectavg(salário)
avg(salário)
from Empregado
from Empregado
group
groupbybylotação
lotação
))
11
0
5. SQL
- Conjunto de Operações para Manipulação de Dados -
11
1
5. SQL
- Conjunto de Operações para Manipulação de Dados -
• Predicado EXISTS
• Verifica se o conjunto retornado por uma subconjunto é
vazio ou não
• Listar empregados que possuem dependentes
select
selecte.nome
e.nome
from
fromEmpregado
Empregadoee
where
whereexists
exists((
select
select**from
fromDependente
Dependente
where
wherematr_resp=e.matr
matr_resp=e.matr
))
11
2
5. SQL
- Conjunto de Operações para Manipulação de Dados -
• Predicado EXISTS
• Listar empregados que possuem dependentes
select
selecte.nome
e.nome
from
fromEmpregado
Empregadoee
where
whereexists
exists(select
(select**from
fromDependente
Dependentewhere
where
matr_resp=e.matr)
matr_resp=e.matr)
select
selectDISTINCT
DISTINCTe.nome
e.nome
from
fromEmpregado
Empregadoe,e,Dependente
Dependentedd
where
wheree.matr
e.matr==d.matr_resp
d.matr_resp
select
selecte.nome
e.nome
from
fromEmpregado
Empregadoee
where
wheree.matr
e.matrIN
IN(select
(select d.matr_resp
d.matr_respfrom
fromDependente
Dependented)
d)
11
3
5. SQL
- Conjunto de Operações para Manipulação de Dados -
• Consulta SQL aninhada (cont.)
• Predicado EXISTS (cont.)
• Sintaxe
• [NOT] EXISTS (subconsulta)
• EXISTS (subconsulta)
• Retorna verdade se e somente se
• O conjunto retornado por subconsulta não é vazio
• NOT EXISTS (subconsulta)
• Retorna verdade se e somente se
• O conjunto retornado por subconsulta é vazio
• Listar empregados que NÃO possuem dependentes
select
selecte.nome
e.nome
from
fromEmpregado
Empregadoee
where
wherenot
notexists
exists(select
(select**from
fromDependente
Dependentewhere
where
matr_resp=e.matr)
matr_resp=e.matr)
11
4
5. SQL
- Conjunto de Operações para Manipulação de Dados -
• Consulta SQL aninhada (cont.)
select
selectd.nome
d.nome
from
fromDepartamento
Departamentodd
where
whereexists
exists(select
(select**from
fromEmpregado
Empregadoee
where
wheree.lotacao=d.cod_depart
e.lotacao=d.cod_departand
and
salário
salário>>(2*(select
(2*(selectavg(salário)
avg(salário)
from
fromEmpregado
Empregadoe2
e2
where
wheree2.lotação=e.lotação)))
e2.lotação=e.lotação)))
11
5
5. SQL
- Conjunto de Operações para Manipulação de Dados -
• Consulta SQL aninhada (cont.)
select
selectd.nome
d.nome
from
fromDepartamento
Departamentodd
where
whereexists
exists(select
(select**from
fromEmpregado
Empregadoee
where
wheree.lotacao=d.cod_depart
e.lotacao=d.cod_departand
and
salário
salário>>(2*(select
(2*(selectavg(salário)
avg(salário)
from
fromEmpregado
Empregadoe2
e2
where
wheree2.lotação=d.cod_depart)))
e2.lotação=d.cod_depart)))
11
6
5. SQL
- Conjunto de Operações para Manipulação de Dados -
• Consulta SQL aninhada (cont.)
11
8
5. SQL
- Conjunto de Operações para Manipulação de Dados -
11
9
5. SQL
- Conjunto de Operações para Manipulação de Dados -
• Consulta SQL aninhada (cont.)
• Subconsulta escalar
• Exemplo
• Listar nome dos empregados com a quantidade de
dependentes de cada empregado
select
selecte.nome,
e.nome,(select
(selectcount(*)
count(*)From
Fromdependente
dependentewhere
where
matr_resp=e.matr)
matr_resp=e.matr)
from
fromEmpregado
Empregadoee
select
selecte.nome,
e.nome,count(*)
count(*)as
asqtd_dep
qtd_depProblema: Falha no caso de homônimos
from
from Empregado e, Dependentedd
Empregado e, Dependente
where
wheree.matr
e.matr==d.matr_resp
d.matr_resp
group by e.nome
group by e.nome
select
selecte.nome,
e.nome,t.qtd_dep
t.qtd_dep
from
fromEmpregado
Empregadoe,e,(( select
selectmatr_resp,
matr_resp,count(*)
count(*)as
asqtd_dep
qtd_dep
from Dependente
from Dependente
group
groupbybymatr_resp
matr_resp
))as t
as t
e.matr=t.matr_resp
e.matr=t.matr_resp
12
0
5. SQL
- Conjunto de Operações para Manipulação de Dados -
• Predicado Between
• Sintaxe
• expr1 [NOT] BETWEEN expr2 and expr3
• Exemplo
• matr between 2 and 10 Û matr >= 2 and matr<=10
• Em geral, between é mais eficiente
select
selecte.nome
e.nome
from
fromempregado
empregadoee
where
wheresalario
salariobetween
between10000
10000and
and20000
20000
select
selecte.nome
e.nome
from
fromempregado
empregadoee
where
wheresalario
salario>=
>=10000
10000and
andsalario
salario<=
<=20000
20000
12
1
5. SQL
- Conjunto de Operações para Manipulação de Dados -
Pd.nome(sd.cod_depart=e.lotação(Departamento x Empregado))
Pd.nome( Departamento
Û
d.cod_depart=e.lotação
Empregado )
12
2
5. SQL
- Conjunto de Operações para Manipulação de Dados -
• Formas de Junção em SQL Avançado (cont.)
• Sintaxe da cláusula FROM (cont.)
• Tipos de junção
• Junção theta
• INNER JOIN
• Junção externa à esquerda
• LEFT OUTER JOIN
• Junção externa à direita
• RIGHT OUTER JOIN
• Junção externa completa
• FULL OUTER JOIN
12
3
5. SQL
- Conjunto de Operações para Manipulação de Dados -
• Formas de Junção em SQL Avançado (cont.)
• Junção theta
• Exemplo
• Listar nome dos empregados com o nome do
respectivo departamento
select
selecte.nome,
e.nome,d.nome
d.nome select
selecte.nome,
e.nome,d.nome
d.nome
from Empregado e, Departamento from
from Empregado e, Departamento
from
dd Empregado e, Departamento dd Empregado e, Departamento
where
wheree.lotação
e.lotação==d.cod_depart
d.cod_depart where
whered.cod_depart
d.cod_depart ==e.lotação
e.lotação
select
selecte.nome,
e.nome,d.nome
d.nome
from
from Empregadoeeinner
Empregado innerjoin
joinDepartamento
Departamentoddon
one.lotação=d.cod_depart
e.lotação=d.cod_depart
12
4
5. SQL
- Conjunto de Operações para Manipulação de Dados -
• Formas de Junção em SQL Avançado (cont.)
• Junção theta
• Exemplo
• Listar nome dos empregados com o nome do
SQLServer respectivo departamento. Listar os empregados
mesmo que estes não estejam lotados em nenhum Oracle
departamento.
select e.enome, d.dnome select e.enome, d.dnome
select e.enome, d.dnome select e.enome, d.dnome
from
fromeempresa.empregado
eempresa.empregadoe,e, from
fromeempresa.empregado
eempresa.empregadoe,e,
eempresa.departamento
eempresa.departamentodd eempresa.departamento
eempresa.departamentodd
where
wheree.cdep
e.cdep*=
*=d.codigo
d.codigo where
wheree.cdep
e.cdep(+)=
(+)=d.codigo
d.codigo
select
selecte.enome,
e.enome,d.dnome
d.dnome
from
fromeempresa.empregado
eempresa.empregadoeeleft
leftouter
outerjoin
joineempresa.departamento
eempresa.departamento
dd
on
one.cdep
e.cdep==d.codigo
d.codigo
12
5
5. SQL
- Conjunto de Operações para Manipulação de Dados -
• Formas de Junção em SQL Avançado (cont.)
• Junção theta
• Exemplo
• Listar nome dos empregados com o nome do
SQLServer respectivo departamento. Listar os departamentos
mesmo que estes não possuam nenhum empregado.Oracle
select
selecte.enome,
e.enome,d.dnome
d.dnome select
selecte.enome,
e.enome,d.dnome
d.dnome
from
fromeempresa.empregado
eempresa.empregadoe,e, from
fromeempresa.empregado
eempresa.empregadoe,e,
eempresa.departamento
eempresa.departamentodd eempresa.departamento
eempresa.departamentodd
where
wheree.cdep
e.cdep=*
=*d.codigo
d.codigo where
wheree.cdep
e.cdep=(+)
=(+)d.codigo
d.codigo
select
selecte.enome,
e.enome,d.dnome
d.dnome
from
fromeempresa.empregado
eempresa.empregadoeeright
rightouter
outerjoin
joineempresa.departamento
eempresa.departamento
dd
on
one.cdep
e.cdep==d.codigo
d.codigo
12
6
5. SQL
- Conjunto de Operações para Manipulação de Dados -
• Formas de Junção em SQL Avançado (cont.)
• Junção theta
• Exemplo
• Listar nome dos empregados com o nome do respectivo
departamento. Listar os empregados mesmo que estes não
SQLServer estejam lotados em nenhum departamento e os departamentos
mesmo que estes não possuam nenhum empregado. Oracle
select
selecte.enome,
e.enome,d.dnome
d.dnome select
selecte.enome,
e.enome,d.dnome
d.dnome
from
fromeempresa.empregado
eempresa.empregadoe,
e, from
fromeempresa.empregado
eempresa.empregadoe,e,
eempresa.departamento
eempresa.departamentodd eempresa.departamento
eempresa.departamentodd
where
wheree.cdep
e.cdep*=*
*=*d.codigo
d.codigo where
wheree.cdep
e.cdep(+)=(+)
(+)=(+)d.codigo
d.codigo
select
selecte.enome,
e.enome,d.dnome
d.dnome
from
fromeempresa.empregado
eempresa.empregadoeefull
fullouter
outerjoin
joineempresa.departamento
eempresa.departamento
dd
on
one.cdep
e.cdep==d.codigo
d.codigo
12
7
5. SQL
- Conjunto de Operações para Manipulação de Dados -
<tipo_junção> ::=
[ INNER | { { LEFT | RIGHT | FULL } [OUTER] } ] [ <join_hint> ]
JOIN
12
8
5. SQL
- Conjunto de Operações para Manipulação de Dados -
12
9
5. SQL
- Conjunto de Operações para Manipulação de Dados -
13
0
5. SQL
- Conjunto de Operações para Manipulação de Dados -
• Formas de Junção em SQL Avançado (cont.)
• Junção theta (INNER JOIN)
select
selecte.enome,
e.enome,d.dnome
d.dnome
from
fromeempresa.empregado
eempresa.empregadoeeinner
innerjoin
joineempresa.departamento
eempresa.departamento
ddon
one.cdep
e.cdep==d.codigo
d.codigo
where
wheree.salario
e.salario>>15000
15000
select
selecte.enome,
e.enome,d.dnome
d.dnome
from
fromeempresa.departamento
eempresa.departamentodd
inner
innerjoin
join(select
(select**from
fromeempresa.empregado
eempresa.empregadowhere
wheresalario
salario>>15000)
15000)ee
on
ond.codigo
d.codigo==e.cdep
e.cdep
select
selecte.enome,
e.enome,d.dnome
d.dnome
from
from(select
(select**from
fromeempresa.empregado
eempresa.empregadowhere
wheresalario
salario>>15000)
15000)ee
inner
innerjoin
join eempresa.departamento
eempresa.departamentodd
on
ond.codigo
d.codigo==e.cdep
e.cdep
13
1
5. SQL
- Conjunto de Operações para Manipulação de Dados -
13
2
5. SQL
- Conjunto de Operações para Manipulação de Dados -
13
3
5. SQL
- Conjunto de Operações para Manipulação de Dados -
select
selecte.nome,
e.nome,d.nome,
d.nome,p.nome
p.nome
from
from Departamento d innerjoin
Departamento d inner join(Dependente
(Dependenteppright
rightouter
outerjoin
join
Empregado e on p.matr_resp=e.matr) on d.cod_dep=e.lotação
Empregado e on p.matr_resp=e.matr) on d.cod_dep=e.lotação
13
4
5. SQL
- Conjunto de Operações para Manipulação de Dados -
13
5
5. SQL
- Conjunto de Operações para Manipulação de Dados -
13
6
5. SQL
- Visões -
13
7
5. SQL
- Visões -
• Tipos de visões
• Visão virtual
• A definição da visão é armazenada
• Dados da visão não são persistentes
• Sempre que referenciada
• Os dados são materializados
• Custo praticamente igual a cada materialização
• Quanto ao acesso
• Somente leitura
• Visões que só permitem acesso de leitura
• Permitem atualização
• Visões que permitem atualizações nas tabelas base
13
8
5. SQL
- Visões -
1
3
5. SQL
- Visões -
14
0
Renomeias as
5. SQL colunas da visão
- Visões -
• Exemplos
create
createview
vieweempresa.v1
eempresa.v1(nome_departamento,
(nome_departamento,nome_empregado)
nome_empregado)
as
as
select
selectd.dnome,
d.dnome,e.enome
e.enome
from
fromeempresa.departamento
eempresa.departamentoddinner
innerjoin
joineempresa.empregado
eempresa.empregadoee
on
ond.codigo
d.codigo==e.cdep
e.cdep
select
select**from
fromeempresa.v1
eempresa.v1
select
select** O mesmo
comando SQL
from
from(( que define a visão
select v1
selectd.dnome,
d.dnome,e.enome
e.enome
from
fromeempresa.departamento
eempresa.departamentoddinner
innerjoin
join
eempresa.empregado
eempresa.empregadoee
on
ond.codigo
d.codigo==e.cdep
e.cdep
))as
astab
tab 14
1
Renomeias as
5. SQL colunas da visão
- Visões -
• Exemplos
create
createview
vieweempresa.v1
eempresa.v1(nome_departamento,
(nome_departamento,nome_empregado)
nome_empregado)
as
as
select
selectd.dnome,
d.dnome,e.enome
e.enome
from
fromeempresa.departamento
eempresa.departamentoddinner
innerjoin
joineempresa.empregado
eempresa.empregadoee
on
ond.codigo
d.codigo==e.cdep
e.cdep
select
selectnome_empregado
nome_empregado
from
fromeempresa.v1
eempresa.v1
where
wherenome_departamento
nome_departamento=='Marketing'
'Marketing'
14
2
Renomeias as
5. SQL colunas da visão
- Visões -
• Exemplos
create
createview
vieweempresa.v2
eempresa.v2(nome_empregado,
(nome_empregado,
numero_de_dependentes)
numero_de_dependentes)
as
as
select
selecte.enome,
e.enome,(select
(selectcount(*)
count(*)from
fromeempresa.dependente
eempresa.dependenteddwhere
where
d.cpf_responsavel
d.cpf_responsavel==e.cpf)
e.cpf)
from
fromeempresa.empregado
eempresa.empregado ee
select * from eempresa.v2
select * from eempresa.v2
select
select**
from
fromeempresa.v2
eempresa.v2
where
wherenumero_de_dependentes
numero_de_dependentes>>00
14
3
Renomeias as
5. SQL colunas da visão
- Visões -
• Exemplos
create
createview
vieweempresa.v3
eempresa.v3(nome_empregado,
(nome_empregado,salario)
salario)
as
as
select
selectenome,
enome,salario
salario
from
fromeempresa.empregado
eempresa.empregadoee
where
wheresalario
salario<<15000
15000with
withcheck
checkoption
option
select
select**from
fromeempresa.v3
eempresa.v3
select
select**
from
fromeempresa.v3
eempresa.v3
where
wheresalario
salario>>10000
10000
14
4
Renomeias as
5. SQL colunas da visão
- Visões -
• Exemplos
create
createview
vieweempresa.v3
eempresa.v3(nome_empregado,
(nome_empregado,salario)
salario)
as
as
select
selectenome,
enome,salario
salario
from
fromeempresa.empregado
eempresa.empregadoee
where
wheresalario
salario<<15000
15000with
withcheck
checkoption
option
update
updateeempresa.v3
eempresa.v3
set
setsalario
salario==salario
salario++1000
1000
select
select**from
fromeempresa.v3
eempresa.v3
update
updateeempresa.v3
eempresa.v3
set
setsalario
salario==salario
salario++1500
1500
select
select**from
fromeempresa.empregado
eempresa.empregado
14
5
5. SQL
- Visões -
• Exemplos
• Acessando o banco de dados através de visões
select * from V3
nome_empregado salário
----------------------------------- ------------------------
caio 10000
rebeca 13000
14
6
5. SQL
- Visões -
14
7
5. SQL
- Visões -
14
8