Escolar Documentos
Profissional Documentos
Cultura Documentos
DADOS
Professor: Renato Augusto dos Santos Cortes
Índice
Apresentação ................................................................................................................................ 7
Aula 1: Modelo relacional ............................................................................................................. 9
Introdução ............................................................................................................................. 9
Conteúdo .............................................................................................................................. 10
Conceitos do modelo relacional .................................................................................. 10
Definição matemática de relação................................................................................. 10
Conceitos do modelo relacional .................................................................................. 11
Projeto (design) de bancos de dados .......................................................................... 12
Exemplo de diagrama de entidades e relacionamentos (modelo conceitual) .... 12
Exemplo de relações ou tabelas (modelo físico) ....................................................... 13
Conceitos .......................................................................................................................... 13
Regras de integridade do modelo relacional ............................................................. 15
Atividade Proposta .......................................................................................................... 16
Referências........................................................................................................................... 17
Exercícios de fixação ......................................................................................................... 17
Notas ........................................................................................................................................... 20
Chaves de resposta ..................................................................................................................... 20
Aula 1 ..................................................................................................................................... 20
Exercícios de fixação ....................................................................................................... 20
Aula 2: Álgebra relacional ........................................................................................................... 22
Introdução ........................................................................................................................... 22
Conteúdo .............................................................................................................................. 23
Introdução......................................................................................................................... 23
Álgebra relacional ............................................................................................................ 23
Operadores da álgebra relacional ................................................................................ 24
Classificações da álgebra relacional quanto à sua origem ...................................... 24
Classificações da álgebra relacional quanto ao número de relações ................... 24
Classificações da álgebra relacional quanto à área matemática............................ 25
Operações primitivas da álgebra relacional ............................................................... 25
Operação de projeção .................................................................................................... 25
Operação de seleção ...................................................................................................... 27
Operação de projeção com seleção ............................................................................ 28
Produto Cartesiano ......................................................................................................... 29
Apresentação
As instituições hoje têm nos seus dados o mais precioso ativo. Quem tem o
domínio sobre suas informações tem grande vantagem competitiva. O grande
desafio reside em lidar com os grandes volumes de dados gerados pelo mundo
moderno. Armazenar, recuperar e manipular os dados das organizações é
missão crítica.
Objetivo:
1. Apresentar os conceitos do Modelo Relacional;
2. Descrever as regras de integridade do Modelo Relacional.
Exemplo:
A = {1, 2, 3, 4, 5}
B = {2, 3, 4, 6, 7}
Atenção
Esquema de Banco de Dados Relacional = Nomes das relações
seguidos pelos nomes dos atributos, com os atributos chaves
sublinhados e com as chaves estrangeiras identificadas (duplo
sublinhado).
Conceitos
Entenda o conceito de cada item de uma relação:
Atributo identificador
O atributo ou conjunto de atributos que será utilizado para identificar instâncias
de uma entidade faz parte do modelo conceitual.
Chave
Designa o conceito de item de busca, isto é, um atributo ou conjunto de
atributos que será utilizado nas consultas à base de dados. É um conceito
lógico da aplicação.
Obs.: Uma chave pode ser utilizada como índice, mas um índice não é,
necessariamente, uma chave.
Chave candidata
Deve ser única, ou seja, nenhuma tupla de uma mesma relação pode ter o
mesmo valor para o atributo escolhido como chave candidata. Deve ser
irredutível, nenhum subconjunto da chave candidata pode ter sozinho a
propriedade de ser único. Pode ser:
Chave primária
É um caso especial da chave candidata. É a escolhida entre as candidatas para
identificar unicamente uma tupla.
Chave estrangeira
É quando um atributo de uma relação é chave primária em outra. Constitui
um conceito de vital importância no modelo relacional: é o elo lógico entre as
tabelas (relacionamentos).
Regras de integridade
a) Domínio
b) Chave
c) Entidade
d) Referencial
Integridade de domínio
Especificam que dentro de cada tupla o valor de cada atributo deve ser um
valor atômico. Os tipos de dados associados aos domínios incluem:
Integridade de entidade
O valor da chave não pode ser vazio (nulo). A chave primária serve como
representante na base de dados de uma entidade – se a chave primária for
vazia, a linha não corresponde a nenhuma entidade.
Integridade referencial
Integridade semântica
Atividade Proposta
(AOCP/BRDE – 2011 - ANALISTA DE SISTEMAS) Na terminologia formal do
modelo relacional, encontramos os seguintes termos: tupla, atributo, relação e
domínio. Defina-os individualmente.
Referências
ELMASRI, R.; NAVATHE, S., Sistemas de banco de dados. 4. ed. Pearson
Education do Brasil, 2005.
SILBERSCHATZ, Abraham; KORTH, Henry F; SUDARSHAN, S. A. 5. ed. Sistema
de banco de dados. Rio de Janeiro: Campus, 2006.
Exercícios de fixação
Questão 1
Em relação ao modelo relacional, marque a alternativa correta.
a) A chave estrangeira não precisa ser única, mas não pode ser nula.
b) O domínio de um atributo corresponde ao seu tipo de dado.
c) O valor de um atributo de uma tupla é nulo quando o seu valor é
desconhecido.
d) A integridade referencial é garantida através da chave primária.
e) Uma chave pode ser um índice, mas um índice é obrigatoriamente uma
chave.
Questão 2
Em relação aos conceitos apresentados, marque a alternativa correta.
a) Uma relação ou tabela é composta apenas por linhas ou tuplas de dados.
Questão 3
Em relação as chaves, marque a alternativa correta.
a) A chave candidata não precisa ser única.
b) A chave candidata é um caso especial da chave primária.
c) A chave estrangeira ocorre quando um atributo é chave estrangeira em
outra relação.
d) Um índice é recurso lógico para otimizar a recuperação de uma
informação.
e) Uma chave estrangeira é o elo lógico entre as tabelas (relacionamentos).
Questão 4
Em relação ao Modelo Relacional, marque a alternativa incorreta.
a) O Modelo Relacional foi proposto pelo pesquisador Edgar F. Codd na
década de 1990.
b) O Modelo Relacional tem seus fundamentos na teoria de conjuntos.
c) O nome da tabela e os nomes das colunas são usados para ajudar na
interpretação do significado dos valores em cada linha da tabela.
d) Uma linha é também chamada de tupla.
e) Uma coluna é também chamada de atributo.
Questão 5
São etapas do projeto de Banco de Dados, exceto:
a) Coleta e análise de requisitos de dados
b) Análise de requisitos funcionais
c) Projeto físico
d) Projeto conceitual
Questão 6
São Regras de Integridade, exceto.
a) Domínio
b) Chave
c) Entidade
d) Referencial
e) Índice
Questão 7
Os seguintes tipos de dados podem estar associados a um domínio, exceto:
a) Inteiros
b) Símbolos
c) Números reais
d) Caracteres booleanos
e) Cadeias de caracteres
Questão 8
Em relação a regra de integridade da entidade e referencial, podemos afirmar:
a) O valor da chave primária pode ser vazio.
b) A chave primária não serve como representante de uma entidade.
c) O valor da chave estrangeira deve existir na tabela onde o atributo
relacionado é chave primária.
d) A chave estrangeira não pode ser nula.
e) A chave estrangeira não pode conter valores duplicados.
Questão 9
A afirmação “O salário do servidor público não pode ultrapassar o salário do
presidente da república” está associada ao seguinte termo:
a) Restrição de chave primária
b) Integridade referencial
Notas
Atributo identificador: Conjunto de atributos que será utilizado para
identificar instâncias de uma entidade.
Chave Estrangeira (Foreing Key): Mecanismo que permite a implementação
de relacionamentos no modelo relacional.
Chave Primária (Primary Key): Um campo ou conjunto de campos
escolhidos pelo projetista do banco de dados como de significado principal para
a identificação exclusiva de um registro dentro de uma tabela de dados.
Chave: Designa o conceito de item de busca.
Domínio (Domain): Conjunto de valores que um determinado atributo (ou
campo) pode assumir.
Índice: Recurso físico que visa otimizar a recuperação de uma informação.
Integridade Referencial: Utilizada para garantir a integridade dos dados
entre tabelas relacionadas.
Regras de integridade: Regras que estabelecem quando uma base de dados
está correta.
Chaves de resposta
Aula 1
Exercícios de fixação
Questão 1 - C
Justificativa: Um valor nulo significa ausência de valor ou valor desconhecido.
Questão 2 - D
Justificativa: O número de atributos da relação corresponde ao seu grau.
Questão 5 - B
Justificativa: A análise de requisitos funcionais não é uma etapa do projeto de
banco de dados.
Questão 6 - E
Justificativa: Não existe regra de integridade chamada Índice.
Questão 7 - B
Justificativa: Símbolos não correspondem a um tipo de dados associado a um
domínio.
Questão 8 - C
Justificativa: Se existe um determinado valor para o atributo na tabela onde ele
é chave estrangeira, esse valor deve existir na tabela onde ele é chave
primária.
Questão 9 - D
Justificativa: Restrições de integridade semântica ou regras do negócio.
Objetivo:
1. Conhecer o conceito de álgebra relacional, operações de seleção e projeção;
2. Realizar operações de conjunto, produto cartesiano e junção.
Introdução
A álgebra relacional pode ser definida como uma linguagem de consulta formal,
uma coleção de operações de alto nível sobre relações ou conjuntos. O
pesquisador E. F. Codd propôs tal álgebra como a base das linguagens de
consulta de banco de dados em seu modelo relacional de, dados visto na Aula
1.
Álgebra Relacional
Linguagem procedural.
Cálculo Relacional
Álgebra relacional
Provê um fundamento formal para operações do modelo relacional.
Operação de projeção
Representada pela letra grega PI, é uma operação que produz um subconjunto
com os atributos passados como argumento e com todas as linhas do conjunto
inicial. É classificada como uma operação unária por operar sobre apenas um
conjunto de entrada.
Exemplo 1:
Mostrar o nome de todos os funcionários.
π NOME (FUNCIONÁRIO)
Exemplo 2:
Mostrar o nome e a data de admissão de todos os funcionários.
σ predicado (nome_tabela)
Exemplo 1:
Selecionar os funcionários que são analistas (código do cargo ‘AN’)
σ CODCARGO=’AN’ (FUNCIONÁRIO)
Exemplo 2:
Selecionar os funcionários que são analistas (código do cargo ‘AN’) e que
pertencem ao departamento de Tecnologia da Informação (código do
departamento ‘TI’)
Exemplo 1:
Selecionar a matrícula e o nome dos funcionários admitidos após o ano de
2001.
Produto Cartesiano
O produto cartesiano de duas relações ou tabelas tem como resultado uma
terceira relação contendo todas as combinações possíveis entre os elementos
das relações originais.
Exemplo 1:
Produto cartesiano de funcionários e cargos.
Resultado:
Exemplo 1:
Selecionar o nome do funcionário e a descrição do seu cargo (atributo
DESC_CARGO) para funcionários admitidos à partir de 2003.
Exemplo 1:
Relacionar o nome dos clientes que têm conta ou empréstimo.
Exemplo 1:
Relacionar o nome dos clientes que têm conta e empréstimo.
Resultado:
R1 = π NOME (σ CLIENTE.COD_CLI=CONTA.COD_CLI (CLIENTE X CONTA))
R3 = R1 ∩ R2
Exemplo 1:
Relacionar todas as informações dos clientes que têm empréstimos.
Resultado:
Exemplo 1:
Relacionar o nome e CPF dos clientes do Rio de Janeiro que têm empréstimos.
Atividade proposta
Atividade 1
Dadas às relações, escreva as sentenças da Álgebra Relacional que respondem
às questões propostas.
As relações são:
AGÊNCIA
Código Nome Cidade
01 Centro Rio de Janeiro
02 Arariboia Niterói
03 Centro Rio de Janeiro
04 Centro São Gonçalo
CLIENTE
Código Nome Cidade
01 Luiz Niterói
02 João Niterói
03 Ana Rio de Janeiro
04 Maria Rio de Janeiro
05 Pedro Rio de Janeiro
06 João Rio de Janeiro
07 Mário Rio de Janeiro
08 Renato São Gonçalo
09 Felipe São Gonçalo
10 Kátia São Gonçalo
EMPRÉSTIMO
Número Cód_cliente Cód_agência Quantia
01 01 01 100,00
02 01 04 300,00
03 06 01 100,00
CONTA
Número Cód_cliente Cód_agência Saldo
01 01 01 100,00
02 07 01 400,00
03 02 01 200,00
04 03 02 300,00
05 08 02 200,00
06 04 02 300,00
07 04 03 400,00
08 03 03 300,00
09 07 04 100,00
10 02 04 100,00
11 09 04 200,00
Chave de resposta:
a) π cod_cli,cod_ag (squantia > 300,00 (EMPRÉSTIMO))
b) π cod_cli (σcod_ag = 04 (CONTA) - πcod_cli (σcod_ag = 04 (EMPRESTIMO)
Material complementar
Exercícios de fixação
Questão 1
Em relação a álgebra relacional, marque a alternativa correta.
a) Corresponde a uma coleção de operações de baixo nível sobre relações.
b) É a base das linguagens de consulta a banco de dados.
c) Só existem operadores primitivos.
d) Não pode ser utilizada para otimizar consultas em SGBDR.
e) É linguagem declarativa, não procedural.
Questão 2
Em relação aos operadores da álgebra relacional, marque a alternativa correta.
a) Podem ser classificados quanto a origem, número de relações e área
matemática.
b) São operadores derivados: interseção, junção e projeção.
c) São exemplos de operadores renomeação, alteração e seleção.
d) Os operadores primitivos são definidos para facilitar certos
procedimentos.
e) Os operadores união, interseção, diferença e seleção são binários.
Questão 3
Sobre os operadores da álgebra relacional, marque a alternativa incorreta.
a) São exemplos de operadores usuais da teoria de conjuntos da
matemática: união, interseção, diferença e produto cartesiano.
b) São funções matemáticas de agregação: soma, média, máximo e
mínimo.
Questão 4
Seja a tabela ALUNO (MAT, NOME, END, SEXO, DT_NASC). A sentença da
álgebra relacional que responde à proposição “Recuperar a matrícula e o nome
de todos os alunos do sexo masculino (atributo SEXO = ‘M’) é:
a) π MAT, NOME (π SEXO=’M’ (ALUNO)).
b) σ SEXO=’M’ (ALUNO).
c) π MAT, NOME (σ SEXO=’M’ (ALUNO)).
d) σ MAT, NOME (π SEXO=’M’ (ALUNO)).
e) π SEXO=’M’ (ALUNO).
Questão 5
Seja a tabela ALUNO (MAT, NOME, END, SEXO, DT_NASC). A sentença da
álgebra relacional que responde à proposição “Recuperar o nome de todos os
alunos nascidos no ano 2000) é:
a) σ NOME (π DT_NASC ≥ ’01/01/2000’ v DT_NASC ≤ ’31/12/2000’
(ALUNO)).
b) π NOME (σ DT_NASC > ’01/01/2000’ ^ DT_NASC < ’31/12/2000’
(ALUNO)).
c) π NOME (σ DT_NASC = ’2000’ (ALUNO)).
d) π NOME (σ DT_NASC ≥ ’01/01/2000’ ^ DT_NASC ≤ ’31/12/2000’
(ALUNO)).
e) π NOME (σ DT_NASC ≥ ’01/01/2000’ (ALUNO)).
Questão 6
A relação resultante do produto cartesiano de uma relação 1 que possua 7
colunas e 4 linhas com uma relação 2 com 3 colunas e 6 linhas terá:
a) 11 colunas e 18 linhas.
b) 10 colunas e 24 linhas.
c) 13 colunas e 7 linhas.
Questão 7
A expressão π NOME (σ
FUNCIONARIO.CODCARGO=CARGO.CODCARGO(FUNCIONARIO X CARGO))
representa:
a) Um Produto Cartesiano com Projeção e Seleção.
b) Uma Junção.
c) Somente um Produto Cartesiano.
d) Uma Junção Natural.
e) Somente uma Seleção e Projeção.
Questão 8
Qual operação da Álgebra Relacional produz como resultado uma relação que
contém, sem repetições, todos os elementos que são comuns às duas tabelas
fornecidas como operandos?
a) União
b) Diferença
c) Interseção
d) Junção Natural
e) Projeção
Questão 9
Em uma operação de Diferença é necessário que:
a) As relações satisfaçam a condição de junção.
b) As relações possuam o mesmo número de linhas.
c) Seja possível realizar uma operação de Junção Natural.
d) Apenas uma relação esteja envolvida.
e) As relações possuam o mesmo número de atributos.
Questão 10
Chaves de resposta
Aula 2
Exercícios de fixação
Questão 1 - B
Justificativa: Conforme proposto por E.F. Codd.
Questão 2 - A
Justificativa: Os operadores da álgebra relacional podem ser classificados
quanto a origem, número de relações e área matemática.
Questão 3 - D
Justificativa: O símbolo ← representa uma operação de atribuição e não de
renomeação.
Questão 4 - C
Justificativa: A combinação das operações de projeção e seleção tem a sintaxe:
π nome_coluna(s) (σ predicado (nome_tabela)).
Questão 5 - D
Questão 6 - B
Justificativa: Terá 7+3= 10 colunas e 4*6= 24 linhas.
Questão 7 - A
Justificativa: Produto Cartesiano combinado com as operações de Projeção e
Seleção.
Questão 8 - C
Justificativa: A interseção produz como resultado uma relação que contém, sem
repetições, todos os elementos que são comuns às duas tabelas fornecidas
como operandos.
Questão 9 - E
Justificativa: A interseção produz como resultado uma relação que contém, sem
repetições, todos os elementos que são comuns às duas tabelas fornecidas
como operandos.
Questão 10 - D
Justificativa: Uma operação de junção onde os atributos da condição de junção
tenham o mesmo nome pode ser substituída por uma junção natural.
Objetivo:
1. Introduzir a linguagem SQL e suas divisões sintáticas;
2. Conhecer a Linguagem de Definição de Dados (DDL).
Dr. E. F. Codd
Historicamente, a SQL foi desenvolvida pela IBM, nos anos 70, dentro do
Projeto R, como parte da pesquisa do Dr. E. F. Codd, que visava demonstrar a
viabilidade da implementação do modelo relacional. Originalmente, a linguagem
se chamava SEQUEL, acrônimo para “Structured English Query Language”
(Linguagem de Consulta Estruturada), e foi desenvolvida para acesso ao
System R, sistema de banco de dados construído pela IBM no seu Centro de
Pesquisas de Almaden, em San Jose, Califórnia.
DDL
DML
DCL
DTL
DQL
VARCHAR(n)
INT ou INTEGER
NUMERIC(t, d)
REAL
DOUBLE PRECISION
FLOAT(n)
DATE
TIME
nome_tabela
(nome_coluna tipo [NOT NULL] [SET DEFAULT valor],
....,
PRIMARY KEY (nome_colunas),
[UNIQUE (nome_coluna)],
[FOREIGN KEY (nome_coluna)
REFERENCES nome_tabela (nome_coluna)]
[CHECK condição])
UNIQUE
PRIMARY KEY
Garante que uma coluna (ou combinação de duas ou mais colunas) tem uma
identidade única, que permite encontrar uma determinada linha da tabela.
FOREIGN KEY
Garante a integridade referencial dos dados em uma tabela para coincidir com
os valores da tabela referenciada.
CHECK
DEFAULT
Sintaxe
Sintaxe
Atenção
A cláusula ASC é padrão e não precisa ser especificada. Significa
que os valores no índice estarão em ordem ascendente. A
cláusula DESC indica que os valores no índice estarão em ordem
descendente.
Referências
ELMASRI, R.; NAVATHE, S. Sistemas de Banco de Dados. 4ª ed. Pearson
Education do Brasil, 2005.
SILBERSCHATZ, Abraham; KORTH, Henry F; SUDARSHAN, S. A. Sistema de
banco de dados. 5ª ed. Rio de Janeiro: Campus, 2006.
Questão 2
A respeito dos recursos da linguagem SQL, marque verdadeiro (V) ou falso (F).
( ) Tem alto poder de consulta.
( ) Permite o gerenciamento de índices.
( ) Não pode estar em linguagem hospedeira.
( ) Permite a construção de visões.
( ) Não permite a execução em blocos.
a) V-V-F-V-F
b) F-F-F-V-V
c) V-F-F-V-F
d) V-V-F-V-V
e) F-V-F-V-F
Questão 3
São subconjuntos de comandos da linguagem SQL, exceto:
a) DDL
b) DML
c) DCL
d) DSL
e) DQL
Questão 5
Veja o esquema da tabela ALUNO (MAT CHAR(5) Chave Primária, NOME
VARCHAR(50) não nulo, CODCURSO CHAR(2)). Marque a alternativa que
corresponde à sentença para criação da referida tabela.
a) CREATE TABLE ALUNO(MAT VARCHAR(5) primary key, NOME CHAR(50)
NULL, CODCURSO CHAR(2))
b) CREATE TABLE ALUNO(MAT CHAR(5) primary key, NOME VARCHAR NOT
NULO, CODCURSO VARCHAR))
c) CREATE TABLE ALUNO(MAT CHAR(5) primary key, NOME VARCHAR(50)
NOT NULL, CODCURSO CHAR(2))
d) CREATE TABLE ALUNO(MAT CHAR(5) foreign key, NOME CHAR(50) NOT
NULL, CODCURSO CHAR(2))
e) CREATE TABLE ALUNO(MAT VARCHAR primary key, NOME CHAR NOT
NULL, CODCURSO INT)
Questão 6
Marque verdadeiro (V) ou falso (F) nas afirmativas a respeito das restrições em
SQL.
( ) UNIQUE – Garante que uma linha de uma coluna contém valores únicos.
( ) PRIMARY KEY – Garante a integridade referencial dos dados em uma
tabela.
( ) CHECK – Garante que o valor em uma coluna atende a uma condição
específica.
( ) DEFAULT – Especifica um valor padrão quando não há valor para a coluna.
Questão 7
A sentença ALTER TABLE CURSO DROP COLUMN MensC realiza a seguinte
operação:
a) Exclui a tabela CURSO.
b) Adiciona a coluna MensC à tabela CURSO.
c) Altera a coluna MensC da tabela CURSO.
d) Exclui a coluna MensC da tabela CURSO.
e) Trunca a tabela CURSO.
Questão 8
A sentença CREATE INDEX IDX_SAL ON ALUNO (SALARIO DESC) realiza a
seguinte operação:
a) Cria o índice IDX_SAL na coluna SALARIO da tabela ALUNO, em ordem
descendente.
b) Cria o índice IDX_SAL na coluna ALUNO da tabela SALARIO, em ordem
descendente.
c) Cria o índice IDX_SAL na coluna SALARIO da tabela ALUNO, em ordem
crescente.
d) Cria o índice IDX_SAL na tabela ALUNO, sem ordenação específica.
e) Cria o índice SALARIO na coluna IDX_SAL da tabela ALUNO, em ordem
descendente.
Questão 2 - A
Justificativa: A linguagem SQL pode estar em linguagem hospedeira e permite a
execução em blocos.
Questão 3 - D
Justificativa: DSL não é um subconjunto de comandos da SQL.
Questão 4 - C
Justificativa: Double Real não é um tipo de domínio da SQL.
Questão 5 - C
Justificativa: A sintaxe correta é CREATE TABLE ALUNO(MAT CHAR(5) primary
key, NOME VARCHAR(50) NOT NULL, CODCURSO CHAR(2));
Questão 6 - C
Justificativa: Quem garante a integridade referencial é a FOREIGN KEY. NOT
NULL – Indica que uma coluna não pode armazenar valores nulos.
Questão 7 - D
Justificativa: ALTER TABLE CURSO DROP COLUMN col1 é a sentença correta
para excluir a coluna de uma tabela.
Questão 8 - A
Justificativa: A afirmativa correta é “Cria o índice IDX_SAL na coluna SALARIO
da tabela ALUNO, em ordem descendente”.
Objetivo:
1. Estudou a Linguagem de Manipulação de Dados (DML), sentenças de
inserção, atualização e exclusão de dados nas tabelas;
2. Realizar consultas simples.
Introdução
A linguagem de manipulação de dados é usada para modificar registros em um
banco de dados. As seguintes tabelas exemplo serão utilizadas.
Curso
CodC NomeC DuracaoC MensC
C5 Turismo 3 350
Disciplina
CodD NomeD CargaD AreaD PreReqD
D1 TLP1 2 Computação D2
D5 G. Analítica 5 Matemática D2
Professor
CodP NomeP CidadeP TituloP
C1 D6 P1 305
C2 D2 P2 305
C3 D2 P2 305
C4 D1 P5 201
C4 D3 P3 204
C5 D4 P3 204
C5 D4 P4 207
Sintaxe
INSERT
INTO nome_tabela (coluna1, coluna2, .... , colunaN)
VALUES (valor1, valor2, ... , valorN)
Os valores valor1 , valor2 etc. seguem a ordem dos campos da tabela, sendo
utilizado valor vazio (' ') ou a sentença NULL para campos que não necessitem
de preenchimento. Dados de tipo numérico podem ser escritos sem a
necessidade de aspas simples. Dados do tipo caractere (como char e varchar)
devem ser escritos entre aspas simples.
O comando Update pode ser realizado sem o WHERE. Neste caso todas as
linhas da tabela serão atualizadas com o valor determinado no comando. Para
os casos onde se necessite atualizar apenas linhas que cumpram determinada
condição, essa condição é estabelecida com a inclusão do comando WHERE.
Sintaxe
UPDATE nome_tabela
SET nome_coluna = valor, .....
[WHERE (condição de localização)
UPDATE Curso
SET MensC = 650
WHERE NomeC = ‘Ciência Comp’
O comando Delete pode ser realizado sem o WHERE. Neste caso todas as linhas
da tabela determinada serão excluídas. Utilizamos WHERE quando desejamos
eliminar os registros que obedeçam a certa condição.
Sintaxe
Conceito de transação
Uma TRANSAÇÃO é uma unidade de execução programada que acessa e
provavelmente atualiza vários itens de dados. Uma transação deve acessar uma
base de dados consistente. Durante a execução da transação é possível que a
base de dados passe por um estado de inconsistência. Quando a transação é
confirmada (COMMIT), a base de dados deverá estar consistente.
Consistência
Isolamento
Durabilidade
Depois que uma transação termina com sucesso, as alterações que ela realizou
sobre o banco de dados persistirão mesmo que haja falhas do sistema.
Controle de transações
Todas as transações realizadas com o banco deverão ser confirmadas pelo
usuário para que sejam realmente efetivadas, ou então descartadas, caso o
usuário deseje.
Comando SELECT
Linguagem de consulta de dados é usada para extrair informações de uma base
de dados. Em um banco de dados, selecionar dados significa efetuar uma
consulta enviando o comando que retornará com as informações solicitadas
(linhas de uma ou mais tabelas). Para efetuar essas consultas utilizamos o
comando SELECT.
Sintaxe
SELECT - operadores
A tabela a seguir mostra os principais operadores utilizados na sintaxe das
cláusulas que envolvem condições.
SELECT NOMED
FROM DISCIPLINA
Resultado
NOMED
TLP1
Cálculo 1
Inglês
Ed Física
SELECT SALA
FROM GRADE
Resultado
SALA
305
305
305
201
204
204
207
DISTINCT
A cláusula DISTINCT é usada para suprimir linhas duplicadas no resultado.
Resultado
SALA
305
201
204
WHERE
A cláusula WHERE permite aplicar condições para filtrar as linhas que retornam
da consulta. A condição deve respeitar o tipo de dado da coluna. Para colunas
com conteúdo do tipo caractere devem ser usadas aspas simples (‘ ‘) no objeto
de comparação. Para colunas com tipo numérico basta colocar o valor sem
aspas na comparação.
Resultado
NOME
Joaquim
André
CODP
P1
P#
Exemplo 5: Código e nome das disciplinas com carga horário maior ou igual a
5.
CODD
D5
D6
NOMED
G Analítica
Projeto Final
SELECT *
FROM GRADE
WHERE CODC = 'C4'
Resultado
CODC
C4
C4
CODD
D1
D3
CODP
P5
P3
Resultado
NOMEC
Análise Sist
Eng Mecatrônica
Ciência Comp
Eng Elétrica
Turismo
DURACAOC * 12
48
60
60
60
36
SELECT NOMEC
FROM CURSO
Resultado
NOMEC
Análise Sist
Ciência Comp
Turismo
Operadores lógicos
Critérios combinados podem ser especificados utilizando operadores lógicos
AND/OR.
Resultado
CODD
D5
CARGAD
5
Operador LIKE
Utilizado em consultas em atributos do tipo caractere para filtrar conteúdos
onde ocorrem sequências de strings. O caractere porcentagem (%) indica a
Resultado
CODC
C2
C4
NOMEC
Eng Mecatrônica
Eng Elétrica
Exemplo 11: As salas do segundo andar (número fica na casa dos 200) onde
serão ministradas aulas.
Operador BETWEEN
Utilizado quando é necessário recuperar linhas entre valores de um intervalo.
Os valores contidos no comando fazem parte do intervalo.
Exemplo 12: Código dos cursos cuja mensalidade está entre 400 e 550 reais.
SELECT CODC
FROM CURSO
WHERE MENSC BETWEEN 400 AND 550
Resultado
CODC
C1
C3
Operador IN
Utilizado quando para recuperar linhas onde os valores a serem comprados
estão em uma lista.
NOMED
TLP1
Inglês
Ed Física
Exemplo 14: Nome das disciplinas que não pertencem a nenhuma área
específica.
SELECT NOMED
FROM DISCIPLINA
WHERE AREAD IS NULL
Resultado
NOMED
Projeto Final
ALIAS
O alias é usado para substituir nomes na consulta. Existem dois tipos de alias:
de coluna e de tabela.
Resultado
NOMEC
Análise Sist
Eng Mecatrônica
Ciência Comp
Eng Elétrica
Turismo
DURACAO_MESES
48
60
60
60
36
Concatenação de campos
Utilizamos concatenação de campos quando é necessário combinar vários
campos diferentes em uma coluna de saída da consulta.
Exemplo 16: Códigos dos cursos com seu nome e mensalidade concatenados.
Resultado
CODC
C1
C2
C3
C4
C5
INFO_CURSO
Análise Sist 400 reais
Eng Mecatrônica 600 reais
Ciência Comp 450 reais
Eng Elétrica 600 reais
Turismo 350 reais
Ordenação do resultado
Para ordenar o resultado da consulta utilizamos a cláusula ORDER BY. É
possível ordenar o resultado em ordem crescente ou decrescente utilizando a
cláusula ASC ou DESC.
Resultado
NOMEC
Também é possível utilizar a posição da coluna para indicar a que coluna será
aplicada a cláusula ORDER BY.
Exemplo 18: Código e nomes dos cursos ordenados por nome de forma
decrescente.
Resultado
CODC
C5
C4
C2
C3
C1
NOMEC
Turismo
Eng Elétrica
Eng Mecatrônica
Ciência Comp
Análise Sist
Chave de resposta:
a. SELECT DISTINCT COD_SUPERV FROM FUNC.
b. SELECT COD_FUNC FROM FUNC WHERE COD_SUPERV IS NULL.
Referências
SILBERSCHATZ, Abraham; KORTH, Henry F; SUDARSHAN, S. A. Sistema de
banco de dados. 5. ed. Rio de Janeiro: Campus, 2006.
ELMASRI, R.; NAVATHE, S. Sistemas de banco de dados. 4. ed. Pearson
Education do Brasil, 2005.
Exercícios de fixação
Questão 1
Considere o esquema de uma empresa conforme segue:
Func (cod_func, nome, dta_nasc, salário, nro_depto, cod_superv)
Depto (nro_depto, nome)
Projeto (cod_proj, nome, duração, nro_depto)
Participa (cod_proj, cod_func, horas_trab)
O comando em SQL para inserir valores nas tabelas Depto e Projeto são:
a) INSERT INTO DEPTO VALUES (1, ‘Recursos Humanos’) e INSERT INTO
PROJETO VALUES (‘WEB’, ‘Nova Intranet’, 100, 1).
b) INSERT INTO DEPTO (1, ‘Recursos Humanos’) e INSERT INTO PROJETO
(‘WEB’, ‘Nova Intranet’, 100, 1).
c) INSERT INTO DEPTO, PROJETO VALUES (1, ‘Recursos Humanos’),
VALUES (‘WEB’, ‘Nova Intranet’, 100, 1).
d) INSERT DEPTO (1, 3) e INSERT PROJETO (‘WEB’, ‘Nova Intranet’).
e) INSERT PROJETO (1, 3) e INSERT DEPTO (‘WEB’, ‘Nova Intranet’).
Questão 3
Considere as tabelas da questão 1. O comando SQL para remover todas as
participações em projetos do funcionário 20:
a) DROP TABLE PARTICIPA WHERE COD_FUNC=20
b) TRUNCATE TABLE PARTICIPA
c) DELETE FROM PARTICIPA WHERE COD_FUNC=20
d) DELETE FROM PARTICIPA
e) ALTER TABLE PARTICIPA SET COD_FUNC=20
Questão 4
Marque verdadeiro (V) ou Falso (F) nas afirmativas abaixo.
( ) Uma transação deve acessar uma base de dados consistente.
( ) A afirmação “Ou todas ou nenhuma das operações da transação serão
devidamente refletidas na base de dados” tem relação com a atomicidade.
( ) Após a execução de uma transação, a base de dados pode estar
inconsistente.
( ) Para confirmar uma transação utiliza-se o comando COMMIT.
( ) Depois que uma transação termina com sucesso, as alterações que ela
realizou sobre o banco de dados não precisam persistir.
a) V-V-F-V-F
b) V-V-V-V-F
c) F-V-F-V-F
d) V-V-V-F-F
Questão 5
Considere o esquema de uma empresa conforme segue:
Func (cod_func, nome, dta_nasc, salário, nro_depto, cod_superv)
Depto (nro_depto, nome)
Projeto (cod_proj, nome, duração, nro_depto)
Participa (cod_proj, cod_func, horas_trab)
Marque a alternativa que contém o comando em SQL para recuperar o nome e
o salário dos funcionários do departamento 5, com salário na faixa entre 1000 e
2000.
a) SELECT NOME, SALARIO FROM FUNC WHERE SALARIO BETWEEN 1000
AND 2000
b) SELECT NOME, SALARIO FROM FUNC WHERE NRO_DEPTO = 5 AND
SALARIO BETWEEN 1000 AND 2000
c) SELECT NOME, SALARIO FROM FUNC WHERE NRO_DEPTO = 5
d) SELECT NOME, SALARIO FROM FUNC WHERE NRO_DEPTO = 5 OR
SALARIO BETWEEN 1000 AND 2000
e) SELECT NOME, SALARIO FROM FUNC WHERE SALARIO = 1000 AND
NRO_DEPTO BETWEEN 1 AND 5
Questão 6
Considere as tabelas da questão 1. Marque a alternativa que contém o
comando em SQL para obter o nome e o salário líquido (85% do salário bruto)
dos funcionários supervisionados pelo funcionário 23.
a) SELECT NOME, SALARIO FROM FUNC WHERE COD_FUNC=23.
b) SELECT NOME, (SALARIO * 0.85) AS SLIQ FROM FUNC WHERE
COD_SUPERV=23.
c) SELECT NOME, SALARIO FROM FUNC WHERE COD_SUPERV=23 AND
SALARIO=85.
d) SELECT NOME, SAL_LIQ FROM FUNC WHERE COD_SUPERV=23.
Questão 7
Considere as tabelas da questão 1. Marque a alternativa que contém o
comando em SQL para recuperar o nome completo, em ordem alfabética, dos
funcionários cujo nome inicia por “MAR”.
a) SELECT NOME FROM FUNC WHERE NOME LIKE ‘MAR%’.
b) SELECT NOME FROM FUNC WHERE NOME LIKE ‘%MAR’ ORDER BY
NOME.
c) SELECT NOME FROM FUNC WHERE NOME LIKE ‘MAR%’ ORDER BY
NOME ASC.
d) SELECT NOME FROM FUNC WHERE NOME LIKE ‘_MAR%’ ORDER BY
NOME DESC.
e) SELECT NOME FROM FUNC WHERE NOME LIKE ‘MAR%’ ORDER BY 2
DESC.
Questão 8
Considere as tabelas da questão 1. Marque a alternativa que contém o
comando em SQL para recuperar o código do projeto, duração e número dos
departamentos dos projetos “FATURAMENTO”, “INTRANET” e “NOVOS
PRODUTOS”.
a) SELECT COD_PROJ, DURACAO, NRO_DEPTO FROM PROJETO WHERE
NOME IN (‘FATURAMENTO’, ‘INTRANET’, ‘NOVOS PRODUTOS’).
b) SELECT COD_PROJ, DURACAO, NRO_DEPTO FROM PROJETO WHERE
NOME = (‘FATURAMENTO’, ‘INTRANET’, ‘NOVOS PRODUTOS’).
c) SELECT COD_PROJ, DURACAO FROM PROJETO WHERE NOME IS
(‘FATURAMENTO’, ‘INTRANET’, ‘NOVOS PRODUTOS’).
d) SELECT COD_PROJ FROM PARTICIPA WHERE NOME IN
(‘FATURAMENTO’, ‘INTRANET’, ‘NOVOS PRODUTOS’).
Chaves de resposta
Aula 4
Exercícios de fixação
Questão 1 - A
Justificativa: O comando SQL correto é: INSERT INTO DEPTO VALUES (1,
‘Recursos Humanos’) e INSERT INTO PROJETO VALUES (‘WEB’, ‘Nova Intranet’,
100, 1).
Questão 2 - D
Justificativa: A sentença para atualizar a tabela PROJETO e zerar o conteúdo da
coluna projeto das linhas do departamento 5 é UPDATE PROJETO SET SALARIO
= 0 WHERE NRO_DEPTO = 5.
Questão 3 - C
Justificativa: O comando para remover todas as participações em projetos do
funcionário 20 é DELETE FROM PARTICIPA WHERE COD_FUNC=20.
Questão 4 - A
Questão 5 - B
Justificativa: A sentença correta é SELECT NOME, SALARIO FROM FUNC
WHERE NRO_DEPTO = 5 AND SALARIO BETWEEN 1000 AND 2000.
Questão 6 - B
Justificativa: A sentença correta é SELECT NOME, (SALÁRIO * 1.85) AS SLIQ
FROM FUNC WHERE COD_SUPERV=23.
Questão 8 - A
Justificativa: A sentença correta é SELECT COD_PROJ, DURACAO, NRO_DEPTO
FROM PROJETO WHERE NOME IN (‘FATURAMENTO’, ‘INTRANET’, ‘NOVOS
PRODUTOS’);
Objetivo:
1. Apresentar funções de grupo, cláusulas GROUP BY e HAVING;
2. Explicar os comandos de junção, autojunção e operadores de conjunto;
3. Mostrar as subconsultas aninhadas, criação de visões e comandos
relacionados à linguagem de controle de dados (DCL).
Tabelas de exemplo
Como vimos na aula anterior, a linguagem de manipulação de dados é usada
para modificar registros em um banco de dados. Observe as seguintes tabelas
de exemplo:
Atenção
Exemplo: valor mínimo, máximo e médio das mensalidades dos
cursos cuja duração é de 4 anos.
SELECT MIN(MensC), MAX(MensC), AVG(MensC)
FROM Curso
WHERE DuracaoC = 4
Resultado:
Agrupamentos
A cláusula GROUP BY permite agrupar o conteúdo por uma ou mais colunas.
Cláusula having
A cláusula having seleciona grupos de linhas após as agregações e
agrupamentos serem efetuados.
Exemplo: salas que são utilizadas para mais de uma aula e as respectivas
quantidades destas.
SELECT *
FROM Grade, Disciplina
WHERE Disciplina.CodD = Grade.CodD
AND CodC = 'C4'
A sintaxe equivalente é:
SELECT *
FROM Grade INNER JOIN Disciplina
ON Disciplina.CodD = Grade.CodD
WHERE CodC = 'C4'
Resultado
Usando ALIAS
Podemos substituir o nome da relação dentro da consulta usando um ALIAS. As
referências à relação podem ser substituídas em qualquer local da consulta.
Exemplo: código, nome, carga horária, sala e curso das disciplinas que estão na
grade.
SELECT G.CodD, NomeD, CargaD, Sala, CodC
FROM Disciplina D, Grade G
WHERE D.CodD = G.CodD
Ou na sintaxe
SELECT G.CodD, NomeD, CargaD, Sala, CodC
FROM Disciplina D INNER JOIN Grade G
ON D.CodD = G.CodD
Autojunção
Ocorre quando uma relação faz junção com ela mesma.
Exemplo 1
Exemplo 2
Uma junção externa é uma seleção que não requer que os registros de uma
tabela possuam registros equivalentes em outra.
Resultado:
Resultado:
Operação de conjunto
UNION
INTERSECT
EXCEPT
Exemplo: encontra todos os clientes que possuam conta, mas não possuam
empréstimo.
Caso a consulta interna retorne apenas uma linha, podem ser usados
operadores lógicos na comparação (> , < , >= , <=,
<>) Quando mais de uma linha for encontrada no resultado interno, os
operadores IN, ANY, ALL, EXISTS que manipulam sobre conjuntos de valores
devem ser utilizados.
Exemplo 1: obter os nomes dos cursos com mensalidade maior que a média
das mensalidades entre os cursos.
Resultado:
AVG(MENSC)
480
NomeC MensC
Eng Mecatrônica 600
Eng Elétrica 600
Resultado:
NomeD AreaD
TLP1 Computação
Inglês Humanas
CodD
D1
D3
Operador ALL
Permite a uma consulta externa fazer comparações usando < ou > com os
elementos de um conjunto devolvido pela subconsulta. Este operador devolve
Exemplo: nomes dos cursos que possuam duração maior que todos os cursos
de mensalidade inferior a 500 reais.
SELECT NomeC
FROM Curso
WHERE DuracaoC ALL (SELECT DuracaoC FROM Curso WHERE MensC < 500)
Operador ANY
Permite a uma consulta externa fazer comparações usando < ou > com os
elementos de um conjunto devolvido pela subconsulta. Este operador devolve
TRUE se uma das linhas do conjunto satisfaz a condição, ou seja, devolve
FALSE se nenhuma satisfaz a condição. Pode ser negado com NOT.
Exemplo: nomes dos cursos que possuam duração maior que qualquer um dos
cursos de mensalidade inferior a 500 reais.
SELECT NomeC
FROM Curso
WHERE DuracaoC > ANY (SELECT DuracaoC FROM Curso WHERE MensC <
500)
Sintaxe:
CREATE VIEW nome_visão [(nome_coluna, ...)]
AS SELECT...
O comando SELECT de criação da visão não pode conter a cláusula ORDER BY.
Exemplo 1: visão para alunos consultarem os dados dos cursos sem mostrar os
valores das respectivas mensalidades.
– Não possuir junções, ou seja, ter sido criada sobre uma única tabela;
– Não possuir colunas derivadas de funções de agregação;
– Não possuir a cláusula DISTINCT na sua consulta;
– Não possuir as cláusulas GROUP BY ou HAVING na sua consulta.
A visão do exemplo 1 poderá ser usada para atualizar a tabela Curso, desde
que o usuário possua privilégios para isto; porém, a visão do exemplo 2 é
"read-only", pois é formada a partir de uma junção.
Remoção de visões
Comando GRANT
Concede acesso à base de dados e seus objetos.
Sintaxe: GRANT privilégio(s) ON objeto TO usuário(s)
Atenção
Vejamos também sobre o comando REVOKE
Este comando retira acesso à base de dados e aos seus
objetos.Sintaxe: REVOKE privilégio(s) ON tabela ou visão FROM
usuário(s)Exemplo: retirar todos os privilégios na tabela Grade
para os usuários Joao e Paulo.
Atividade proposta
Veja as seguintes tabelas:
FUNC (COD_FUNC, NOME, DTA_NASC, SALARIO, NRO_DEPTO, COD_SUPERV)
DEPTO (NRO_DEPTO, NOME)
PROJETO (COD_PROJ, NOME, DURACAO, NRO_DEPTO)
PARTICIPA (COD_PROJ, COD_FUNC, HORAS_TRAB)
Escreva o comando em SQL para criar uma visão chamada Func_Proj, contendo
o nome do funcionário, do seu departamento e dos projetos que ele participou.
Referências
ELMASRI, R.; NAVATHE, S., Sistemas de Banco de Dados. 4. Ed. Pearson
Education do Brasil, 2005.
SILBERSCHATZ, Abraham; KORTH, Henry F; SUDARSHAN, S. A. Sistema de
banco de dados. 5ª ed. Rio de Janeiro: Campus, 2006.
Exercícios de fixação
Questão 1
Considere o seguinte esquema de uma empresa:
Func (cod_func, nome, dta_nasc, salario, nro_depto, cod_superv)
Depto (nro_depto, nome)
Projeto (cod_proj, nome, duracao, nro_depto)
Participa (cod_proj, cod_func, horas_trab)
A opção que contém o comando em SQL para obter o maior e o menor salário
da empresa é:
a) SELECT MAX(SALARIO), MIN(SALARIO) FROM FUNC
b) SELECT MAIOR(SALARIO), MENOR(SALARIO) FROM FUNC
c) SELECT SUM(SALARIO), AVG(SALARIO) FROM FUNC
d) SELECT COUNT(SALARIO), AVG(SALARIO) FROM FUNC
e) SELECT MIN(SALARIO), MAX(SALARIO) FROM FUNC
Questão 2
Considere as tabelas da questão 1. A opção que contém o comando em SQL
para obter a média de salários de cada departamento da empresa é:
a) SELECT AVG(SALARIO) FROM DEPTO
Questão 3
Considere as tabelas da questão 1. A opção que contém o comando em SQL
para obter a quantidade de funcionários em cada departamento onde a média
salarial seja maior ou igual a R$ 2.000,00 é:
a) SELECT NRO_DEPTO, COUNT(*) >=2000 FROM FUNC GROUP BY
NRO_DEPTO
b) SELECT COUNT(SALARIO) FROM FUNC HAVING AVG(SALARIO) >= 2000
c) SELECT NRO_DEPTO, SUM(COD_FUNC) FROM FUNC GROUP BY
NRO_DEPTO HAVING AVG(SALARIO) >= 2000
d) SELECT COUNT(SALARIO) FROM FUNC WHERE AVG(SALARIO >= 2000
e) SELECT NRO_DEPTO, COUNT(*) FROM FUNC GROUP BY NRO_DEPTO
HAVING AVG(SALARIO) >= 2000
Questão 4
Considere o seguinte esquema de uma empresa:
FUNC (COD_FUNC, NOME, DTA_NASC, SALARIO, NRO_DEPTO,
COD_SUPERV)
DEPTO (NRO_DEPTO, NOME)
PROJETO (COD_PROJ, NOME, DURACAO, NRO_DEPTO)
PARTICIPA (COD_PROJ, COD_FUNC, HORAS_TRAB)
Marque a alternativa que contém o comando em SQL utilizado para recuperar
os nomes dos funcionários e dos projetos que eles participaram.
a) SELECT NOME, NOME FROM PROJETO P, FUNC F WHERE P.COD_FUNC =
F.COD_FUNC
b) SELECT F.NOME, P.NOME FROM PARTICIPA PA, PROJETO P, FUNC F WHERE
PA.COD_PROJ=P.COD_PROJ AND PA.COD_FUNC = F.COD_FUNC
c) SELECT F.NOME, P.NOME FROM PROJETO P, FUNC F
Questão 5
Considere as tabelas da questão 1. Marque a alternativa que contém o
comando em SQL utilizado para obter os nomes dos funcionários que
participaram de projetos e os respectivos totais de horas trabalhadas.
a) SELECT F.NOME, TOTAL(HORAS_TRAB) FROM PARTICIPA PA, FUNC F
b) SELECT F.NOME, SUM(HORAS_TRAB) FROM PARTICIPA PA, FUNC F WHERE
PA.COD_FUNC = F.COD_FUNC
c) SELECT F.NOME, MAX(HORAS_TRAB) FROM PARTICIPA PA, FUNC F WHERE
PA.COD_FUNC = F.COD_FUNC GROUP BY F.NOME
d) SELECT F.NOME, SUM(HORAS_TRAB) FROM PARTICIPA PA, FUNC F WHERE
PA.COD_FUNC = F.COD_FUNC GROUP BY F.NOME
e) SELECT NOME, SUM(HORAS_TRAB) FROM PARTICIPA GROUP BY NOME
Questão 6
Considere as tabelas da questão 1. Marque a alternativa que contém o
comando em SQL para recuperar nomes dos funcionários e dos respectivos
supervisores.
a) SELECT F.NOME, S.NOME FROM FUNC F, FUNC S
b) SELECT F.NOME, S.NOME FROM FUNC F, FUNC S WHERE F.COD_FUNC =
S.COD_SUPERV
c) SELECT F.NOME, S.NOME FROM FUNC F, FUNC S WHERE F.COD_SUPERV =
S.COD_FUNC
d) SELECT F.NOME, F.NOME_SUPERV FROM FUNC F
e) SELECT F.NOME, PA.NOME FROM FUNC F, PARTICIPA PA WHERE
F.COD_FUNC = PA.COD_FUNC
Questão 7
Considere o seguinte esquema de uma empresa:
Questão 8
Considere as tabelas da questão 4. Marque a alternativa que contém o
comando em SQL utilizado para recuperar os nomes dos funcionários e
contratados que têm salário maior que R$ 1.500,00.
a) (SELECT NOME FROM FUNCIONARIO WHERE SALARIO > 1500) UNION
(SELECT NOME FROM CONTRATADO WHERE SALARIO > 1500)
b) (SELECT NOME FROM FUNCIONARIO WHERE SALARIO > 1500) INTERSECT
(SELECT NOME FROM CONTRATADO WHERE SALARIO > 1500)
c) (SELECT NOME FROM FUNCIONARIO WHERE SALARIO > 1500) JOIN
(SELECT NOME FROM CONTRATADO WHERE SALARIO > 1500)
d) (SELECT NOME FROM FUNCIONARIO WHERE SALARIO > 1500) EXCEPT
(SELECT NOME FROM CONTRATADO WHERE SALARIO > 1500)
e) SELECT F.NOME, C.NOME FROM FUNCIONARIO F, CONTRATADO C WHERE
SALARIO > 1500
Questão 10
Considere as tabelas da questão 1. Marque a alternativa que contém o
comando em SQL utilizado para retornar os códigos dos projetos cuja duração
foi menor que a de todos os projetos do departamento 5.
a) SELECT COD_PROJ FROM PROJETO WHERE DURACAO < (SELECT DURACAO
FROM PROJETO WHERE NRO_DEPTO = 5)
b) SELECT COD_PROJ FROM PROJETO WHERE DURACAO < ALL (SELECT
DURACAO FROM PROJETO WHERE NRO_DEPTO = 5)
c) SELECT COD_PROJ FROM PROJETO WHERE DURACAO IN (SELECT
DURACAO FROM PROJETO WHERE NRO_DEPTO = 5)
d) SELECT COD_PROJ FROM PROJETO WHERE DURACAO < NRO_DEPTO = 5
e) SELECT COD_PROJ FROM PROJETO WHERE EXISTS (SELECT DURACAO
FROM PROJETO WHERE NRO_DEPTO = 5)
Questão 12
Considere as tabelas da questão 1. Marque a alternativa que contém o
comando em SQL utilizado para eliminar todos os privilégios do usuário Pedro
na tabela Func.
a) REVOKE ALL ON FUNC FROM PEDRO
b) REVOKE PRIVILEGES ON FUNC FROM PEDRO
c) REVOKE PUBLIC ON FUNC FROM PEDRO
d) REVOKE ALL FROM PEDRO ON FUNC
e) REVOKE ALL ON PEDRO FROM FUNC
Notas
DCL: Data Control Language
SQL: Structured Query Language ou Linguagem de Consulta Estruturada.
Chaves de resposta
Aula 5
Exercícios de fixação
Questão 1 - A
Justificativa: O comando SQL correto é: SELECT MAX(SALARIO), MIN(SALARIO)
FROM FUNC.
Questão 3 - E
Justificativa: O comando SQL correto é: SELECT NRO_DEPTO, COUNT(*) FROM
FUNC GROUP BY NRO_DEPTO HAVING AVG(SALARIO) >= 2000.
Questão 4 - B
Justificativa: A sentença correta é SELECT F.NOME, P.NOME FROM PARTICIPA
PA, PROJETO P, FUNC F WHERE PA.COD_PROJ=P.COD_PROJ AND
PA.COD_FUNC = F.COD_FUNC.
Questão 5 - D
Justificativa: A sentença correta é SELECT F.NOME, SUM(HORAS_TRAB) FROM
PARTICIPA PA, FUNC F WHERE PA.COD_FUNC = F.COD_FUNC GROUP BY
F.NOME.
Questão 6 - C
Justificativa: A sentença correta é SELECT F.NOME, S.NOME FROM FUNC F,
FUNC S WHERE F.COD_SUPERV = S.COD_FUNC.
Questão 7 - E
Justificativa: A sentença correta é SELECT F.NOME, C.DECRICAO FROM
FUNCIONARIO F RIGHT OUTER JOIN CARGO C ON
F.COD_CARGO=C.COD_CARGO.
Questão 8 - A
Justificativa: A sentença correta é (SELECT NOME FROM FUNCIONARIO WHERE
SALARIO > 1500) UNION (SELECT NOME FROM CONTRATADO WHERE
SALARIO > 1500).
Questão 10 - B
Justificativa: A sentença correta é SELECT COD_PROJ FROM PROJETO WHERE
DURACAO < ALL (SELECT DURACAO FROM PROJETO WHERE NRO_DEPTO =
5).
Questão 11 - E
Justificativa: A sentença correta é GRANT INSERT ON FUNC TO PEDRO WITH
GRANT OPTION.ativa
Questão 12 - A
Justificativa: A sentença correta é REVOKE ALL ON FUNC FROM PEDRO.
Objetivo:
1. Conhecer os conceitos fundamentais de índices, sua importância e utilização;
os tipos de índices, índices ordenados, índices densos e esparsos, índice
multinível;
2. Definir um índice em SQL.
Atenção
Chave de busca – É um atributo ou conjunto de atributos para
pesquisar registros em um arquivo.
Um arquivo de índice consiste em registros (chamados entradas
de índice) na forma:
Índices ordenados
Índices de hash
Índice denso
Índice esparso
Índice secundário
Índice multinível
Se até mesmo o índice externo for muito grande para caber na memória
principal, outro nível de índice pode ser criado, e assim por diante. Os índices
em todos os níveis precisam ser atualizados na inserção ou exclusão no
arquivo.
Exemplo:
50 50 Marta 3000 EN
60 60 Tiago 5000 TI
Arquivo de Índice
Matrícula Ponteiro
10
30
50
Arquivo de Índice
Matrícula Ponteiro
10
20
30
40
50
60
Arquivo de Dados
Matrícula Nome Salário CodDepto
10 João 3000 RH
20 Maria 2500 RH
50 Marta 3000 EN
60 Tiago 5000 TI
Exemplo: Árvore B+
Casos especiais:
Se a raiz não for uma folha, ela tem pelo menos 2 filhos;
Se a raiz for uma folha (ou seja, não houver outros nós na árvore), ela
pode ter entre 0 e (n-1) valores.
Nó típico
• Pi são ponteiros para os filhos (para nós não de folha) ou ponteiros para
registros ou baldes de registros (para nós de folha);
Atenção
Cláusula UNIQUE
A utilização da cláusula UNIQUE permite garantir que os valores
no índice sejam únicos. Para isso é necessário que a coluna
referenciada contenha apenas valores distintos.
Exemplo 3: Criar um índice único chamado IDX_CPF na coluna
CPF da tabela FUNC.
CREATE INDEX IDX_CPF ON FUNC(CPF)
Comando DROP INDEX
Para eliminar o índice a sintaxe é: DROP INDEX nome_indice
Exemplo 3: Eliminar o índice IDX_NOME.
DROP INDEX IDX_NOME
Atividade proposta
Sabendo que a árvore B+ é uma variação da estrutura de dados da árvore B,
liste as suas principais características.
Chave de resposta:
• Todas as chaves são mantidas em folhas;
• As chaves são repetidas em nós não folha formando um índice;
Material complementar
Referências
SILBERSCHATZ, Abraham; KORTH, Henry F; SUDARSHAN, S. A. Sistema de
banco de dados. 5. ed. Rio de Janeiro: Campus, 2006.
ELMASRI, R.; NAVATHE, S., Sistemas de Banco de Dados. 4. ed. Pearson
Education do Brasil, 2005.
Exercícios de fixação
Questão 1
Um índice é uma estrutura auxiliar associada a uma tabela. Cria ponteiros para
os dados armazenados em colunas específicas para acelerar o tempo de acesso
às linhas de uma tabela. São exemplos de estruturas de índices, EXCETO:
a) Índice primário.
b) Índice de agrupamento.
c) Índices multiníveis.
d) Índice remissivo.
e) Tabelas hash.
Questão 2
A respeito dos índices sobre arquivos sequenciais, faça a associação entre as
colunas:
1. Índice Denso
2. Índice Esparso
Questão 3
A respeito da estrutura de dados Árvore B+, são verdadeiras as afirmativas,
EXCETO:
a) Todas as chaves são mantidas em folhas.
b) Tem como vantagem não gerar sobrecarga de espaço.
c) As chaves são repetidas em nós não folha formando um índice.
d) As folhas são ligadas oferecendo um caminho sequencial para percorrer
as chaves.
e) Reorganiza-se automaticamente com pequenas mudanças locais.
Questão 4
Seja a tabela participa(mat, codproj, horas_trab). O comando SQL para criar o
índice IDX_PARTICIPA sobre as colunas MAT e CODPROJ da tabela PARTICIPA
é:
a) CREATE INDEX IDX_PARTICIPA FROM PARTICIPA(MAT,CODPROJ).
b) CREATE INDEX PARTICIPA ON PARTICIPA(MAT).
c) CREATE INDEX IDX_PARTICIPA ON (MAT,CODPROJ).
d) CREATE INDEX PARTICIPA AS PARTICIPA(MAT,CODPROJ).
e) CREATE INDEX IDX_PARTICIPA ON PARTICIPA(MAT,CODPROJ).
Questão 5
Notas
Árvore B: Estrutura de dados projetada para funcionar especialmente em
memória secundária.
Árvore B+: Estrutura de dados do tipo árvore derivada das árvores B, mas
com uma forma diferente de armazenamento de suas chaves.
Chave de busca: Atributo para pesquisar registros em um arquivo.
Índices de hash: Chaves de busca são distribuídas uniformemente usando
uma "função de hash".
Índices ordenados: Chaves de busca são armazenadas em ordem
classificada.
Ponteiro: Indica o local de armazenamento dos itens indexados.
SQL: Structured Query Language ou Linguagem de Consulta Estruturada
Chaves de resposta
Aula 6
Exercícios de fixação
Questão 1 - D
Justificativa: Índice remissivo não é uma estrutura de índice.
Questão 2 - A
Justificativa: Definições de Índices Denso e Esparso.
Questão 4 - E
Justificativa: A sentença correta é CREATE INDEX_PARTICIPA ON
PARTICIPA(MAT,CODPROJ).
Questão 5 - C
Justificativa: A sentença correta é DROP INDEX IDX_PARTICIPA.
Objetivo:
1. Entender o conceito de transação, seus estados e propriedades ACID;
2. Executar transações concorrentes e controle de transação em SQL.
Introdução a transações
Um Sistema Gerenciador de Banco de Dados (SGBD) é um sistema de
processamento de operações de acesso ao Banco de Dados, são multiusuários
e processam simultaneamente operações disparadas por vários usuários e
deseja-se sempre alta disponibilidade e baixo tempo de resposta.
Conceito de transação
Assim, uma transação é uma unidade lógica de processamento em um SGBD,
composta por uma ou mais operações. Os limites de uma transação podem ser
determinados em SQL. De forma abstrata e simplificada, uma transação pode
ser encarada como um conjunto de operações de leitura e escrita de dados.
Operações de leitura/escrita
As operações de acesso ao banco de dados que uma transação pode fazer são:
read(x)
write(x)
Executar write(x)
Exemplo 1
Acesso concorrente ao dado x.
read(x);
x := x + M;
read(x);
x := x – N;
write(x);
Exemplo 2
Seja T1 uma transação que transfere 50 reais da conta A para a conta B.
Essa transação pode ser definida como:
T1: read(A);
A := A - 50;
write(A);
read(B);
B := B + 50;
write(B);
Ativa
Em processo de efetivação
Ativa
• Estado inicial de toda transação selecionada para execução enquanto ativa.
• Uma transação executa uma ou mais operações read e write.
Em processo de efetivação
• Entra nesse estado após executar sua última operação (solicitação de
commit).
• Neste momento o SGBD precisa garantir que as suas atualizações sejam
efetivadas com sucesso (não sofra falhas).
• São aplicadas técnicas de recuperação (recovery).
Efetivada
• Entra nesse estado após o SGBD confirmar que todas as modificações da
transação estão garantidas no BD (Commit OK).
• Exemplos: gravação em Log, descarga de todos os buffers em disco.
Em processo de aborto
Concluída
• Estado final de uma transação.
• Indica uma transação que deixa o sistema.
• As informações da transação mantidas em catálogo podem ser excluídas.
• Operações feitas, dados manipulados, buffers utilizados etc.
• Se a transação não foi concluída com sucesso, ela pode ser reiniciada
automaticamente.
TOMICIDADE
ONSISTÊNCIA
SOLAMENTO
URABILIDADE OU PERSISTÊNCIA
Atomicidade
Todas as operações da transação devem ser efetivadas com sucesso no banco
de dados ou nenhuma delas se efetiva. O objetivo é preservar a integridade do
banco de dados.
Consistência
Uma transação sempre conduz o banco de dados de um estado consistente
para outro estado também consistente.
A responsabilidade pode ser atribuída ao:
DBA
Definir todas as restrições de integridade (RIs) para garantir estados e
transições de estado válidos para os dados.
Exemplos: salário > 0; salário novo > salário antigo
Isolamento
No contexto de um conjunto de transações concorrentes, a execução de uma
transação Tx deve funcionar como se Tx executasse de forma isolada. A
transação Tx não deve sofrer interferências de outras transações executadas
concorrentemente.
COMMIT
SAVEPOINT
<nome_savepoint>
ROLLBACK TO SAVEPOINT
Exemplo 1:
INSERT INTO Depto (NRO_Depto, NomeDepto, Mat_Gerente)
VALUES (20, 'Engenharia', 5);
UPDATE Func SET salario = salario * 1.10
WHERE NRO_Depto = 8;
COMMIT;
DELETE FROM Func;
ROLLBACK;
Exemplo 2:
INSERT INTO Depto (NRO_Depto, NomeDepto, MAT_Gerente)
VALUES (21, 'TI', 4);
SAVEPOINT ponto1;
DELETE FROM Func;
ROLLBACK TO SAVEPOINT ponto1;
UPDATE Func SET salario = salario * 1.10
WHERE ID_Depto = 8;
COMMIT;
leitura (SELECT);
Quando uma transação altera o banco de dados, é feita uma cópia dos dados
anteriores à alteração em um local chamado segmento de rollback. Se uma
outra transação quiser acessar esses dados, serão acessados os dados que
estão no segmento de rollback.
Escalonamento 1 (válido)
T1 T2
1 read(A)
2 A=A-100
3 write(A)
4 read(A)
5 A=A+A*0,1
6 write(A)
7 read(B)
8 B=B+100
9 write(B)
10 read(B)
11 B=B-A
12 write(B)
Chave de resposta:
a)
Escalonamento 1: A=440 e B=160
Escalonamento 2: A=550 e B=50
b)
No escalonamento 2, a instrução 7 de T1, “write(A)”, interfere no valor de A da
transação T2.
Da mesma forma, a instrução 12 de T2, “write(B)”, interfere no valor de B da
transação T1.
Referências
SILBERSCHATZ, Abraham; KORTH, Henry F; SUDARSHAN, S. A. Sistema de
banco de dados. 5. ed. Rio de Janeiro: Campus, 2006.
ELMASRI, R.; NAVATHE, S. Sistemas de banco de dados. 4. ed. Pearson
Education do Brasil, 2005.
Questão 2
As propriedades de uma transação tem o objetivo de preservar a integridade
dos dados do banco de dados. São propriedades de uma transação, exceto:
a) Atomicidade
b) Consistência
c) Interferência
d) Durabilidade
e) Persistência
Questão 3
Uma transação não deve sofrer interferências de outras transações executadas
concorrentemente. A característica apresentada diz respeito à seguinte
propriedade das transações:
a) Concorrência
b) Isolamento
c) Efetivação
d) Persistência
e) Durabilidade
Questão 4
São operações de controle das transações, exceto:
a) Commit
b) Savepoint
Questão 5
Seja uma transação com os seguintes comandos em SQL:
INSERT INTO Cargo (CodCargo, Descricao) VALUES ('AN', 'Analista');
UPDATE Func SET salario = salario * 1.20 WHERE NRO_Depto = 10;
COMMIT;
DELETE FROM Func;
ROLLBACK;
Podemos afirmar que:
a) O cargo de analista é inserido, os salários dos funcionários do
departamento 10 são atualizados, mas nenhum funcionário é excluído.
b) O cargo de analista é inserido, os funcionários do departamento 10
recebem aumento de 2%, mas nenhum funcionário é excluído.
c) O cargo de analista é inserido, os salários dos funcionários do
departamento 10 são atualizados e todos os funcionários são excluídos.
d) O cargo de código ‘AN’ é inserido, os salários dos funcionários do
departamento 20 são atualizados, mas nenhum funcionário é excluído.
e) O cargo de código ‘AN’ é inserido, os salários dos funcionários do
departamento 10 são atualizados, mas o comando Rollback desfaz todas
as atualizações anteriores.
Questão 6
Considerando as afirmações abaixo, não é um problema que ocorre quando
transações concorrentes são executadas:
a) Perda de atualização
b) Atualização temporária (leitura suja)
c) Agregação incorreta
d) Em processo de efetivação
e) Leitura não repetitiva
Questão 2 - C
Justificativa: Interferência não é uma propriedade das transações.
Questão 3 - B
Justificativa: A característica apresentada é o isolamento.
Questão 4 - E
Justificativa: A sentença Update não é uma operação de controle das
transações.
Questão 5 - A
Justificativa: A afirmação correta é: “O cargo de analista é inserido, os salários
dos funcionários do departamento 10 são atualizados, mas nenhum funcionário
é excluído”.
Questão 6 - D
Justificativa: “Em processo de efetivação” é um estado válido de uma
transação.
Objetivo:
1. Conhecer o conceito de performance em Banco de Dados.
2. Aplicar o plano de execução de uma consulta e uso adequado de índices.
A taxa entre os pedidos que o SGBD atende e a demanda para informação pode
ser denominada performance de banco de dados.
Workload
Throughput
Recursos
Otimização
Contenção
Gerente de Armazenamento
Metadados
Validação
sintática e Resultado
semântica Consulta SQL
Analisador Dicionário de
Gerador do
Plano de (Parser) Dados
Consulta
Estatística
Plano de Consulta
Componentes envolvidos
Quando uma consulta é enviada por um usuário do banco de dados, o primeiro
componente utilizado é o analisador gramatical, verificando a sintaxe e
semântica do comando. Ao concluir seu trabalho, o analisador gramatical
encaminha o resultado para o btimizador. A escolha do otimizador depende
da configuração realizada pelo administrador de banco de dados.
Analisador gramatical
Otimizador
Gerador de planos
A ordem de junção (join order) é a sequência em que os diferentes itens da
junção são acessados e ordenados.
Por exemplo:
Executor de SQL
Componente que executa o plano de execução e produz o resultado final. Cada
registro gerado pelo gerador de registros é executado por esse componente.
Exemplo:
Resultado:
OPERATION
NAME
Nome do objeto.
ROWS
BYTES
COST (%CPU)
Custo da operação.
TIME
Tempo gasto.
Métodos de acesso
Full table scan
Cluster scan
Hash scan
Índices
Índices concatenados
Orientações:
• Colunas usadas com frequência na clausula WHERE;
• Colunas referenciadas em muitas consultas;
• Ordem das colunas: a ordem mais utilizada, colunas mais seletivas
posicionadas na frente.
Atividade proposta
Sejam os dois planos de execução que seguem. Compare o conteúdo
apresentado pela saída da tabela PLAN_TABLE e responda:
a) Qual a consulta que executa no menor tempo?
b) Qual a principal mudança em relação às duas consultas?
href="docs/a08_t17.pdf" Clique aqui para ver os planos de execução.
Chave de resposta:
a) A query SELECT * FROM EMP WHERE MATRICULA=2845 executa em um
tempo menor (00:00:01 contra 00:00:27).
b) Foi acrescentado um filtro na consulta (where matricula=2845). Nessa
execução temos um evento chamado INDEX RANGE SCAN, que significa que o
otimizador utilizou um índice no seu plano de execução, o que é mais
performático.
Material complementar
Referências
BRYLA, Bob. Oracle database 11g: manual do DBA. Porto Alegre: Bookman,
2009.
Exercícios de fixação
Questão 1
Em relação ao tema performance de banco de dados, faça a associação entre
as colunas abaixo:
1 - Workload
2 - Throughput
3 - Recursos
4 - Otimização
5 - Contenção
( ) Define a capacidade do computador de processar os dados.
( ) São os pedidos do SGBD que definem a demanda.
( ) Ocorre quando a demanda por um recurso particular é alta.
( ) Nos Bancos de dados relacionais é realizada internamente no SGBD.
( ) O hardware e as ferramentas de software disponíveis para o sistema.
a) 2 – 3 – 1 – 4 – 5
b) 2 -1 – 5 – 4 – 3
c) 5 – 4 – 3 -1 – 2
d) 3 – 1 – 5 – 2 – 4
e) 2 – 1 – 4 – 5 – 3
Questão 2
A respeito do Gerente de Transações, Concorrência e Recuperação, marque
verdadeiro (V) ou falso (F) nas afirmativas abaixo:
( ) Controle da unidade básica de trabalho em um SGBD.
( ) Garantia de consistência dos dados sem concorrência de transações.
( ) Gerência dos bloqueios (LOCKS).
( ) Responsável pelo log do sistema e pela recuperação.
( ) Responsável pela localização e acesso de blocos em disco.
a) V – V – V – F – F
Questão 3
São informações contidas nos metadados do Banco de Dados, EXCETO:
a) Objetos de usuário
b) Usuários
c) Autorização
d) Estrutura
e) Páginas Web
Questão 4
São componentes envolvidos na execução de uma consulta, EXCETO:
a) Analisador gramatical
b) Otimizador
c) Gerente de limpeza de disco
d) Executor de SQL
e) Gerador de registros
Questão 5
A respeito da geração de planos de execução no SGBD Oracle, marque a opção
CORRETA:
a) A tabela EXPLAIN PLAN contém o caminho de execução da consulta.
b) O script “utlxpls.sql”, cria a tabela PLAN_TABLE.
c) O script “utlxplan.sql”, apresenta o plano de execução formatado.
d) ROWS é o número associado ao comando dentro do plano de execução.
e) A procedure DBMS_XPLAN é usada para consultar a tabela de planos.
Notas
Árvore B: Estrutura de dados projetada para funcionar especialmente em
memória secundária.
Árvore B+: Estrutura de dados do tipo árvore derivada das árvores B, mas
com uma forma diferente de armazenamento de suas chaves.
Chave de busca: Atributo para pesquisar registros em um arquivo.
Índices de hash: Chaves de busca são distribuídas uniformemente usando
uma "função de hash".
Índices ordenados: Chaves de busca são armazenadas em ordem
classificada.
Ponteiro: Indica o local de armazenamento dos itens indexados.
SQL: Structured Query Language ou Linguagem de Consulta Estruturada
Questão 2 - C
Justificativa: Garantia de consistência dos dados com concorrência de
transações e localização e acesso de blocos em disco é responsabilidade do
gerente de armazenamento.
Questão 3 - E
Justificativa: Páginas web não estão contidas nos metadados (dicionário de
dados).
Questão 4 - C
Justificativa: Gerente de limpeza de disco não é componente da execução de
uma consulta.
Questão 5 - B
Justificativa: Também é possível consultar a tabela de planos usando a
procedure DBMS_XPLAN.
Questão 6 - D
Justificativa: ROWID SCAN é o método de acesso mais rápido e CLUSTER SCAN
são registros de tabelas relacionadas nos mesmos blocos.