Você está na página 1de 16

Centro Federal de Educação Tecnológica de Minas Gerais

Curso Técnico em Informática

Banco de Dados
Introdução à Linguagem SQL
Kátia Adriana Alves Leite de Barros

2011
Sumário
1 Introdução à SQL ............................................................................................................................. 2
1.1 Características: ........................................................................................................................ 2
1.2 SQL Básico ............................................................................................................................... 3
1.3 MySQL ..................................................................................................................................... 3
1.4 Tipos de Dados no MySQL ....................................................................................................... 3
1.4.1 Tipos Numéricos Básicos: ................................................................................................ 3
1.4.2 Tipos para armazenar Data e Hora.................................................................................. 4
1.4.3 Tipo cadeias ..................................................................................................................... 4
2 DDL (Data Definition Language) ...................................................................................................... 5
2.1 Criação e exclusão de um Banco de Dados ............................................................................. 5
2.2 Criação de uma Tabela em um Banco de Dados ..................................................................... 6
2.2.1 Descrição das colunas: .................................................................................................... 6
2.2.2 Descrição das chaves: ...................................................................................................... 6
2.3 Exclusão de uma Tabela em um Banco de Dados ................................................................... 7
2.4 Alteração da estrutura de uma Tabela em um Banco de Dados............................................. 7
3 DML (Data Manipulation Language) .............................................................................................. 9
3.1 Filtros e Operadores ................................................................................................................ 9
3.2 Inserção de Dados de uma Tabela .......................................................................................... 9
3.3 Exclusão de Dados em uma Tabela ....................................................................................... 10
3.4 Atualização de Dados em uma Tabela .................................................................................. 10
3.5 Selecionando dados das tabelas ........................................................................................... 10
3.6 Consultas Aninhadas e Junções de Tabelas .......................................................................... 12
3.6.1 Cláusula (NOT) IN .......................................................................................................... 12
3.6.2 Cláusulas ANY / ALL ....................................................................................................... 13
3.6.3 Junção de Tabelas: Inner Join ........................................................................................ 13
Referências Bibliográficas ..................................................................................................................... 15
1 Introdução à SQL

A Structured Query Language ou Linguagem de Consulta Estruturada é uma linguagem


fundamentada no modelo relacional e inclui comandos para a definição, consulta e atualização de
dados.

A SQL teve sua primeira versão em 1974, por Chamberlain, na IBM, com o nome de SEQUEL. Seu
primeiro protótipo se deu em 1975 e no ano seguinte ela foi revisada e estendida. A SEQUEL
passou a se chamar SQL por razões jurídicas, em 1977 e em 1982 o Amercian National Standard
Institute tornou a SQL como padrão oficial de linguagem em ambiente relacional.

1.1 Características:

A SQL possui as seguintes características:

• É uma linguagem interativa de consulta, onde seus usuários podem definir consultas
independentes de programas.
• É uma linguagem de programação para acesso a banco de dados, seus comandos aparecem
embutidos em programas de aplicação.
• É uma linguagem de administração de dados, o administrador de banco de dados (DBA) pode
utilizar o SQL para realizar suas tarefas.
• É uma linguagem cliente/servidor, os programas clientes usam comandos SQL para se
comunicarem e compartilharem dados com o servidor.
• É uma linguagem para banco de dados distribuídos, ela auxilia na distribuição de dados por
vários nós e na comunicação de dados com outros sistemas.
• É uma linguagem que possibilita o acesso a outros bancos de dados em diferentes máquinas,
auxiliando na conversão entre diferentes produtos em diferentes máquinas.

A Figura 1 mostra uma visão geral dessas principais características da SQL.

DDL Implementação
Ambiente
criar (CREATE)
destruir (DELETE)
Modificar (ALTER)
SQL
DML
consultar (SELECT)
Segurança inserir (INSERT)
Controle remover (DELETE)
Administração atualizar (UPDATE)
Figura 1 - Visão Geral da SQL

2
Além dessas características, a SQL possui as seguintes vantagens:
 Independência de fabricante
 Portabilidade entre sistemas
 Redução de custos com treinamento
 Comandos em inglês
 Consulta interativa
 Múltiplas visões de dados
 Definição dinâmica dos dados

Apesar de todas as suas vantagens, sua padronização inibe a criatividade. Ela também está longe de
ser uma linguagem relacional ideal, pois não dá suporte a alguns aspectos do modelo relacional.

