Академический Документы
Профессиональный Документы
Культура Документы
1. A Linguagem SQL
Embora se fale que a linguagem SQL é uma linguagem de consulta, essa linguagem
possui outras capacidades além de realizar consultas em um banco de dados. A
linguagem SQL possui recursos para definição da estrutura de dados, para modificar
dados no banco de dados e recursos para especificar restrições de segurança e
integridade.
A versão original da linguagem SQL foi desenvolvida no Laboratório de Pesquisa da
IBM. Esta linguagem, originalmente chamada SEQUEL., foi implementada como parte
do projeto System R no início dos anos 70. A linguagem SEQUEL evoluiu e seu nome
foi mudado para SQL (Strutured Query Language). Numerosos Sistemas Gerenciadores
de Banco de Dados suportam a linguagem SQL. A SQL estabeleceu-se como a
linguagem padrão de banco de dados relacional. Embora existam diversas versões, com
algumas diferenças entre elas, a estrutura da SQL se mantém inalterada desde a sua
criação. Atualmente a versão do padrão SQL utilizada é a SQL-99.
Como a especificação do padrão SQL está em expansão, o último padrão SQL-99 foi
dividido em uma especificação de núcleo (core) mais pacotes (packages) opcionais. O
núcleo deve ser implementado por todos os vendedores de SGBDs relacionais
compatíveis com o padrão. Os pacotes podem ser implementados como módulos
opcionais, que podem ser adquiridos independentemente para as aplicações específicas
de um banco de dados, como datamining, dados espaciais, dados temporais, data
warehousing, OLAP, dados multimídia, e assim por diante.
15
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.
15
Curso de Ciência da Computação - UNIFOR-MG
Projeto de Banco de Dados (SQL) - Profª. Denise Ferreira Garcia
____________________________________________________________________________________
Para remover uma relação de um banco de dados SQL, usa-se o comando drop table. O
comando drop table remove todas as informações sobre a relação. O comando drop
table r onde r é o nome de uma relação (tabela) existente.
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
As restrições de integridade servem para garantir as regras inerentes ao sistema que
está sendo implementado, prevenindo a entrada de informações inválidas pelos usuários
desse sistema. Para isso, o SGBD deve prover ferramentas para a definição de regras de
integridade, a fim de evitar a inconsistência dos dados que nele serão armazenados.
15
Curso de Ciência da Computação - UNIFOR-MG
Projeto de Banco de Dados (SQL) - Profª. Denise Ferreira Garcia
____________________________________________________________________________________
endereco char(40),
cidade char(20) )
Chave Primária
15
Curso de Ciência da Computação - UNIFOR-MG
Projeto de Banco de Dados (SQL) - Profª. Denise Ferreira Garcia
____________________________________________________________________________________
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
Freqüentemente desejamos assegurar que o valor de um determinado campo de uma
tabela esteja presente na chave primária de outra tabela. Este campo é chamado chave
estrangeira (FOREIGN KEY).
A SQL original padrão não incluía instruções para especificar chaves estrangeiras. Um
aperfeiçoamento posterior foi aprovado como uma adição ao padrão. Este recurso
permite a especificação de chaves primárias e estrangeiras como parte da instrução
create table.
15
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.
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
15
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.
15
Curso de Ciência da Computação - UNIFOR-MG
Projeto de Banco de Dados (SQL) - Profª. Denise Ferreira Garcia
____________________________________________________________________________________
from emprestimo
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
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
15
Curso de Ciência da Computação - UNIFOR-MG
Projeto de Banco de Dados (SQL) - Profª. Denise Ferreira Garcia
____________________________________________________________________________________
numero_do_emprestimo_do_devedor
from devedor, emprestimo
where devedor.numero_emprestimo = emprestimo.numero_emprestimo
and nome_agencia = 'Perryridge'
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.
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.
15
Curso de Ciência da Computação - UNIFOR-MG
Projeto de Banco de Dados (SQL) - Profª. Denise Ferreira Garcia
____________________________________________________________________________________
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;
3. Se existe c1 cópias da tupla t1 em r1 e c2 cópias da tupla t2 em r2, existe c1 × c2
cópias da tupla t1.t2 em r1 × r2.
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:
15
Curso de Ciência da Computação - UNIFOR-MG
Projeto de Banco de Dados (SQL) - Profª. Denise Ferreira Garcia
____________________________________________________________________________________
média: avg
mínimo: min
máximo: max
total: sum
contar: count
Nota: Atributos na cláusula select fora das funções agregadas devem aparecer na lista
group by.
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.
É 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
15
Curso de Ciência da Computação - UNIFOR-MG
Projeto de Banco de Dados (SQL) - Profª. Denise Ferreira Garcia
____________________________________________________________________________________
NOT
TRUE FALSE
FALSE TRUE
UNKNOWN UNKNOWN
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)
15
Curso de Ciência da Computação - UNIFOR-MG
Projeto de Banco de Dados (SQL) - Profª. Denise Ferreira Garcia
____________________________________________________________________________________
(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 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)
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.
15
Curso de Ciência da Computação - UNIFOR-MG
Projeto de Banco de Dados (SQL) - Profª. Denise Ferreira Garcia
____________________________________________________________________________________
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/
15