Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
1. A Linguagem SQL
1
Curso de Ciência da Computação - UNIFOR-MG
Projeto de Banco de Dados (SQL) - Profª. Denise Ferreira Garcia
____________________________________________________________________________________
Criando tabelas
Uma tabela (ou relação) SQL é definida usando o comando create table:
create table r (A1 D1, A2 D2,...,An Dn)
onde r é o nome da relação, Ai é o nome de um atributo no esquema da relação r
e Di é o tipo do atributo Ai.
Uma relação é criada inicialmente vazia. O comando insert pode ser usado para
carregar os dados para a relação. Muitos produtos de banco de dados relacionais
possuem um grande volume de utilitários para carregar um conjunto inicial de tuplas em
uma relação.
2
Curso de Ciência da Computação - UNIFOR-MG
Projeto de Banco de Dados (SQL) - Profª. Denise Ferreira Garcia
____________________________________________________________________________________
alter table r
add ( A1 D1, A2 D2, ... )
onde r é o nome de uma relação existente e A1 D1, A2 D2, ... é uma lista contendo nome
do atributo (A) a ser adicionado e o tipo do atributo (D), respectivamente.
Restrições de Integridade
3
Curso de Ciência da Computação - UNIFOR-MG
Projeto de Banco de Dados (SQL) - Profª. Denise Ferreira Garcia
____________________________________________________________________________________
4
Curso de Ciência da Computação - UNIFOR-MG
Projeto de Banco de Dados (SQL) - Profª. Denise Ferreira Garcia
____________________________________________________________________________________
Chave Primária
A função da chave primária é identificar univocamente uma linha da tabela. Cada tabela
deve possuir uma chave primária. Quando se define um atributo como chave primaria,
fica implícito as cláusulas UNIQUE e NOT NULL para este atributo, não sendo
necessário a especificação destas.
ATENÇÃO: Quando uma tabela possui uma chave primária composta por mais de um
atributo, esta forma é OBRIGATÓRIA.
Integridade referencial
5
Curso de Ciência da Computação - UNIFOR-MG
Projeto de Banco de Dados (SQL) - Profª. Denise Ferreira Garcia
____________________________________________________________________________________
Assim como na definição da chave primária, pode-se definir a chave estrangeira após a
especificação de todos os campos (domínio) da tabela.
A principal estrutura da SQL DML consiste em três cláusulas: select, from e where.
A condição (ou predicado) que segue where pode incluir operadores de comparação =,
<> (diferente), >, >=, < e <=; os operadores booleanos AND, OR e NOT.
6
Curso de Ciência da Computação - UNIFOR-MG
Projeto de Banco de Dados (SQL) - Profª. Denise Ferreira Garcia
____________________________________________________________________________________
A lista A1, A2, ..., An de atributos pode ser substituída por um asterisco (*) para
selecionar todos os atributos de todas as relações presentes na cláusula from.
select *
from Fornecedor
select status
from Fornecedor
7
Curso de Ciência da Computação - UNIFOR-MG
Projeto de Banco de Dados (SQL) - Profª. Denise Ferreira Garcia
____________________________________________________________________________________
SQL permite duplicatas nas relações, bem como nos resultados das consultas. Para
forçar a eliminação de duplicatas, deve-se inserir declaração distinct depois do select.
SQL inclui um operador de comparação between para simplificar cláusulas where que
especificam que um valor deva ser menos ou igual a algum valor e maior ou igual que
algum outro valor.
Exemplo: Achar o número do empréstimo dos empréstimos com total entre $90,000 e
$100,000 (isto é, ≥ $90,000 and ≤ $100,000)
select numero_emprestimo
from emprestimo
where total between 90000 and 100000
8
Curso de Ciência da Computação - UNIFOR-MG
Projeto de Banco de Dados (SQL) - Profª. Denise Ferreira Garcia
____________________________________________________________________________________
A SQL possui um mecanismo para renomear tanto relações quanto atributos através da
cláusula as, da seguinte forma nome_antigo as novo_nome
Exemplo: Encontre o nome dos clientes e seus números de empréstimo para todos os
clientes que possuem um empréstimo em alguma agência.
select distinct nome_cliente, T.numero_emprestimo
from devedor as T, emprestimo as S
where T.numero_emprestimo =S.numero_emprestimo
SQL inclui operadores de comparação de strings. Padrões são descritos usando dois
caracteres especiais:
% combina com qualquer substring, independente do tamanho;
– combina caractere a caractere .
Exemplo: Encontre o nome de todos os clientes cuja rua contenha o substring ‘Main’.
select nome_cliente
from cliente
where rua_cliente like '%Main%'
Características:
- É sensível ao tamanho das letras (case sensitive);
- Permite encontrar diferenças, e não coincidências, através do uso de not like;
- Possui operações de concatenação, extração de substrings, indicação de tamanhos,
conversão de maiúsculas para minúsculas e vice-versa, etc.
9
Curso de Ciência da Computação - UNIFOR-MG
Projeto de Banco de Dados (SQL) - Profª. Denise Ferreira Garcia
____________________________________________________________________________________
A linguagem SQL oferece uma maneira de controlar a ordem que as tuplas de uma
relação serão dispostas. A cláusula ORDER BY ocasiona o aparecimento de tuplas no
resultado de uma consulta em uma ordem determinada.
Uma vez que a classificação de um grande número de tuplas pode ser custoso, é
aconselhável classificar apenas quando necessário.
2.3. Duplicatas
Em relações com duplicidades, SQL pode definir quantas cópias da tupla aparecem no
resultado.
Em versões multiconjuntos dos operadores da álgebra relacional - dadas as relações r1 e
r2:
1. Se existe c1 cópias da tupla t1 em r1, e t1 satisfaz a seleção σθ, então existem c1
cópias de t1 em σθ(r1);
2. Para cada cópia da tupla t1 em r1, em que existe uma cópia da tupla π A(t1) em
π A(r1), onde π A(t1) denota a projeção de uma tupla única t1;
10
Curso de Ciência da Computação - UNIFOR-MG
Projeto de Banco de Dados (SQL) - Profª. Denise Ferreira Garcia
____________________________________________________________________________________
Suponhas que as relações r1 com o esquema (A,B) e r2 com esquema (C) sejam os
seguintes multiconjuntos:
r1 = {(1,a),(2,a)} r2 = {(2),(3),(3)}
Então π B(r1) poderia ser {(a),( a)}, enquanto π B(r1) × r2 poderia ser
{(a,2),(a,2),(a,3),(a,3),(a,3),(a,3)}
A cláusula SQL
select A1, A2, ..., An
from r1, r2, ..., rm
where P
A linguagem SQL possui algumas função específicas para cálculos em grupos de tuplas:
média: avg
mínimo: min
máximo: max
total: sum
contar: count
Agrupamentos
11
Curso de Ciência da Computação - UNIFOR-MG
Projeto de Banco de Dados (SQL) - Profª. Denise Ferreira Garcia
____________________________________________________________________________________
A cláusula "GROUP BY" pode ser usada para dividir as tuplas de uma tabela em
grupos menores. As funções de grupo devolvem uma informação sumarizada para cada
grupo.
Nota: Qualquer coluna ou expressão na lista de seleção, que não for uma função
agregada, deverá constar da cláusula "group by". Portanto é errado tentar impor uma
restrição do tipo agregada na cláusula "where".
Having
A cláusula "having" pode ser utilizada para especificar quais os grupos deverão ser
exibidos, portanto restringindo-os.
Encontre o nome de todas as agências onde a média do saldo das contas seja maior que
$1,200
select nome_agencia, avg (saldo)
from conta
group by nome_agencia
having avg (saldo) > 1200
Nota: predicados na cláusula having são aplicados após a formação dos grupos cláusula
group by.
A cláusula where não pode ser utilizada para restringir grupos que deverão ser
exibidos. Como exemplificado abaixo:
SELECT coluna(s)
FROM tabela(s)
WHERE condição(ões) da(s) tupla(s)
GROUP BY condição(ões) do(s) grupo(s) de tupla(s)
HAVING condição(ões) do(s) grupo(s) de tupla(s)
12
Curso de Ciência da Computação - UNIFOR-MG
Projeto de Banco de Dados (SQL) - Profª. Denise Ferreira Garcia
____________________________________________________________________________________
ORDER BY coluna(s)
É possível para as tuplas ter valor nulo, denotados por null, para alguns de seus
atributos. Significa valor desconhecido ou inexistente. O resultado de uma expressão
aritmética envolvendo null é null. As operações envolvendo null retornam false
NOT
TRUE FALSE
FALSE TRUE
UNKNOWN UNKNOWN
Resultado da cláusula where é tratado como false se a sua avaliação é desconhecida
– “P is unknown” é true se a avaliação do predicado P é = unknown.
13
Curso de Ciência da Computação - UNIFOR-MG
Projeto de Banco de Dados (SQL) - Profª. Denise Ferreira Garcia
____________________________________________________________________________________
A declaração acima ignora valores null no total; o resultado será null somente se não
existir nenhuma tupla com o atributo total diferente de null
Todas as operações agregadas, exceto count(*) ignoram tuplas com valores null nos
atributos agregados .
F in r ⇔ ∃ t ∈ r (t =F)
(5 in 0 4 5 ) = TRUE
(5 in 0 4 6 ) = FALSE
(5 not in 0 4 5 ) = FALSE
Exemplos
Encontrar todos os clientes que possuem uma conta e um empréstimo no banco.
select distinct nome_cliente
from devedor
where nome_cliente in (select nome_cliente
from depositante)
Encontrar todos os clientes que tenham um empréstimo no banco mas não tenham uma
conta neste banco.
select distinct nome_cliente
from devedor
where nome_cliente not in (select nome_cliente
from depositante)
Encontrar todos os clientes que tenham uma conta e um empréstimo na agência
Perryridge.
select distinct nome_cliente
from devedor D, emprestimo E
where D.numero_emprestimo = E.numero_emprestimo and
nome_agencia = ‘Perryridge’ and (nome_agencia, nome_cliente) in
(select nome_agencia, nome_cliente
from depositante, conta
where depositante.numero_conta = conta.numero_conta)
14
Curso de Ciência da Computação - UNIFOR-MG
Projeto de Banco de Dados (SQL) - Profª. Denise Ferreira Garcia
____________________________________________________________________________________
Para inserir um dado em uma relação, ou especificamos uma tupla para ser inserida ou
escrevemos uma consulta cujo resultado seja um conjunto de tuplas a serem inseridas.
Obviamente, os valores dos atributos para tuplas inseridas precisam ser membros do
domínio do atributo. Da mesma forma, as tuplas inseridas precisam ser do mesmo tipo.
A instrução insert mais simples é uma requisição para inserir uma tupla. Suponha que
desejamos inserir o fato de que Paulo Coelho Farias tem 1.200 na conta 9732 da agência
Pajuçara.
Uma remoção é expressa da mesma forma que uma consulta. Pode-se remover apenas
tuplas inteiras, não podemos remover atributos particulares.
delete from r
where P
15
Curso de Ciência da Computação - UNIFOR-MG
Projeto de Banco de Dados (SQL) - Profª. Denise Ferreira Garcia
____________________________________________________________________________________
Em certas situações, podemos desejar mudar um valor em uma tupla sem mudar todos
os valores da tupla. Para isto, a instrução update pode ser usada. Como era o caso para
insert e delete, podemos escolher as tuplas que serão atualizadas usando uma consulta.
Suponha que esteja sendo feito um pagamento de juros, e que em todos os saldos sejam
acrescidos 5%.
update contas
set saldo = saldo * 1.05
A instrução acima é aplicada uma vez para cada tupla em contas. Suponhamos agora
que contas com saldos superiores a 10.000 recebam 6% de juros e todas as outras
recebam 5%.
update contas
set saldo = saldo * 1.06
where saldo > 10000
update contas
set saldo = saldo * 1.05
where saldo <= 10000
Referências
Banco de Dados - Elmarsi e Navathe
Apostila da Profª. Adriana Pereira Cocco http://main.unicruz.edu.br/~adriana
Slides do Prof. Murilo Silva de Camargo disponível em
http://www.inf.ufsc.br/~mario/
16