1.2 SQL Básico


A SQL possui dois grupos de comandos:
 DDL (Data Definition Language): comandos utilizados para criar e apagar objetos no banco de
dados. As classes de comandos DDL são: CREATE, ALTER e DROP.
 DML (Data Manipulation Language): comandos utilizados para manipular os dados armazenados.
Os grupos são: SELECT, INSERT, UPDATE e DELETE.

1.3 MySQL
O MySQL é o mais popular SGBD SQL open source da atualidade. Ele consiste em um banco de
dados relacional que funciona em diversas plataformas como: Windows, Linux, FreeBSD, BSDI, Solaris,
Mac OSX, SunOS, SGI, etc. Além disso, ele é compatível com os mais populares drivers: ODBC, JDBC,
.NET, entre outros.

1.4 Tipos de Dados no MySQL


1.4.1 Tipos Numéricos Básicos:
1.4.2 Tipos para armazenar Data e Hora
Na hora de armazenar datas, o MySQL não verifica de uma maneira estrita se uma
data é válida ou não. Simplesmente comprova que o mês está compreendido entre 0
e 12 e que o dia está compreendido entre 0 e 31.

– Date: tipo data, armazena uma data. A margem de valores vai desde o 1 de Janeiro de
1001 ao 31 de dezembro de 9999. O formato de armazenamento é de ano-mes-dia.
– DateTime: Combinação de data e hora. A margem de valores vai desde o 1 ed Janeiro
de 1001 às 0 horas, 0 minutos e 0 segundos ao 31 de Dezembro de 9999 às 23 horas,
59 minutos e 59 segundos. O formato de armazenamento é de ano-mes-dia
horas:minutos:segundos
– TimeStamp: Combinação de data e hora. A margem vai desde o 1 de Janeiro de 1970
ao ano 2037. O formato de armazenamento depende do tamanho do campo;
– Time: armazena uma hora. A margem de horas vai desde -838 horas, 59 minutos e 59
segundos. O formato de armazenamento é 'HH:MM:SS'.
– Year: armazena um ano. A margem de valores permitidos vai desde o ano 1901 ao ano
2155. O campo pode ter tamanho dois ou tamanho 4 dependendo de se queremos
armazenar o ano com dois ou quatro algarismos.

1.4.3 Tipo cadeias


• Diferenças no espaço de armazenamento entre char e varchar

• Dados para Cadeias:


– Char(n): armazena uma cadeia de longitude fixa. A cadeia poderá conter desde 0 até
255 caracteres.
– VarChar(n): armazena uma cadeia de longitude variável. A cadeia poderá conter desde
0 até 255 caracteres. Dentro dos tipos de cadeia pode-se distinguir dois subtipos, os
tipo Test e os tipo Blob (Binary Large Object). No tipo test ordena-se sem ter
importância as maiúsculas e as minúsculas e no tipo blob ordena-se tendo em conta
as maiúsculas e minúsculas.
– TinyText e TinyBlob: Coluna com uma longitude máxima de 255 caracteres.
– LongBlob e LongText: um texto com um máximo de caracteres 4.294.967.295. Há que
ter em conta que devido aos protocolos de comunicação os pacotes podem ter um
máximo de 16 Mb.
– Enum: campo que pode ter um único valor de uma lista que se especifica. O tipo Enum
aceita até 65535 valores diferentes.
– Set: um campo que pode conter nenhum, um ou vários valores de uma lista. A lista
pode ter um máximo de 64 valores.

• Cuidados a serem tomados:


– Quando criamos uma tabela devemos sempre observar o tipo de dado adequado para
cada coluna.
– Tipos de dados escolhidos de forma inadequada podem resultar em grande
desperdício de memória e, consequente, o desempenho do sistema.

Observação: os seguintes caracteres nas sintaxes dos comandos, descritos nesta apostila, significam:
<> indica que o conteúdo entre eles deve ser definido pelo usuário
[] indica que o conteúdo entre eles é opcional
| indica que será válida qualquer uma das opções separadas por ele
... indica continuidade

2 DDL (Data Definition Language)

2.1 Criação e exclusão de um Banco de Dados


Para a criação de um banco de dados, utiliza-se o comando: CREATE DATABASE, sua sintaxe é:
CREATE DATABASE <nome do Banco de Dados>; ou
CREATE SCHEMA < nome do Banco de Dados >;
Exemplo: create database BDAula;

