Você está na página 1de 34

Álgebra Relacional e SQL

Banco de Dados 2023.2


CC-Natal/UERN
Retomando...
— O que foi visto até o momento:
— 1ª unidade
— Modelagem conceitual (MER e MR)
— Construção de tabelas

— 2ª unidade
— Modelagem lógica (dependência funcional e normalização)
— Melhoria das tabelas

— O que veremos agora:


— 2ª unidade
— Álgebra relacional e SQL
— Uso de ferramentas
— 3ª unidade
— Projeto
O conceito de relação (tabela)
— Um BD relacional consiste de uma coleção de tabelas, cada
qual tendo uma estrutura similar àquela do modelo E-R
— Uma linha na tabela representa um relacionamento entre um
conjunto de valores
— Existe uma correspondência entre o conceito de tabela e o
conceito matemático de relação.
— Os matemáticos definem uma relação como sendo um sub-
conjunto de um produto cartesiano de uma lista de domínios
— Tabela de n colunas = relação =
= D1 x D2 x ... x Dn NumConta Saldo Tipo
— Tupla = linha de uma tabela 123342 1000,00 Poupança
908333 3443,99 Contacorrente
128731 12,29 Poupança
Álgebra relacional
— É uma linguagem procedural que consiste em um conjunto
de operações que usam uma ou duas relações como entrada e
produzem uma nova relação como resultado
— Operações fundamentais
— Selecionar
Operações unárias
— Projetar
— Renomear
— Produto cartesiano
— União Operações binárias
— Diferença de conjuntos
Selecionar
— spredicado (relação)
— Seleciona tuplas que satisfazem um dado predicado
— Exemplos
— snome_cidade = Natal (agência)
— sagência = Alecrim Ù saldo>1000 (cliente)

— Operadores lógicos utilizados nos predicados


— = (igual), ¹ (diferente), < (menor), £ (menor ou igual)
> (maior), Ù (e), Ú (ou)
Projetar
— patributos (relação)
— Exibe apenas as colunas definidas em atributos de relação
— Exemplos
— pnome_agência, nome-cliente (cliente)
— pnome_cliente (snome_cliente=nome_gerente (cliente))
— pnome-cliente (pnome-cliente, nome_gerente (cliente))
Produto cartesiano
— relação1 x relação2
— Cada tupla de relação1 é combinada com cada tupla de relação2
número nome cidade
nome cidade
agência = 234 Alecrim Natal
cliente =
Alberto Natal 533 Boa Viagem Recife
José Recife 134 Centro São Paulo

cliente.n cliente.ci agência.n agência.nome agência.cidade


ome dade úmero
Alberto Natal 234 Alecrim Natal
cliente x agência = Alberto Natal 533 Boa Viagem Recife
Alberto Natal 134 Centro São Paulo
José Recife 234 Alecrim Natal
José Recife 533 Boa Viagem Recife
José Recife 134 Centro São Paulo
Outras operações
— Renomear: rx (relação)
—Dá como resultado a relação r com o nome x.
— Exemplo:
— rc (cliente)
— União: relação1 È relação2
— Dá como resultado a união (concatenação) de duas relações.
— Para r È s ser válido:
— 1) r e s devem ter o mesmo número de atributos;
— 2) os domínios do i-ésimo atributo de r e do i-ésimo atributo de s devem ser os
mesmos.
— Exemplo:
— pnome_cliente(snome_agência= Centro (empréstimo)) È pnome_cliente(snome_agência= Centro (depósito))
Outras operações
— Diferença de conjuntos: r – s
— Encontra tuplas que estão em r e não estão em s
— Exemplo:
pnome_cliente(snome_agência=”Centro”(empréstimo)) - pnome_cliente(snome_agência=”Centro”(depósito))

— Interseção de conjuntos: r Ç s
— Dá como resultado todas as tuplas que existem em r e em s
— Exemplo:
pnome_cliente(snome_agência=”Centro”(empréstimo)) Ç pnome_cliente(snome_agência=”Centro”(depósito))
Junção natural
— rXs
— Forma um produto cartesiano de seus dois argumentos, faz uma
seleção forçando uma igualdade sobre os atributos que
aparecem em ambas tabelas e remove colunas duplicadas
— Formalmente:
r C s = pRÈS (sr.A1=s.A1 Ù r.A2=s.A2 Ù ... Ù r.An=s.An (r x s))
onde R Ç S = {A1, A2, ..., An}
— Exemplo:
— cliente(nome_cliente, cidade) e empréstimo(nome_cliente, valor)
— p nome-cliente, valor (empréstimo X cliente)
Junção Natural

cliente.i cliente.ci agência.n agência.nome agência.cidade


d dade úmero
Alberto Natal 234 Alecrim Natal
cliente X agência =

José Recife 533 Boa Viagem Recife


