Escolar Documentos
Profissional Documentos
Cultura Documentos
Banco de Dados....................................................................................................................................1
Query - Consulta de Dados...................................................................................................................1
Algebra Relacional x Structured Query Language (SQL)....................................................................1
1 ALGEBRA RELACIONAL..............................................................................................................2
1.1 Consultas Fundamentais e Especificas para BD........................................................................3
Operador Selecionar (SELECT).................................................................................................3
Operador Projetar (PROJECT)...................................................................................................3
1.2 Sequencia de Operações............................................................................................................4
1.3 Operações Fundamentais da Teoria dos Conjuntos...................................................................5
Produto Cartesiano (CARTESIAN PRODUCT)........................................................................5
União (UNION)..........................................................................................................................5
Diferença (DIFFERENC ou EXCEPT)......................................................................................6
1.4 Operações Não Fundamentais...................................................................................................7
Intersecção (INTERSECTION)..................................................................................................7
Ligação Natural (JOIN)..............................................................................................................7
1.5 Atividade Exemplo:...................................................................................................................9
1.6 Atividade de Fixação:..............................................................................................................11
2 A LINGUAGEM SQL.....................................................................................................................12
2.1 Estrutura Básica.......................................................................................................................12
2.2 Estrutura Completa..................................................................................................................13
Linhas duplicadas......................................................................................................................13
2.3 Predicados e Ligações usando WHERE..................................................................................14
Ligação Natural.........................................................................................................................14
Comparações com Strings.........................................................................................................14
Membros de conjuntos..............................................................................................................15
Comparação de conjuntos.........................................................................................................15
Testando relações vazias...........................................................................................................16
2.4 Operações de Conjunto............................................................................................................16
2.5 Renomeação.............................................................................................................................16
2.6 ORDER BY - Ordenando a exibição de tuplas........................................................................17
2.7 GROUP BY – Funções Agregadas..........................................................................................17
2.8 HAVING – Condições a nível de Grupos................................................................................18
2.9 Atividade Exemplo..................................................................................................................19
2.10 Atividade de Fixação.............................................................................................................22
1 ALGEBRA RELACIONAL
A álgebra relacional é uma linguagem de consulta procedural. Ela consiste em um conjunto de
operações que tomam uma ou duas relações (tabelas) como entrada e produzem uma nova relação
como resultado. Inclui um conjunto de operações, classificadas como fundamentais e não
fundamentais.
As operações da álgebra relacional são normalmente divididas em dois grupos, um que diz respeito
a teoria dos conjuntos (UNION, DIFFERENCE e CARTESIAN PRODUCT, entre outras) e
outro desenvolvido especificamente para base de dados relacionais (SELECT, PROJECT, entre
outras).
As operações fundamentais da álgebra relacional estão destacadas acima: selecionar, projetar
(unárias) - produto cartesiano, união e diferença de conjuntos (binárias), com elas é possível realizar
quaisquer consultas. Além das operações fundamentais existem outras operações não fundamentais,
que podem ser utilizadas para simplificar consultas. A Figura de forma gráfica, cada uma das
operações da álgebra.
2/23
1.1 Consultas Fundamentais e Especificas para BD
Operador Selecionar (SELECT)
A operação selecionar seleciona tuplas (linhas) que satisfazem a um dado predicado. Usamos a letra
minúscula grega sigma (σ) para representar a seleção. O predicado aparece subscrito em σ. A
relação argumento (entrada) aparece entre parênteses, seguindo o σ. A Figura abaixo representa
graficamente essa operação
Exemplos:
Selecionar as tuplas da relação empréstimos em que o código da agência é 0662, escreve-se:
σ codigoAg=0662 (Emprestimos)
Podemos encontrar todas as tuplas em que a quantia emprestada seja maior que 1200:
σ codigoAg>1200 (Emprestimos)
As quantias comparações são utilizados os padrões ( =, >, < , >=, <= e <>) e os conectivos e (^) e
ou (v).
Suponha que desejemos uma relação mostrando os clientes e as agências nas quais eles tomaram
empréstimos, mas não nos importamos com a quantia e o número do empréstimo:
π CodigoAg,CodigoCli(Emprestimos)
1.2 Sequencia de Operações
Em geral, existe a necessidade de se aplicar várias operações da álgebra relacional uma após a
outra. Pode-se escrever essas operações em apenas uma única expressão da álgebra relacional ou
aplicar uma única operação por vez e criar relações intermediárias. Por exemplo, deseja-se
recuperar o primeiro nome, o último nome e o salário de todos os empregados que trabalham no
departamento 5. Isto pode ser feito aplicando-se os operadores SELECT e PROJECT:
É importante mencionar que as operações da álgebra relacional atuam sobre uma ou duas relações,
sendo classificadas como unárias ou binárias, assim, caso seja necessário usar mais de duas tabelas
em uma consulta, operações podem ser usadas de forma encadeada, tal como demonstrado acima,
ou seja o resultado de uma consulta é uma nova relação e esta pode ser usada como entrada para a
próxima operação.
1.3 Operações Fundamentais da Teoria dos Conjuntos
Para selecionarmos todos os nomes dos clientes que possuam empréstimo na agência cujo código é
0662, escrevemos:
União (UNION)
A operação união de conjuntos, representada por (U), permite-nos encontrar tuplas que estão em
uma das relações envolvidas. A Figura abaixo representa graficamente essa operação.
Vamos supor que quiséssemos conhecer todas as pessoas que possuam Depósitos, Empréstimos, ou
ambos, numa determinada agência. Com os recursos que temos até agora, não seria possível
conseguirmos tal informação. Nessa situação, deveríamos fazer a união de todos que possuam
depósitos com todos que possuam empréstimos nessa agência. Como veremos no exemplo a seguir:
Ex: Informe todos os nomes de clientes que possuam depósitos, empréstimos, ou ambos, na agência
051.
Uma vez que as relações são conjuntos, as linhas duplicadas são eliminadas.
Ex. Encontrar todos os clientes que possuam um depósito, mas não possuem um empréstimo na
agência 051.
6/23
1.4 Operações Não Fundamentais
Utilizando as operações fundamentais da álgebra relacional podemos expressar qualquer consulta
da álgebra relacional. Entretanto, algumas consultas são longas ou complexas demais para serem
expressas. Nesse caso, o uso das operações não fundamentais pode reduzir o tamanho e a
complexidade dessas consultas.
Intersecção (INTERSECTION)
A operação Intersecção de conjuntos, representada por (∩), é uma operação binária e nos permite
encontrar tuplas que estão nas duas relações envolvidas na consulta. Pode ser expressa em função
das operações fundamentais da seguinte forma: r ∩ s = r – (r – s). A Figura abaixo representa
graficamente essa operação
Suponha que desejemos encontrar todos os clientes que tenha empréstimo e depósitos na agência
“051”.
7/23
Ex1: Encontre todos os clientes que têm empréstimos exibindo também a cidade em que vivem.
Ex2: Encontre todos os clientes que têm empréstimos e que moram em “Vitória”:
8/23
1.5 Atividade Exemplo:
Considere o esquema seguinte para construir expressões, da álgebra relacional para as questões que
se seguem.
agencia (cdAg, nomeAg, cidadeAg)
cliente(cdCli, nomeCli, rua, cidade)
deposito (cdAg, numCont, cdCli, saldo)
cdAg referencia agencia
cdCli referencia Cliente
emprestimo (cdAg, cdCli, nuEmp, quantia)
cdAg referencia agencia
cdCli referencia Cliente
Resolução:
1. Para poder resolver a solicitação, é necessário trabalhar com duas tabelas, CLIENTE e
DEPÓSITO. Assim deve-se escolher uma das operações binárias (Fundamentais: Produto
Cartesiano, União ou Diferença) os não fundamentais seriam (JOIN ou INTERSEÇÃO).
Como neste ítem só pretendo relacionar as duas tabelas posso usar diretamente o produto
cartesiano
No (1) é importante entender que o Produto Cartesiano não faz distinção de qual cliente
realizou cada depósito colocando todas as combinações possíveis entre cliente e depósito.
Assim para poder utiliza-lo na solução é necessário trabalhar esta relação, tal como
mostrado abaixo (2).
9/23
O (3) demonstra o uso da operação não fundamental JOIN e possui o mesmo resultado que o
(2), ou seja ele simplifica a construção, apesar de muitos projetistas usarem
preferencialmente somente operadores fundamentais. Abaixo (4) ou (5) é a solução final
2. Nesta consulta tenho que trabalhar com 3 tabelas, CLIENTE, DEPOSITO e AGENCIA, pois
a cidade do depósito está na tabela agência.
O (1) tenho todos os depósitos de cada cliente agora basta associar este conjunto a agência
Repare que eu poderia usar JOIN tanto no (1) quanto no (2)….assim abaixo uma possível
alternativa (3):
10/23
1.6 Atividade de Fixação:
Considere o esquema seguinte para construir expressões, da álgebra relacional para as questões que
se seguem.
Pessoa (cdPessoa, Nome, Cidade, cdChefe) cdChefe referencia Pessoa
Empresa (cdEmpresa, Nome, Cidade)
Trabalha (cdPessoa, cdEmpresa, Salario)
cdPessoa referencia Pessoa
cdEmpresa referencia Empresa
11/23
2 A LINGUAGEM SQL
A linguagem SQL é um padrão de linguagem de consulta comercial que usa uma combinação de
construtores da Álgebra e Cálculo Relacional. O Foco deste material é o uso da DQL (Data Query
Language) com o qual o usuário pode requisitar ao Sistema de Gerência de Banco de Dados
(SGBD) informações armazenadas no Banco de Dados (BD)
A maioria dos sistemas gerenciadores de bancos de dados comerciais implementa suporte ao padrão
SQL. Além disso, incorporam uma série de funções adicionais, visando facilitar o trabalho dos
desenvolvedores. Essas facilidades precisam ser usadas com cautela, pois, se apenas o padrão for
utilizado, garante-se a portabilidade, caso haja a necessidade de troca de SGBD.
Conceitualmente a relação resultante de uma consulta SQL não em verdade um conjunto pois é
possível a existência de duas ou mais tuplas idênticas, haja vista que um conjunto não permite
elementos idênticos. Podemos dizer então que o SQL gera relações multi-conjunto (algumas vezes
chamado de bag) de tuplas
• FROM: A cláusula from permite informar a tabela que será examinada e caso seja
informado mais de uma tabela corresponde à operação produto cartesiano (X) da álgebra
relacional;
12/23
(SQL): SELECT * FROM r1 WHERE P
(2) (AR): σ P (r1)
Para além desta consulta simples, as opções serão exploradas a seguir, utilizando o esquema
exemplo apresentado no capítulo anterior (Algebra Relacional), transcrito abaixo..
Schema Exemplo – Utilizado nas Explicaçoes
agencia (cdAg, nmAg, cidadeAg)
cliente(cdCl, nmCl, rua, cidade)
deposito (cdAg, nuCont, cdCl, saldo)
cdAg referencia agencia
cdCl referencia Cliente
emprestimo (cdAg, cdCl, nuEmp, quantia)
cdAg referencia agencia
cdCl referencia Cliente
Linhas duplicadas
Neste exemplo simples, é possível perceber que a relação resultante poderia ter clientes que
possuam o mesmo nome. Se desejar eliminar as duplicações utiliza a clausua DISTINCT (e a
relação resultante passaria a ser considerada conceitualmente um conjunto):
SELECT DISTINCT nmCl
FROM cliente
13/23
2.3 Predicados e Ligações usando WHERE
A seguir são apresentadas as extensões de opções usando where
Ligação Natural
A ligação natural pode ser definida em termos de um produto cartesiano, uma seleção e uma
projeção, é relativamente simples escrever uma expressão SQL para uma ligação natura
Ex.: Encontre os nomes e cidades de clientes que possuam empréstimos em alguma agência:
SELECT distinct nmCl, cidade
FROM cliente, emprestimo
WHERE cliente.cdCl=emprestimos.cdCl
A maioria das soluções de consultas são encontradas fazendo varias ligações naturais e predicados
de comparação >, >, >= , <= e <> , not, and e or. A seguir vamos apresentar algumas
especializações, cobrindo todas as possibilidades desde consultas simples até consultas complexas
Ex.: Encontre os nomes de todos os clientes cujas ruas incluem a subcadeia “na”
SELECT distinct nmCl
FROM cliente
WHERE rua LIKE “%na%”
Ou também
Ex.: Encontre os nomes de todos os clientes cujas ruas finalizem com a subcadeia “na”
SELECT distinct nmCl
FROM cliente
WHERE rua LIKE “%na”
14/23
Membros de conjuntos
O conectivo IN e NOT IN testa os membros de conjunto, em que o conjunto é uma coleção de
valores produzidos por uma cláusula select.
Para ilustrar, considere a consulta “Encontre todos os clientes que possuem uma conta e não
possuem empréstimo na agência “Princesa Isabel”. A consulta SQL pode ser escrita da seguinte
forma: (repare que esta estrutura se assimila a Diferença da Algebra Relacional)
SELECT distinct nmCl
FROM cliente
WHERE cliente.cdCl IN
(SELECT cdCl
FROM deposito, agencia
WHERE deposito.cdAg = agencia.cdAg AND nmAg = “Princesa Isabel”)
AND cliente.cdCl NOT IN
(SELECT cdCl
FROM emprestimo, agencia
WHERE emprestimo.cdAg = agencia.cdAg AND nmAg = “Princesa Isabel”)
Comparação de conjuntos
Permite usar comparações do tipo > any (maior que ao menos uma), <= any, = any, etc... ou > all
(maior que todas), >= all, etc.
O mySql aceita também o uso da palavra reservada some (algum) e tem o mesmo efeito que
any(qualquer)
Ex. Considere a consulta “encontre todos os clientes que possuem saldo maiores que alguma
agência de Vitória”. Uma vez que é uma comparação “maior que”, não podemos escrever a
expressão usando a construção in. Assim a consulta pode ser escrita da seguinte forma:
SELECT nmCl
FROM cliente,deposito
WHERE cliente.cdCl=deposito.cdCl AND deposito.saldo > any
(SELECT deposito.saldo
FROM agencia,deposito
WHERE agencia.cdAg=deposito.cdAg AND and cidadeAg = “Vitória”)
Suponha que agora deseje encontrar todas as agências que possuem saldo maiores do que todas as
agências de Vitória.
A construção > all corresponde à frase “maior que todos”. A consulta fica como se segue:
SELECT distinct nmAg
FROM agencia,deposito
WHERE agencia.cdAg=deposito.cdAg AND deposito.saldo > all
(SELECT deposito.saldo
FROM agencia,deposito
WHERE agencia.cdAge=deposito.cdAg and cidadeAg = “Vitória”)
15/23
Testando relações vazias
A SQL possui um recurso para testar se uma subconsulta retorna alguma tupla. A construção
EXISTS retorna true se a subconsulta retornar alguma tupla.
Para ilustrar, vamos escrever a consulta Encontre todos os clientes que possuem depósito e não
possuem empréstimo na agência “Princesa Isabel”.
SELECT nmCli
FROM cliente
WHERE EXISTS (
SELECT *
FROM deposito, agencia
WHERE deposito.cdCl= cliente.cdCl AND agencia.cdAg = depositos.cdAg AND
nmAg = “Princesa Isabel”)
AND NOT EXISTS
(SELECT *
FROM emprestimo, agencia
WHERE emprestimo.cdCl= cliente.cdCl AND agencia.cdAg = emprestimo.cdAg AND
nmAg = “Princesa Isabel”)
2.5 Renomeação
A renomeação sempre é necessária quando temos necessidade de usar a mesma tabela mais de uma
vez na mesma consulta. Muitas vezes usamos este recurso com o objetivo de reduzir o tamanho das
expressões SQL. A renomeação é feita usando a palavra reservada “AS”, após o nome da tabela na
cláusula FROM. Também é possível renomear os atributos do select de forma a melhorar a
visualização de relação resultante, como mostra o exemplo a seguir.
16/23
Ex: encontre o nome e a cidade de todos os clientes que possuem depósito em qualquer agência
SELECT distinct C.nmCl AS Nome_Cliente, C.cidade AS Cidade_Cliente
FROM cliente AS C, deposito AS D
WHERE C.cdCl = D.cdCl
Uma vez que as relações Cliente e Deposito foram renomeadas para C e D, quaisquer referências a
essas tabelas, na consulta, devem ser feitas a C e D.
No caso do MySql o termo “AS” opcionalmente pode ser omitido.
Também é possível ordenar uma relação usando mais de um elemento. Como se segue:
SELECT *
FROM emprestimo
ORDER BY quantia DESC, cdAg ASC
17/23
A entrada para SUM e AVG precisa, obrigatoriamente, ser um conjunto de números, as demais
operações não impõem esta restrição.
Para ilustrar, considere as consultas
1) Encontre o saldo médio das contas em cada agência:
SELECT nmAg, AVG(deposito.saldo) AS Saldo_Medio
FROM deposito,agencia
WHERE deposito.cdAg = agencia.cdAg
GROUP BY nmAg
18/23
2.9 Atividade Exemplo
Utilizando a atividade de Fixação de Álgebra Relacional e a solução desenvolvida, é demonstrado a
seguir a transcrição da Álgebra Relacional para SQL realizei apenas algumas modificações nas
questões (especificamente para incrementar no SQL e facilitar testes – destacados em vermelho.
Schema utilizado na Atividade de Exemplo
Pessoa (cdPessoa, Nome, Cidade, cdChefe) cdChefe referencia Pessoa
Empresa (cdEmpresa, Nome, Cidade)
Trabalha (cdPessoa, cdEmpresa, Salario)
cdPessoa referencia Pessoa
cdEmpresa referencia Empresa
π nome,cidade (P)
19/23
5. Consulte todas as pessoas (nomes) que trabalham na mesma cidade onde moram, [, informe a
Empresa, a cidade onde moram e cidiade onde trabalha] .
SELECT E.nome
FROM empresa E, (SELECT cidade FROM pessoa WHERE nome LIKE “%Carla%)
WHERE E.cidade <> C.cidade
8. Consulte todas as pessoas (nomes) que não trabalham em Vitória e que ganham acima de R$
2000.
πP.nome(P |X| (σ E.cdEmpresa = T.cdEmpresa ^ E.Cidade <> “Vitória” ^ T.Salario > 2000 (E X T)))
SELECT P.nome
FROM pessoa P, empresa E, trabalha T
WHERE E.cdEmpresa=T.cdEmpresa AND P.cdPessoa=T.cdPessoa AND
E.cidade <> “Vitória AND T.salario > 2000
9. (desafio) - Selecione o nome do funcionário da empresa de código “03” que possui o menor
salário.
20/23
Menor← π cdPessoa (S1 - Maiores)
21/23
REVENDO A QUESTÃO 7
7. Consulte todas as empresas (nomes) que funcionam em cidades em que não moram
“Maria”
Apesar de já termos dado uma boa solução, é fácil observar que é possível uma solução usando
verificação de conjuntos, então a título de exemplificação coloco uma outra possível solução, agora
desconectado da Álgebra Relacional e demonstrando melhor a potencialidade do conectivo IN,
conforme abaixo:
SELECT E.nome
FROM empresa E
WHERE E.cidade NOT IN (
SELECT cidade
FROM pessoa
WHERE nome LIKE "%Carla%"
)
7. Quais os nomes dos funcionários (nome das pessoas) que são subordinadas ao
Jonathan (chefe)
8. Mostre quantos subordinados cada chefia possui, a consulta deverá exibir o nome
do Chefe e a quantidade de pessoas subordinadas (Count)
22/23
9. Verifique o total de funcionários por empresa, a consulta deverá retornar o nome da
empresa e o total de funcionários ordene o resultado pelo Total de Funcionários do
menor para o maior.
10. Qual empresa possui a maior quantidade de funcionários, a consulta deverá exibir
o nome da empresa e o total de funcionários que a mesma possua.
11. Quais pessoas trabalham em mais de uma empresa, a consulta deve informar o
nome da pessoa o salário total (soma dos salários das empresas em que trabalha)
e a quantidades empresas que ele trabalha, ordene o resultado por nome.
23/23