Para realizar a exclusão de um banco de dados, o comando utilizado é o DROP DATABASE, cuja
sintaxe é:
DROP DATABASE <nomeBD>;
Exemplo: drop database BDAula;
2.2 Criação de uma Tabela em um Banco de Dados
O comando utilizado para a criação de tabelas em um banco de dados é o CREATE TABLE. Sua
sintaxe geral é:
CREATE TABLE <nomeTabela>
( <descriçãoColunas>,
<descriçãoChaves>
) Type InnoDB | MyISAM;

Obs.: A partir da versão 5.5 o default na criação de tabelas MySQL é o InnoDB, que permite
suporte a transações, chaves estrangeiras, nível de bloqueio por campo, etc.

2.2.1 Descrição das colunas:


Sintaxe usada: <nome do coluna> <tipo da coluna1(M)> [parâmetro1] [parâmetro2] ...[parâmetron],
<nome da coluna2> <tipo da coluna2(M)> [parâmetro1] [parâmetro2] ...[parâmetron],
<nome da colunan> <tipo da colunan(M)> [parâmetro1] [parâmetro2] ...[parâmetron],
Sendo que:
 M significa o tamanho máximo de armazenamento para a coluna na tabela
 Os parâmetros são opcionais e podem incluir as seguintes cláusulas:

NOT NULL Define que a coluna não pode ser nulo.


DEFAULT <valor> Define um valor padrão para a coluna. Caso o valor definido for
alfanumérico, esse deverá estar entre aspas simples ‘valor’
AUTO_INCREMENT Define que a coluna seja um número sequencial criado
automaticamente, a partir da inclusão de um novo registro na
tabela.
PRIMARY KEY Define que a coluna seja a chave principal da tabela.

2.2.2 Descrição das chaves:


Sintaxe usada:
Chave Primária: PRIMARY KEY (<coluna PK>),
Chave Estrangeira: FOREIGN KEY (<coluna FK>)
REFERENCES <tabela origem FK> (<chave tabela origem FK>)
[<cláusulas>],
Chave Secundária:1 UNIQUE KEY (<coluna com valores únicos>),

As cláusulas podem ser:


ON DELETE <ação>: diz qual ação a ser realizada quando a referência da chave estrangeira for excluída.
ON UPDATE <ação>: diz qual ação a ser realizada quando a referência da chave estrangeira for
alterada.

1
As chaves declaradas como Unique Key foram denominadas, nesta apostila, como Chaves Secundárias. Uma
coluna pode ser declarada como Unique Key quando seus valores precisam ser únicos. Elas, assim como a PK,
identificam de forma única uma tupla (ocorrência), entretanto, não podem ser referenciadas em outra tabela
como FK.
Ex.: Funcionarios(CodFunc, CPF, NomeFunc, CodCargo, e-mail)
Teremos: CodFunc (PK), CodCargo (FK) e, como chaves secundárias, o e-mail e o CPF, cujos valores não podem
se repetir.
As ações são mutuamente exclusivas e podem ser:
NO ACTION Produz um erro indicando que a exclusão ou a atualização cria uma
violação da restrição de chave estrangeira. Esta é a ação padrão.
CASCADE Exclui qualquer linha que faça referência à linha excluída ou atualiza o
valor da coluna que faz referência para o novo valor da coluna
referenciada, respectivamente.
SET NULL Atribui o valor nulo às colunas que fazem referência.
SET DEFAULT Atribui o valor padrão às colunas que fazem referência.

Exemplo: create table tbfunc


(
codigotbfunc int(2) auto_increment,
nometbfunc varchar (30) not null,
cidadetbfunc varchar (20) default 'varginha ',
salariotbfunc float,
cpftbfunc int(11) not null,
cargotbfund int(3),
primary key (codigotbfunc),
unique key (cpftbfunc),
foreign key (cargotbfund) references tbcargos (codcargo)
on delete cascade on update cascade
) type innodb;

create table tbprodnf


(
prodtbprodnf int(5) not null,
nftbprodnf int(7) not null,
quanttbprodnf float not null,
primary key (prodtbprodnf, nftbprodnf),
foreign key (prodtbprodnf) references tbproduto (codproduto)
on delete cascade on update cascade,
foreign key (nftbprodnf) references tbnf (numnf)
on delete cascade on update cascade
);