E onde vamos usar isso?
— O entendimento da álgebra relacional dá a base para o
entendimento do funcionamento das consultas SQL
— E vocês são alunos de Bacharelado em Ciência da Computação
e precisam entender a base das coisas, não só a utilização delas
A linguagem SQL
— Desenvolvida originalmente nos laboratórios de pesquisa da
IBM em San Jose (hoje Centro de Pesquisa Almaden)
— No início se chamava SEQUEL. Depois evoluiu para Structure
Query Language (SQL)
— É uma linguagem de altíssimo nível, bem próxima da
linguagem humana (inglês)
— Em 1986 o American National Standard Institute (ANSI)
publicou um padrão do SQL, chamado de SQL-ANSI
— Diversos fabricantes incorporaram novas funcionalidades ao
padrão ANSI
— É a linguagem utilizada em praticamente todos os SGBDs do
mercado (relacionais)
SQL tem diversas partes
— Data Definition Language (DDL)
— Fornece comandos para a definição/manutenção dos esquemas
— CREATE {TABLE | INDEX}
— ALTER {TABLE | INDEX}
— DROP {TABLE | INDEX}

— Data Manipulation Language (DML)


— Comandos de consulta e alteração de dados nas tabelas
— SELECT, INSERT, DELETE, UPDATE

— Data Control Language (DCL)


— Comandos de gerência do SGBD
— {CREATE | ALTER} USER
— GRANT
— REVOKE
— CREATE SCHEMA
DDL
Definição dos esquemas
— Uma relação em SQL é definida usando o comando:
— CREATE TABLE relação (atributo1 domínio1, ... , atributon domínion)

— Para remover uma tabela usamos o comando:


— DROP TABLE relação

— Para alterarmos uma tabela adicionando novos atributos usamos


o comando:
— ALTER TABLE relação ADD (atrib1 domínio1, ... , atribn domínion)
Tipos de dados
— CHAR(n)
— Cadeia de caracteres com exatamente n caracteres
— VARCHAR(n)
— Cadeia de caracteres com até n caracteres
— BIT(n)
— Cadeia de bits com exatamente n bits
— VARBIT(n)
— Cadeia com até n bits
— INT
— Inteiro com sinal (precisão definida pela implementação,
normalmente 32 bits)
— SMALLINT
— Inteiro com sinal (precisão definida pela implementação,
normalmente 16 bits)
Tipos de dados
— NUMERIC(p,q)
— Número decimal com p dígitos mais sinal e ponto decimal implícito
com q dígitos a partir da direita
— DECIMAL(p,q)
— Semelhante a NUMERIC, mas a precisão pode ser maior que p dígitos
— FLOAT
— Número com ponto flutuante
— DATE
— Uma data com dia, mês e ano
— DATETIME
— Uma data com dia, mês, ano, hora, minuto e segundos
— MONEY
— Um número com duas casas decimais pré-formatado para exibição de
valores monetários
DML
Comandos de consultas (DML)
— SELECT {A1, A2,..., An | * }
FROM r1, r2, ...,r n
WHERE P
— Equivale a

pA ,1 A2,..., An (sP (r1 x r2 x...x rn))


— Exemplos
— SELECT c.nome, q.cidade
FROM cliente AS c, (SELECT cidade FROM agencia) AS q
WHERE c.cidade = q.cidade
— SELECT j2.nome
FROM jogadores AS j1, jogadores AS j2
WHERE j1.nome=‘Kuerten’ AND j1.ano_n < j2.ano_n
Operadores da cláusula WHERE
— Operadores lógicos AND, OR, NOT
— SELECT nome FROM jogadores
WHERE (ano_p – ano_n < 22 AND pais = ‘BRA’)
OR cid_res = ‘Florianopolis’
— Operador BETWEEN
— SELECT nome, ano_n FROM jogadores
WHERE ano_n BETWEEN 75 AND 81
— Operador LIKE
— SELECT nome FROM jogadores
WHERE nome LIKE ‘%Jose%’
Operações com conjuntos
— Operações que trabalham a nível de tuplas ‘idênticas’
— (SELECT nome-cliente FROM conta WHERE nome-agência=”Centro”)
UNION
(SELECT nome-cliente FROM empréstimo WHERE nome-
agência=”Centro”)

— (SELECT distinct nome-cliente FROM conta WHERE nome-


agência=”Centro”)
INTERSECT
(SELECT distinct nome-cliente FROM empréstimo WHERE nome-
agência=”Centro”)

— (SELECT distinct nome-cliente FROM conta WHERE nome-


agência=”Centro”)
MINUS
(SELECT nome-cliente FROM empréstimo WHERE nome-
agência=”Centro”)
Pertinência a conjuntos
— Operações do cálculo relacional que testam a existência de
atributos em um determinado conjunto
— SELECT distinct nome-cliente
FROM empréstimo
WHERE nome-agência = “Centro”
AND nome-cliente IN (SELECT nome-cliente
FROM depósito
WHERE nome-agência = “Centro”)
— SELECT distinct nome-cliente
FROM empréstimo
WHERE nome-agência = “Centro”
AND nome-cliente NOT IN (SELECT nome-cliente
FROM depósito
WHERE nome-agência = “Centro”)
Comparação de conjuntos
— SQL permite comparações entre atributos de dois conjuntos
— {<| <= | >= | = | <> } { SOME | ANY | ALL }
— SELECT nome-agencia
FROM agência
WHERE ativos > SOME
(SELECT ativos
FROM agência
WHERE cidade-agência = “Natal”)
— SELECT nome-agencia
FROM agência
WHERE ativos >= ALL
(SELECT ativos
FROM agência
WHERE cidade-agência = “Natal”)
Ordenação da exibição de tuplas
— SQL oferece algum controle sobre a ordem na qual tuplas em
uma relação estão dispostas.
— A cláusula ORDER BY ordena as tuplas em ordem crescente
(ASC) ou decrescente (DESC) no resultado de uma consulta.
— Exemplo:
— SELECT *
FROM empréstimo
ORDER BY quantia DESC, número-empréstimo ASC
Funções que produzem valores agregados

— SQL possui um conjunto de funções para obter estatísticas sobre os


valores de uma dada coluna
— Exigem o uso da cláusula GROUP BY coluna. Se não especificado,
assume para todas as colunas da(s) tabela(s)
— COUNT(coluna): conta o número de valores na coluna para o grupo
— Valores nulos na coluna serão desconsiderados
— COUNT(*): conta o número de linhas para o grupo
— MIN(coluna): obtém o menor valor da coluna no grupo
— MAX(coluna): obtém o maior valor da coluna no grupo
— SUM(coluna): soma os valores da coluna no grupo
— AVG(coluna): obtém a média aritmética dos valores da coluna no grupo

— Condições no cálculo devem ser especificadas com a cláusula HAVING


Funções de agregação
— Exemplos
— SELECT nome-agência, AVG(saldo)
FROM depósito
GROUP BY nome-agência
— SELECT nome-agencia
FROM depósito
GROUP BY nome-agencia
HAVING AVG(saldo) >= ALL (SELECT AVG(saldo)
FROM depósito
GROUP BY nome-agência)
Modificação do Banco de Dados
— Inserção
— INSERT INTO tabela (A1, A2, ..., An) VALUES (v1, v2, ..., vn)
— INSERT INTO conta (nome-agência, número-conta, nome-cliente,
saldo) VALUES (“Alecrim”, 9732, “José Maria da Silva”, NULL)
— INSERT INTO conta
(SELECT nome-agência, número-empréstimo, nome-cliente, 200
FROM empréstimo
WHERE nome-agência = “Centro”)
— Remoção
— DELETE FROM tabela [WHERE condição]
— DELETE FROM empréstimo
WHERE número_empréstimo BETWEEN 1300 AND 1500
Modificação do Banco de Dados
— Atualização
— UPDATE tabela SET col1 = val1[, col2 = val2...]
[ WHERE condição]
— UPDATE poupança
SET saldo = saldo * 1,06
WHERE saldo > 10000
— UPDATE jogadores
SET cid_res = ‘Los Angeles’, pais = ‘EUA’
WHERE nome = ‘Agassi’
DCL
Gerência de Bancos de Dados
— SGBDs fornecem interfaces para essa gerência
— Comandos
— {CREATE | ALTER} USER
— GRANT: atribui privilégios de acesso do usuário a objetos de banco de dados
— REVOKE: remove os privilégios de acesso aos objetos obtidos com o comando
GRANT.
— E ainda tem a TCL (Transaction Control Language)
— COMMIT: usado para salvar permanentemente qualquer transação no banco de
dados.
— ROLLBACK: usado para restaurar o banco de dados para o último estado
commited.
Exercícios Resolvidos – Álgebra
Relacional
— https://www.ic.unicamp.br/~santanch/teaching/db/2016
-2/slides/bd06-algebra-v04.pdf
— http://www.decom.ufop.br/guilherme/BCC321/geral/sol
ucao_exercicio_algebra.pdf
— https://www.mapadaprova.com.br/questoes/de/tecnologi
a-da-informacao/banco-de-dados/algebra-relacional
Exemplos de Exercícios - SQL
— http://marciobueno.com/arquivos/ensino/bd2/BD2_02_
Exercicios_SQL.pdf
— http://www-usr.inf.ufsm.br/~calegaro/elc119/sql1.html
Para próxima aula - laboratório
— Lista de exercícios a ser disponibilizada no SIGAA

Você também pode gostar