2.3 Exclusão de uma Tabela em um Banco de Dados


A exclusão de uma tabela em um banco de dados é realizada pelo comando DROP TABLE, sua sintaxe
é: DROP TABLE <nome da tabela>;
Exemplo: drop table tbfunc;

2.4 Alteração da estrutura de uma Tabela em um Banco de Dados


A alteração da estrutura de uma tabela poderá ser realizada com o comando ALTER TABLE, cuja sintaxe
é: ALTER TABLE
<ação> COLUMN <nome da coluna1> [tipo da coluna(M)] [parâmetros],
A ação pode ser:
ADD Adicionar coluna
DROP Excluir coluna
MODIFY Modificar estrutura da coluna
Exemplo:
alter table tabfunc
add column uftbfun varchar(2) default 'mg',
modify column cidadetbfunc varchar (25) default 'montes claros ',
drop column salariotbfunc;

Alteração de Chaves
Inclusão de Chave Estrangeira (FK):
Quando a alteração incluir a modificação de um atributo simples para uma chave estrangeira,
será necessário que o atributo tenha o mesmo formato da chave principal a qual se
referenciará;
Sintaxe:
ALTER TABLE <nome da Tabela>
ADD FOREIGN KEY (<coluna FK>) REFERENCES <tabela origem FK> (<PK Tabela Origem>)
Exemplo:
alter table tabfunc
add foreign key (codcargo) references tabcargos (cbo);

Exclusão de Chave Estrangerira (FK)


Sintaxe:
ALTER TABLE <nome da Tabela> DROP FOREIGN KEY (<coluna FK>)
Exemplo:
alter table tabfunc
drop foreign key (codcargo)

Inclusão e Exclusão de Chave Principal (PK):


Sintaxe para inclusão de PK:
ALTER TABLE <nome da Tabela> ADD PRIMARY KEY (<coluna PK>);
Exemplo:
alter table tabfunc add primary key (codfunc);
Sintaxe para exclusão de PK:
ALTER TABLE <nome da Tabela> DROP PRIMARY KEY;
Exemplo:
alter table drop primary key;
3 DML (Data Manipulation Language)

3.1 Filtros e Operadores


A linguagem SQL permite a criação de filtros para a ação de alguns de seus comandos através da
cláusula WHERE. Para a criação desses filtros pode-se utilizar os seguintes operadores:

Operador Função do Operador nas Expressões


= Igual Faz uma comparação de igualdade.
Ex.: Idade = 10 (avalia se a coluna idade de uma tabela possui ocorrências iguais à
10)
> Maior que Avalia se um termo é maior que o outro.
Ex.: Idade > 10 (avalia se a coluna idade possui ocorrências maiores que 10)
< Menor que Avalia se um termo é menor que o outro.
Ex.: Idade < 10 (avalia se a coluna idade possui ocorrências menores que 10)
>= Maior ou igual que Avalia se um termo possui valor maior ou igual ao outro.
Ex.: Idade >=10 (avalia se a coluna idade tem ocorrências maiores que 10)
<= Menor ou igual que Avalia se um termo possui valor menor ou igual ao outro.
Ex.: Idade >=10 (avalia se a coluna idade tem ocorrências maiores que 10)
And E Permite juntar expressões.
Ex.: Idade >100 and Idade < 200 (verifica se existem ocorrências na coluna Idade
que possuem valores maiores que 100 e menores que 200)
Or Ou Permite que duas ou mais condições sejam testadas, esperando resultado
verdadeiro de qualquer uma delas.
Ex.: Idade=30 or Idade=35 (verifica se existem ocorrências na coluna Idade que
possuem valor igual a 30 ou igual a 35).
Not Operador de Inverte o valor de uma condição
negação Ex.: se a expressão Idade=10 retornar verdadeiro, a expressão not valor=10 será
falso.
In Em (indica local) Permite indicar um local, ou seja, os resultados de um comando SELECT
Null Nulo É um valor do tipo nulo. Representa valores não definidos.
Ex.: Idade = Null (verifica se existem ocorrências na coluna Idade que não têm
valores – são nulos)
Like Valida expressões Permite a comparação com valores aproximados.
com dados Ex.: descrição like “despesa%” (define uma comparação na qual os valores para a
semelhantes coluna descrição devem iniciar com a string “despesa”)

3.2 Inserção de Dados de uma Tabela


O comando utilizado para incluir dados em uma tabela é o INSERT INTO. Ele utiliza a seguinte
sintaxe:
INSERT INTO <nome da tabela>
(<nome da coluna1>, <nome da coluna2>, <nome da colunan>)
VALUES
('valor da coluna1' , 'valor da coluna2 ', 'valor da colunan');

Observação: Para incluir dados em uma tabela não precisamos utilizar todas as colunas,
somente aquelas nas quais queremos persistir os dados.
Prestar bastante atenção para:
 Não definir valores para as colunas definidas como AUTO_INCREMENT; e,
 Não esquecer de definir valores para as colunas que não aceitam Null.

Exemplo: insert into tbfunc


(nometbfunc, cidadetbfunc)
values
(' maria tereza de jesus ', 'ouro preto');

3.3 Exclusão de Dados em uma Tabela

Para a exclusão de dados em uma tabela utiliza-se o comando DELETE, com a seguinte sintaxe:
DELETE FROM <nome da tabela> [WHERE <condição>];

Observação: a cláusula WHERE restringe os registros nos quais o comando DELETE atuará.
Quando ela não for especificada, o comando apagará todos os registros da
tabela. Além disso, o comando DELETE retorna o número de registros excluídos
da tabela.

Exemplo: delete from tbfilmes where ano<2006;


delete from tbfilmes where diretor like '%jackson'

3.4 Atualização de Dados em uma Tabela


O comando SQL que nos permite atualizar dados no MySQL é o UPDATE. A sintaxe básica
desse comando é:
UPDATE <nome da tabela>
SET <nome da coluna1> = expr1 [<nome Coluna2> = expr2 ...]
[WHERE <condição>];

Observação: a cláusula SET atribui a um campo o valor de uma expressão que pode ou não
conter o valor de um campo da própria tabela. A cláusula WHERE restringe as
atualizações apenas aos registros que satisfarão suas condições.

Exemplos: update tbfilmes set ano=2006;


update tbfilmes set rua='dr. júliano dias'
where rua = 'dra. juliano fias’;

3.5 Selecionando dados das tabelas


Para selecionar os dados de uma tabela, utiliza-se o comando SELECT, cuja sintaxe é:

SELECT <nome coluna1>, <nome coluna2>, <nome colunan> | *


FROM <nome Tabela1>, <nome Tabela2>, <nome Tabelan>
[WHERE <expressão de condição>]
[GROUP BY <nome coluna>]
[HAVING <expressão de condição>]
[ORDER BY <nome coluna> ASC | DESC];

Sendo que:
 Para visualizar os dados de todas as colunas, ao invés de colocar os nomes das colunas,
deve-se colocar o caractere asterisco (*);
 Quando se utiliza mais de uma tabela pode-se definir uma letra como apelido de uma
tabela e, quando for necessário utilizar o nome da tabela no comando, utiliza-se seu
apelido, que pode ser um nome muito menor e mais fácil de trabalhar.
 A expressão de condição utilizada na cláusula WHERE serve como filtro permitindo a
execução do comando apenas nas tuplas que satisfaçam a condição.
 A cláusula GROUP BY permite criar grupos de tuplas quando se utiliza várias tabelas,
além de permitir a utilização de funções predefinidas que retornem valores em grupos.
 A cláusula HAVING permite inserir condições sobre o agrupamento de tuplas, gerado
pela cláusula GROUP BY.
As funções utilizadas pela SQL são:

Função Papel desempenhado


SUM(<nome coluna>) Retorna a soma dos valores da coluna
AVG(<nome coluna>) Retorna a média aritmética dos valores da coluna, ignorando os valores
nulos
MIN(<nome coluna>) Retorna o menor valor encontrado na coluna
MAX(<nome coluna>) Retorna o maior valor encontrado na coluna
COUNT(<nome coluna>) Retorna quantas vezes o valor especificado é encontrado na coluna

 A cláusula ORDER BY define a ordem para a consulta que pode ser ASC – ascendente,
ou DES – descendente. Quando não utilizada o SELECT assumirá ASC.

Exemplos:
{lista todos as informações dos alunos da tabela tbalunos}
select *
from tbalunos;

{lista a matrícula e o nome de todos os alunos da tabela tbalunos}


select tbmatricula, tbnome
from tbalunos;

{lista a matrícula e o nome de todos os alunos que possuem o nome com a string final “dias”}
select tbmatricula, tbnome
from tbalunos
where tbnome like '%dias’;

{lista o nome do aluno, a disciplina e a sua respectiva nota}


select a.nome, d.descrição, n.valor
from tbaluno a, tbdisciplina d, tbnotas n
where n.aluno = a.matricula and n.disciplina = d.codigo;

{ lista o nome dos alunos e suas respectivas médias}


select a.nome, avg(n.valor) as media
from tbaluno a, tbdisciplina d, tbnotas n
where a.matricula = n.aluno and d.codigo = n.disciplina
group by a.matricula
order by n.aluno;

{ lista o nome das disciplinas que possuem mais de 2 alunos matriculados}}


select d.nome, count(m.matricula) as Qtd_Alunos
from tbdisciplina as d, tbmatricula as m
where d.codigo = m.disciplina
group by m.disciplina
having count(m.matricula) >2
3.6 Consultas Aninhadas e Junções de Tabelas
Forma alternativa de especificar consultas envolvendo relacionamentos entre tabelas. As
subconsultas só podem ser definidas na cláusula WHERE. As cláusulas utilizadas para definição de
consultas, são: IN, ANY, ALL, EXISTS e CONTAINS.

Considere as tabelas geradas pelo DER do BDAcademic para os exemplos a seguir

Matricula
Nome
CH RG Código Nome
Codigo Nome

0,N 1,N 1,N 0,1


Disciplina matricula Aluno matrícula Curso

Nota
Frequência

TBDisciplina TBMatricula TBAluno

TBCurso

3.6.1 Cláusula (NOT) IN


Esta cláusula estabelece a relação de pertinência entre conjuntos (tabelas). Sua avaliação retorna um
valor booleano.
Sintaxe:
WHERE <atributo ou expressão>
[NOT] IN (<subconsulta>)

Exemplo: Buscar nome de todos os alunos sem matrícula


select a.matricula, a.nome
from tbaluno as a
where a.matricula not in
(select m.matricula
from tbmatricula as m)
Passos2:
1º Executa subconsulta 2º Executa consulta externa: compara as tuplas da consulta
externa com o resultado da subconsulta

3.6.2 Cláusulas ANY / ALL


Permite outras formas de comparação elemento-conjunto.
Sintaxe:
WHERE <atributo ou expressão>
[Operador lógico] ANY|ALL (<subconsulta>)

Exemplos: Buscar o nome de todos os alunos, exceto que tirou a menor nota:
select a.matricula, a.nome, m.nota
from tbaluno as a, tbmatricula as m
where a.matricula = m.matricula and
m.nota > any (select m.nota
from tbmatricula as m)

Buscar alunos que estão matriculados na disciplina ‘Física’ e mostrar o número de


sua matrícula, seu nome e o nome do curso em que está matriculado.

select a.matricula, a.nome, c.nome


from tbaluno as a, tbcurso as c
where a.curso = c.codigo and
a.matricula in
(select m.matricula
from tbmatricula as m
where m.disciplina = all
(select d.codigo
from tbdisciplina as d
where = d.nome ='Física'))

3.6.3 Junção de Tabelas: Inner Join


Recupera apenas pares de tuplas que combinam com a condição de junção (após a cláusula ON).
Sintaxe:
FROM <TabelaA> INNER JOIN <TabelaB>
ON <condição>

2
Passos válidos para as cláusulas IN, ANY e ALL
Exemplos: Recuperar todos os nomes das disciplinas que possuem mais de dois alunos
matriculados.

select d.nome, count(m.matricula) as Qtd_Alunos


from tbdisciplina as d, tbmatricula as m
where d.codigo = m.disciplina
group by m.disciplina
having count(m.matricula) >2
Referências Bibliográficas

COUGO, Paulo. Modelagem Conceitual e Projeto de Banco de Dados. Rio de Janeiro: Elsevier, 1997.

SILBERSCHATZ, Abraham; KORTH, Henry, F.; SUDARSHAN, S. Sistema de Banco de Dados. Makron
Books, 1999.

TEOREY, Toby; LIGHTSTONE, Sam; NADEAU, Tom. Projeto e Modelagem de Bancos de Dados. Rio de
Janeiro: Campus, 2007.

ELMASI, Ramez; NAVATHE, Samkant B. Sistemas de Banco de Dados.São Paulo: Pearson, 2011.

Você também pode gostar