Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
FUNDAMENTOS DE
BANCO DE DADOS
Fundamentos de
Banco de Dados
ISBN
CDD 005.74
A responsabilidade pelo texto e imagens desta obra do autor. O contedo desta obra foi licenciado, temporria e
gratuitamente, para utilizao no mbito do Sistema Universidade Aberta do Brasil, atravs da UFPI. O leitor se compromete
a utilizar o contedo desta obra para aprendizado pessoal, sendo que a reproduo e distribuio ficaro limitadas ao mbito
interno dos cursos. A citao desta obra em trabalhos acadmicos e/ou profissionais poder ser feita, com indicao da fonte.
A cpia desta obra sem autorizao expressa, ou com intuito de lucro, constitui crime contra a propriedade intelectual, com
sanes previstas no Cdigo Penal.
proibida a venda deste material.
Este material didtico destinado aos alunos que chegaram ao Mdulo
IX, do curso de Sistemas de Informao modalidade Distncia, da Universidade
Federal do Piau, consorciada da Universidade Aberta do Piau. Aqui sero
abordados os conceitos e princpios fundamentais da rea de Banco de Dados
(BD).
No contexto mercadolgico, a rea da Informtica muito importante
para todos os setores, visto que, na atualidade, os recursos tecnolgicos se
instalam em todas as reas do conhecimento.
O presente material divide-se em quatro unidades, assim constitudas:
Unidade 1 - Introduo, viso geral, objetivos, vantagens e desvantagens,
requisitos funcionais, modelos de BD, componentes de SBD (Sistemas de Banco
de dados) e linguagens de Banco de Dados.
Unidade 2 - Modelagem e projeto de Bancos de Dados.
Unidade 3 - Modelo relacional, lgebra relacional, teoria das
dependncias, normalizao e processamento de consultas.
Unidade 4 - Linguagem SQL e uso do MySQL e demais softwares de
apoio para o aprendizado desta disciplina.
UNIDADE 1
11
CONCEITOS E ESTRUTURA DE BANCO DE DADOS
Histrico 11
Evoluo 11
Objetivos Fundamentais dos Sistemas de Bancos de Dados 12
Abstrao de dados 14
Instncias e Esquemas 15
Independncia de Dados 16
Linguagens de Banco de Dados 16
Sistema de Gerenciamento de Banco de Dados 17
Recursos Humanos 18
Exerccios 20
UNIDADE 2
23 MODELAGEM DE BANCO DE DADOS
Conceitos 23
Restries de Mapeamento (Cardinalidades) 25
Notaes para os diagramas 25
Relacionamentos Especiais 27
Um Exemplo Resolvido 29
Exerccios 30
UNIDADE 3
35
MODELO RELACIONAL
Origens e Conceitos 35
lgebra Relacional 36
Normalizao Teoria das Dependncias 43
Exerccios 50
UNIDADE 4
55
LINGUAGEM SQL E USO DO MYSQL
Consideraes Iniciais 55
Usando o MySQL Workbench 5.0 OSS 56
Usando o DB Manager 59
Tpicos sobre MySQL 63
Exerccios 63
APNDICE - A
67
MYSQL TUTORIAL BSICO
APNDICE - B
83
USO PRTICO DE SQL PADRO
UNIDADE 1
Conceitos e Estrutura
de Banco de Dados
Resumindo
Este material destina-se a iniciar os alunos na rea de Banco de Dados, promovendo
esclarecimentos sobre esta poderosa forma de armazenar os valiosos itens de
informao das empresas.
CONCEITOS E ESTRUTURA
DE BANCO DE DADOS
Histrico
Evoluo
12 UNIDADE 1
organizao. Sob tal circunstncia, imagine que seja necessrio controlar
o estoque de uma empresa na rea de comrcio ou que seja necessrio
informatizar uma clnica mdica ou uma escola. Estes so casos tpicos de
Sistemas de Informao que sero desenvolvidos para serem usados em
rede por vrios usurios ao mesmo tempo.
Desenvolver um Sistema destes com um meio de armazenamento
qualquer, que no seja um Sistema de Gerenciamento de Banco de Dados,
puro suicdio. O caos se instala facilmente na empresa e os Profissionais de
Informtica ficam desacreditados por l.
A soluo implementar as regras de negcio em uma linguagem de
programao, seguindo normas e regras da Interface Humano-Computador
e da Engenharia de Software. Todavia, na hora de guardar os dados
importante no se deixar seduzir pelas facilidades de tabelas de pacotes de
uso pessoal, tais como: Paradox, Access, Dbase e outros componentes dos
Offices da vida. Estas tabelinhas de brinquedo so muito boas para treinar
programao, mas na vida real convm usar um SGBD, para no ficar mal
visto pelos seus clientes.
Vejamos as caractersticas fundamentais dos Sistemas de Bancos de
Dados:
Reduzir ou evitar a Inconsistncia de Dados os dados mantidos
de forma consistente so fontes de confiabilidade para todos que
usam o Banco de Dados ao longo de toda a sua vida til;
Facilitar o acesso aos dados Se o usurio tiver o direito de
acessar um dado, que este acesso seja possibilitado da forma mais
fcil possvel, pois desta forma ganha-se produtividade e tempo;
Evitar o Isolamento de Dados Dados isolados so uma praga a ser
combatida. Uma tabela isolada em um esquema de Banco de Dados
tende a ficar apenas ocupando espao no disco, sem, com isso, ajudar
em nada no bom funcionamento do Sistema. Uma exceo deve ser
feita s tabelas auxiliares;
Combater as Anomalias de Acesso Concorrente Eis a grande
dificuldade dos aplicativos pessoais de Banco de Dados (Access,
Paradox, etc), os quais so concebidos apenas para o usurio brincar
de cadastro. Quando so usados em rede, esses aplicativos ficam
sem saber o que fazer com o acesso concorrente, e acabam por
danificar os dados dos usurios. Um bom sistema de Banco de Dados
deve controlar este acesso concorrente de maneira prtica, eficiente
e transparente para o usurio;
Abstrao de dados
14 UNIDADE 1
Viso Viso ... Viso
Nvel
Conceitua
Nvel
Fsico
Instncias e Esquemas
16 UNIDADE 1
Existem dois tipos de DML: a procedural, que conta com linha de
comando para o usurio digitar comandos de manipulao e verificar seus
resultados; no-procedural, que conta com uma interface que facilita a
interao do usurio com o sistema, sem haver a necessidade de saber de
memorizao dos comandos da linguagem.
18 UNIDADE 1
Demais usurios de Banco de Dados
Exerccios
1. Diferencie um SBD de um SGBD.
2. Por que programas pessoais de Banco de Dados como Access, Paradox,
Dbase e outros no podem ser considerados SGBDs?
3. Conceitue Independncia de Dados em seus dois aspectos.
4. Fale da evoluo dos modelos de Banco de Dados.
20 UNIDADE 1
UNIDADE 2
Modelo
Entidade-Relacionamento
Resumindo
Neste captulo so abordados os aspectos de projeto de um Banco de Dados Relacional,
atravs do Modelo Entidade-Relacionamentos. Para que um Banco de Dados Relacional
seja criado corretamente, fundamental saber fazer projetos lgicos e fsicos. Nesta
unidade so estudados os projetos lgicos. Os projetos fsicos fluem naturalmente aps
os estudos das duas unidades seguintes, principalmente aps a teoria de Normalizao
de tabelas e comandos de SQL.
MODELO ENTIDADE-
RELACIONAMENTO
Conceitos
Observao:
A partir deste ponto os nomes que sero mapeados para o Banco
de Dados sero grafados sem acentuao e sem cedilha. Esta prtica evita
problemas de implementao e execuo.
Entidades (Conjunto de Entidades) - um elemento da vida real,
na situao a ser modelada para o Banco de Dados, que pode ser distinguvel
dos demais, estando sempre representadas no plural. No Estudo de Caso,
normalmente, as entidades tm ligaes com os substantivos mais relevantes
do texto.
Relacionamentos (Conjunto de Relacionamentos) - So as ligaes
que devem existir entre as entidades. Uma vez que foram destacados os
substantivos que levaro s entidades, os relacionamentos so os verbos
que esto ligados a estes substantivos.
Ex.: (...) Os Alunos podem fazer apenas um curso por vez. (...)
Tem-se neste trecho duas entidades: ALUNOS e CURSOS. O
relacionamento entre estas entidades PODEM FAZER.
Atributos - So qualificaes pertencentes s entidades. Quando se
faz necessrio um relacionamento ter atributos, este ser elevado categoria
de entidade associativa, conforme ser visto posteriormente. No texto, os
Exemplos:
Imagine a entidade ALUNOS.
O campo matrcula a identificao de cada aluno, portanto, a chave
primria. No Brasil existe um documento de numerao nica usado pela
Receita Federal, o CPF (CNPF), antigo CIC. O CPF seria, neste exemplo,
uma chave candidata do aluno. Para aplicao de alguns conceitos de
Bancos de Dados que sero vistos mais adiante, a superchave desta tabela
seria matrcula e CPF.
24 UNIDADE 2
Uma chave estrangeira aparece com a sigla CE (ou FK) acima de seu
nome. Exemplo: codCursoCE.
DEPENDENTES
Matr* Nome
ALUNO
Peter Chen
Matr* Nome Cod* Desc
James Martin
Fazem
ALUNOS CURSOS
E feito por
26 UNIDADE 2
notaes de cardinalidades que so prprias de cada notao.
CARDINALIDADES Sero listadas aqui as diferenas de notao
de cardinalidades entre as notaes vistas.
Observe a tabela a seguir e perceba essas diferenas.
Relacionamentos Especiais
Matr* Nome
PESSOAS
-UM
ALUNO PROFESSOR
Funcionrios Projetos
Equipamentos
Agregao
28 UNIDADE 2
que est agregado passa a ser considerado pelo modelo, como sendo uma
grande entidade em relao terceira entidade envolvida.
Matr* Nome
FUNCIONRIOS
Autorrelacionamento
Um Exemplo Resolvido
Estudo de caso:
Uma empresa tem vrios funcionrios que so lotados em
departamentos. Um funcionrio est em apenas um departamento de cada
vez. Ao funcionrio dada a opo de ter dependentes. Cada departamento
responsvel por um projeto da empresa. Os dados mais importantes de
funcionrio so: matrcula, nome, CPF, endereo e telefone. Os dependentes
devem ter nome e cdigo. Cada departamento tem cdigo, sigla e nome
completo. Os projetos possuem cdigo, data de criao e prazo de execuo.
Pede-se que seja feito o diagrama de entidades-relacionamentos deste caso.
Ender
Nom
Nom
Fone
Funcionrios Departamentos
Dt_cria
CodDe
CodPj*
Nom Praz
Dependentes Projetos
Exerccios
30 UNIDADE 2
departamento onde trabalha com vrios colegas. Existe apenas um
chefe para todos. Cada departamento dividido em equipes que so
responsveis por um ou mais projetos da empresa. Modele um diagrama
entidade-relacionamento para este caso.
8. Em uma clnica so atendidas diversas especialidades mdicas. Os
convnios so classificados em dois grupos: SUS e demais convnios
(que incorpora o particular). Quando o paciente solicita determinada
especialidade, marcada uma consulta ligando este ao mdico que
vai atend-lo. Quando o paciente no sabe qual especialidade precisa,
enviado a uma consulta de enfermagem, para ser ento marcada a
consulta com o especialista. Tanto a consulta de enfermagem quanto
do mdico pode gerar ou no requisio de exames. Apresente o
Diagrama de Entidades e Relacionamentos deste caso.
9. A empresa de transportes Corisco precisa de um sistema de
acompanhamento de cargas e entregas. funo deste, gerenciar
o cadastro de veculos que trafegam com um ou dois motoristas,
dependendo da distncia marcada na rota. Cada veculo possui uma
capacidade de carga diferente. As entregas so feitas para pedidos de
clientes cadastrados. Os produtos podem ser classificados nas categorias
perecveis e no perecveis, e isto influencia no tipo de veculo usado
no transporte. Apresente o Diagrama de Entidades e Relacionamentos
deste caso.
10. Apresente o Diagrama de Entidades e Relacionamentos deste caso:
um hotel precisa de um sistema de controle. Os hspedes telefonam
e fazem reservas fornecendo o CPF, nome completo, endereo de
residncia, cidade, estado, telefone fixo, celular, data de chegada e
data prevista de partida. So reservados quartos dentro de uma das
categorias disponveis, com seus respectivos preos de dirias. Cada
quarto pertence a uma categoria. Nas reservas que se concretizam
ficam agregadas tambm as despesas de restaurante e de frigobar,
detalhando os produtos e pratos consumidos.
Resumindo
Este modelo de banco de Dados foi escolhido para ser estudado nesta etapa do material
por que o modelo dominante no mundo h mais de 25 anos. O Banco de Dados
Orientado a Objetos ainda no se firmou como um modelo amplamente aceito no
mundo, nem sequer foi padronizado para tal, apesar de as linguagens de programao
terem evoludo do paradigma imperativo para as linguagens orientadas a objetos. O
Modelo relacional de Dados surgiu da ideia de melhorar as estruturas de suporte aos
dados existentes nos Bancos de Dados da poca dos modelos: Hierrquico e em Rede.
A ideia fundamental foi escapar dos grafos e rvores e seus algoritmos complexos e
alguns at sem soluo.
MODELO RELACIONAL
Origens e Conceitos
lgebra Relacional
a) Operao Seleo ()
36 UNIDADE 3
atendam a um determinado critrio. Seu smbolo a letra sigma minscula. A
sua sintaxe mostrada logo abaixo:
(campoX = valor) (nomeTabela)
Observe que o critrio aparece subscrito ao smbolo da operao;
entretanto, o nome da tabela deve aparecer no mesmo nvel da operao.
Para a formulao do critrio pode-se usar qualquer campo da tabela,
juntamente com qualquer smbolo de comparao vlido, tal como: =, <>, < ,
>, <=, >= , alm do valor a ser comparado ao campo condizente com o domnio
do campo, ou seja, para um campo inteiro deve-se fazer comparaes com
valores inteiros.
Tomando a tabela a seguir como exemplo:
Nome da tabela
Alunos
Tabela 1: Alunos
Matr* Nome Endere Fone CodCursoCE
123 Flvio Jos Rua Pedro, 2290 5859-6930 01
205 Aline Maria Rua Pereira, 224 7452-8520 01
330 Jos Luiz Rua Pedro, 450 3358-9665 02
440 Clarita Silva Rua Riachuelo, 177 6598-8754 05
b) Operao Projeo ()
Matr* Nome
123 Flvio Jos
205 Aline Maria
330 Jos Luiz
440 Clarita Silva
38 UNIDADE 3
Em SQL, a clusula para obter este mesmo resultado seria:
Observa-se que:
Tabela 2 - Alunos
Matr* Nome Endere Fone CodCursoCE
123 Flvio Jos Rua Pedro, 2290 5859-6930 01
205 Aline Maria Rua Pereira, 224 7452-8520 01
330 Jos Luiz Rua Pedro, 450 3358-9665 02
440 Clarita Silva Rua Riachuelo, 177 6598-8754 05
Tabela_1 x Tabela_2
Tabela 4
123 Flvio Jos Rua Pedro, 2290 5859-6930 01 02 Veterinria 220
123 Flvio Jos Rua Pedro, 2290 5859-6930 01 05 Agronomia 190
40 UNIDADE 3
Tabela 5
Matr* Nome Endere Fone CodCursoCE Codigo Descricao cargaHoraria
123 Flvio Rua Pedro, 5859-6930 01 01 Informtica 120
Jos 2290
205 Aline Rua 7452-8520 01 01 Informtica 120
Maria Pereira,
224
330 Jos Rua Pedro, 3358-9665 02 02 Veterinria 220
Luiz 450
440 Clarita Rua 6598-8754 05 05 Agronomia 190
Silva Riachuelo,
177
Conceito: Unio-Compatvel
Tabela1 U Tabela2
Clientes Funcionrios
Cod* Nome Fone Matr* NomeF FoneF
01 Flvio 9966-6363 120 Ana 8855-2121
02 Aline 9494-4477 121 Jos 8101-8585
Clientes-Poupana Clientes-ContaCorrente
Cod* Nome Fone Matr* NomeF FoneF
01 Flvio 9966-6363 120 Ana 8855-2121
02 Aline 9494-4477 121 Jos 8101-8585
01 Flvio 9966-6363
42 UNIDADE 3
02 Aline 9494-4477
Ou seja, o cliente que tem conta-poupana, mas no tem conta-
corrente.
01 Flvio 9966-6363
Segue um exemplo:
Itens-Pedidos
codPed* codProd* quant pre_total qt_min data_ped
10 25 2 123,00 58 07-04-2009
44 UNIDADE 3
Terceira Forma Normal (3FN)
Alunos
Matr* Nome Cd_curso Desc_curso Carga_hor
01 Flvio Jos 120 Aplicaes Financeiras 200
02 Aline Maria 125 Engenharia de Software 72
Alunos
Matr* Nome Cd_cursoCE
01 Flvio Jos 120
02 Aline Maria 125
IMPORTANTE!
Mais de 95% dos casos da vida real tm sua normalizao finalizada na
Terceira Forma Normal.
Em simbologia matemtica:
A B e A C consequentemente A B|C
46 UNIDADE 3
Fun-esp-lin
Matrcula* cdEspecialid* cdIdioma*
120 02 01
120 03 03
120 03 04
121 01 01
121 06 02
Fun-esp
Matrcula* cdEspecialid*
120 02
120 03
120 03
121 01
121 06
Fun-lin
Matrcula* cdIdioma*
120 01
120 03
120 04
121 01
121 02
Assim, resolve-se o problema da Dependncia Multi-Valorada
encontrado neste caso.
Voos
matPiloto*CE refAviao*CE Trecho*CE
01 737-300 THE-REC
01 A320 REC-RIO
02 A330 RIO-BSB
02 FKK-100 BSB-THE
48 UNIDADE 3
Para solucionar este problema aplica-se a Quinta Forma Normal,
deixando as tabelas da seguinte forma:
Vo1
matPiloto*CE refAviao*CE
01 737-300
01 A320
02 A330
02 FKK-100
Vo2
matPiloto*CE Trecho*CE
01 THE-REC
01 REC-RIO
02 RIO-BSB
02 BSB-THE
Vo3
refAviao*CE Trecho*CE
737-300 THE-REC
A320 REC-RIO
A330 RIO-BSB
FKK-100 BSB-THE
ALUNOS
Matr* Nome Endere Fone
1 Jos Rua 12,12 3251-1414
2 Pedro Av. 95, 189 3366-3635
3 Ana Av Rosas, 10 3458-9587
50 UNIDADE 3
data de nascimento, telefone, local de trabalho, endereo de trabalho,
telefone do trabalho e celular. Cada cliente ligado a um contrato que
tem: nmero, a data de contratao, data de validade, dia do vencimento
e valor. O cliente pode cadastrar at quatro dependentes, bastando
fornecer o nome e a data de nascimento de cada um destes. Para cada
indivduo fornecida uma carteirinha a ser apresentada em consultrios
mdicos conveniados no ato das consultas. O sistema tambm mantm
ligado aos contratos, o cadastro de mdicos disponveis para os clientes
e dependentes. Os mdicos tm: CPF, nome, especialidade, endereo do
consultrio e horrio de atendimento.
Apresente o esquema de Banco de Dados j normalizado para este
caso, indicando at que forma normal foi aplicada.
12. Estudo de Caso:
Uma empresa de recursos humanos precisa fazer um sistema de
gerenciamento de currculos e vagas. As empresas clientes entram em
contato e informam a quantidade de vagas que dispem, inclusive, com a
qualificao requerida para o candidato. Os candidatos preenchem uma ficha
com dados pessoais e entregam Curriculum Vitae com suas qualificaes. Os
funcionrios da empresa fazem os devidos cruzamentos de informaes para
selecionar aqueles que sero chamados para a entrevista, e provavelmente
para as vagas ofertadas. O sistema deve acompanhar todo este processo.
Faa o esquema de Banco de Dados para esta aplicao e mostre-o
normalizado.
13. Observe a tabela a seguir.
52 UNIDADE 3
UNIDADE 4
Prticas com os
Softwares de Apoio
Resumindo
Nesta unidade ser tratada a parte prtica da disciplina, onde sero abordados
programas para fazer modelagem de estudos de casos, uso da linguagem SQL dentro
do SGBD MySQL, os quais todos os programas aqui utilizados so do tipo freeware ou
open source. Tambm esto todos entre os mais populares do mercado de trabalho
atual.
PRTICAS COM OS
SOFTWARES DE APOIO
Consideraes Iniciais
56 UNIDADE 4
Figura 4.2 Tela de construo do diagrama E-R
58 UNIDADE 4
de erro, basta clicar no relacionamento errado com a ajuda da ferramenta
borracha.
A figura a seguir mostra como deve ficar a ligao:
Usando o DB Manager
60 UNIDADE 4
Se o servidor estiver em outra mquina na rede, pergunte ao
administrador quais so os parmetros do MySQL, o nome do host e a porta
onde este funciona.
62 UNIDADE 4
No se esquea de clicar no boto EXECUTE. Limpe o script e teste
os contedos com o famoso:
SELECT * FROM Alunos; (clique em EXECUTE).
Depois com:
Exerccios
So usurios do MySQL:
- Silicon Graphics (www.sgi.com)
- Siemens (www.siemens.com)
- Yahoo (www.yahoo.com)
- IFX Networks (www.ifx.com.br)
- Dezenas de Web hosting e Provedores, devido ao enorme sucesso
que o MySQL vem fazendo.
Algumas bases de dados chegam a mais de 200GB. A lista completa
pode ser consultada em www.mysql.com.
Operao Bsica
Apndice 67
programa de interface grfica para MySQL, como o DB Manager.
Comeando pelo login em linha de comando:
------------------------------------------------------------------
mysql -u flavio -p supersenha
Sintaxe:
mysql -u (usurio) -p (senha)
ou
mysql -h servidor -u (usurio) --password=(senha)
------------------------------------------------------------------
mysql>
-------------------------------------------------------------------
68 Apndice
Repare que todo comando ser seguido de ponto e vrgula, pois como
em C, a maioria dos comandos do MySQL so sucedidos por ponto e vrgula.
Tabelas e campos
Apndice 69
desempenho do projeto. Tabelas mal projetadas, no-normalizadas e com
tipos mal escolhidos podem arruinar todo o sistema de informao.
CHAR(M)
Exemplo:
endereco_comercial CHAR(10);
VARCHAR(M)
Exemplo:
endereco_comercial VARCHAR(10);
70 Apndice
INT(M) [Unsigned]
carros_estocados INT;
FLOAT[(M,D)]
Exemplo:
voltagem_cadeira_eletrica FLOAT(4,2);
DATE
Apndice 71
Exemplo:
data_de_nascimento DATE;
TEXT/BLOB
Exemplo:
relatrio BLOB;
BLOB vlido: 'Minha terra tem palmeiras onde canta o...'
relatrio TEXT;
TEXT vlido: 'A que saudades que eu sinto...'
SET
Exemplo:
vicio SET("cafe", "cigarro") NOT NULL;
""
"cafe"
72 Apndice
"cigarro"
"cafe,cigarro"
ENUM
Exemplo:
Registros
nome CHAR(15);
email CHAR(25);
telefone INT;
Tabelas
Apndice 73
Antes de usar uma base de dados ou dar qualquer comando, ns
precisamos de uma tabela, pelo menos para armazenar os dados. Isto pode
ser feito usando o comando CREATE TABLE, que recebe como parmetro o
nome da tabela que desejamos usar.
----------------------------------------------------------------
mysql> CREATE TABLE teste(
>codigo INT,
>nome CHAR(15),
>email CHAR(25),
>telefone INT);
----------------------------------------------------------------
Notas:
- Chave primria:
74 Apndice
Exemplo:
Matricula INT PRIMARY KEY;
Esta declarao faz com que no seja permitido o cadastro de dois
registros com matrculas iguais na tabela.
- Auto-incremento:
Exemplo:
codigo INT AUTO_INCREMENT;
- Mostrar tabelas
Funo:
Lista todas as tabelas existentes no banco de dados atual.
Comando:
mysql>show tables;
- Mostrar colunas
Funo:
Mostra as informaes referentes estrutura, ou seja, as colunas das
tabelas desejadas.
Comando:
mysql>show columns from teste;
Apndice 75
Pode manipular vontade a tabela criada para os testes, pois
o aprendizado depende de sua disposio em fazer, desfazer e refazer
comandos e tarefas, sem medo de danificar a base de dados, que nem to
frgil assim.
Manipulando a base de dados
Inserindo registros
-----------------------------------------------------------------------
mysql>INSERT INTO teste VALUES
mysql>(NULL, 'Ernesto', 'ernesto@nbsnet.com.br',
mysql>2742729);
-----------------------------------------------------------------------
Observaes:
Nota 1:
76 Apndice
recebendo os dados. Caso contrrio, voc obter uma mensagem de erro.
O mesmo erro tambm ocorre ao tentar inserir mais parmetros do
que o nmero de campos suportado pela tabela.
Nota 2:
Pesquisando registros
Exemplos:
Ao:
mysql>SELECT * FROM teste;
Resultado:
Lista todos os registros da tabela teste.
Ao:
mysql>SELECT * FROM teste
mysql>WHERE (nome = "Ernesto");
Resultado:
Lista todos os registros da tabela teste que contm "Ernesto" no
campo nome.
Nota:
Consulte maiores detalhes e estude mais itens relacionados a
pesquisas SQL. Voc pode economizar centenas de linhas de cdigos em
Apndice 77
seus programas usando recursos de pesquisa.
Apagando registros
Resultado:
Apaga da tabela teste todos os registros que tm o contedo
"2744747" no campo telefone.
Alterando registros
Ao:
mysql>UPDATE teste SET nome = 'Nonato'
mysql>WHERE nome = 'Ernesto';
Resultado:
Procura na tabela um registro que contenha no campo nome o
contedo 'Ernesto', definido pelo comando WHERE. Encontrado o registro,
ele substitudo pelo nome definido no comando SET, que 'Nonato'.
Comandos avanados
78 Apndice
Operadores lgicos:
AND (&&)
Este operador implementa o E lgico entre duas clusulas. Observe
o exemplo:
-----------------------------------------------------
mysql>SELECT * FROM teste WHERE
mysql>(nome = "Aline") AND
mysql>(telefone = 2728918);
-----------------------------------------------------
OR (||)
-----------------------------------------------------
mysql>SELECT * FROM teste WHERE
mysql>(nome = "Aline") OR
mysql>(telefone = 2728918);
-----------------------------------------------------
NOT (!)
Apndice 79
------------------------------------------------------
mysql>SELECT * FROM teste WHERE
mysql>(nome != "Aline");
------------------------------------------------------
------------------------------------------------------
mysql>SELECT * FROM teste ORDER BY nome;
------------------------------------------------------
FINALIZANDO
80 Apndice
APNDICE - B
Uso prtico de SQL padro
Neste apndice, so listados usos da linguagem SQL propostos pelos
professores Jorge Surian e Luiz Nicochelli, em sua apostila de SQL disponvel
no stio do apostilando.
Resp:
SELECT * FROM DEPT;
Operadores lgicos
operador significado
= igual a
> maior que
>= maior que ou igual a
< menor que
<= menor que ou igual a
Exemplos:
SELECT EMPNOME, EMPSERV
FROM EMP
WHERE DEPNUME > 10;
Apndice 83
SELECT EMPNOME, EMPSERV
FROM EMP
WHERE EMPSERV = 'GERENTE';
Resp:
Neste problema precisamos de uma expresso, que a combinao
de um ou mais valores, operadores ou funes que resultaro em um
valor. Esta expresso poder conter nomes de colunas, valores numricos,
constantes e operadores aritmticos.
Resp:
Neste exemplo, deveremos denominar colunas utilizando apelidos. Os
nomes das colunas mostradas por uma consulta, so geralmente os nomes
existentes no Dicionrio de Dados, mas geralmente esto armazenados na
forma do mais puro "informatiqus", onde "todo mundo" sabe que CliCodi
significa Cdigo do Cliente.
possvel (e provvel) que o usurio desconhea estes smbolos;
portanto, devemos apresent-los dando apelidos s colunas "contaminadas"
pelo informatiqus, que apesar de fundamental para os analistas, somente
so vistos como enigmas para os usurios.
84 Apndice
SELECT DEPNOME "DEPARTAMENTO", DEPORCA * 12
"ORCAMENTO ANUAL"
FROM DEPT
WHERE DEPORCA > 100000;
Resp:
A clusula Distinct elimina duplicidades, significando que somente
relaes distintas sero apresentadas como resultado de uma pesquisa.
Resp:
Desejamos um tratamento diferenciado para valores nulos. Qualquer
coluna de uma tupla que no contenha informaes denominada de nula,
portanto, informao no existente.
Isto no o mesmo que "zero", pois zero um nmero como outro
qualquer, enquanto que um valor nulo utiliza um "byte" de armazenagem
interna, sendo tratado de forma diferenciada pelo SQL.
Apndice 85
A funo "NVL" utilizada para converter valores nulos em zeros.
Resp:
A clusula Order By modificar a ordem de apresentao do resultado
da pesquisa (ascendente ou descendente).
Nota:
Tambm possvel fazer com que o resultado da pesquisa venha
classificado por vrias colunas. Sem a clusula "order by", as linhas sero
exibidas na sequncia que o SGBD determinar.
Resp:
SELECT DEPNOME
FROM DEPT
WHERE DEPLOCA = "SAO PAULO";
O exemplo exigiu uma restrio (So Paulo) que nos obrigou a utilizar
da instruo Where. Alguns analistas costumam afirmar em tom jocoso que
SQL no passa de:
Demais Operadores
86 Apndice
Operador Significado
between ... and ... entre dois valores (
inclusive )
in ( .... ) lista de valores
like com um padro de
caracteres
is null um valor nulo
Exemplos:
SELECT EMPNOME, EMPSALA
FROM EMP
WHERE EMPSALA BETWEEN 500 AND 1000;
Operadores Negativos
Operador Significado
<> diferente
not nome_coluna = diferente da coluna
not nome_coluna > no maior que
not between no entre dois valores
informados
not in no existente numa dada lista
de valores
Apndice 87
not like diferente do padrao de
caracteres informado
is not null no um valor nulo
Resp:
Necessitaremos aqui a utilizao de expresses negativas.
A seguir, apresentamos operadores negativos.
Resp:
Necessitaremos de consultas com condies mltiplas.
Operadores "AND" (E) e "OR" (OU).
Resp:
SELECT EMPNOME, EMPSALA, EMPSERV
FROM EMP
WHERE EMPSALA BETWEEN 700 AND 2000
OR EMPSERV = 'VENDEDOR';
88 Apndice
11) Apresente todos os funcionrios com salrios entre 200 e 700
e que sejam Vendedores ou Balconistas.
Resp:
SELECT EMPNOME, EMPSALA, EMPSERV
FROM EMP
WHERE EMPSALA BETWEEN 700 AND 2000
AND ( EMPSERV = 'BALCONISTA' OR EMPSERV =
'VENDEDOR' );
Funes de Caracteres
Resp:
SELECT LOWER( EMPNOME )
FROM EMP;
Resp:
SELECT SUBSTRING (1,10,EMPNOME)
FROM EMP;
Apndice 89
14) Apresente o nome de todos os empregados admitidos em
01/01/80.
Resp:
SELECT *
FROM EMP
WHERE EMPADMI = ^Q"DD-AAA-YYYY"("01-JAN-1980");
ou
funo retorno
avg(n) mdia do valor n, ignorando nulos
count(expr) vezes que o nmero da expr avalia
para algo no nulo
max(expr) maior valor da expr
min(expr) menor valor da expr
sum(n) soma dos valores de n, ignorando
nulos
Resp:
SELECT AVG(EMPSALA) FROM EMP;
Agrupamentos
90 Apndice
Retornam resultados baseados em grupos de tuplas, em vez de resultados
de funes por tupla individual. A clusula "group by" do comando "select"
utilizada para dividir tuplas em grupos menores.
A clusula "GROUP BY" pode ser usada para dividir as tuplas de uma
tabela em grupos menores. As funes de grupo devolvem uma informao
sumarizada para cada grupo.
Qualquer coluna ou expresso na lista de seleo, que no for uma funo agregada,
dever constar da clusula "group by". Portanto, errado tentar impor uma "restrio" do
tipo agregada na clusula Where.
Resp:
SELECT DUPNUME, AVG(EMPSALA)
FROM EMP
GROUP BY DEPNUME;
Having
Resp:
SELECT DEPNUME, AVG(EMPSALA)
FROM EMP
GROUP BY DEPNUME
HAVING COUNT(*) > 3;
Obs.: A clusula "group by" deve ser colocada antes da "having", pois
os grupos so formados e as funes de grupos so calculadas antes de se
resolver a clusula "having".
A clusula "where" no pode ser utilizada para restringir grupos que
devero ser exibidos.
Apndice 91
Exemplificando ERRO tpico - Restringindo Mdia Maior que 1000:
SELECT coluna(s)
FROM tabela(s)
WHERE condio(es) da(s) tupla(s)
GROUP BY condio(es) do(s) grupo(s) de
tupla(s)
HAVING condio(es) do(s) grupo(s) de
tupla(s)
ORDER BY coluna(s);
92 Apndice
O relacionamento existente entre tabelas chamado de equi-juno,
pois os valores de colunas das duas tabelas so iguais. A Equi-juno
possvel apenas quando tivermos definido de forma adequada, a chave
estrangeira de uma tabela e sua referncia chave primria da tabela
precedente.
Apesar de em alguns casos, admitir-se a equi-juno de tabelas, sem
a correspondncia Chave Primria - Chave Estrangeira, recomendamos ao
estudante no utilizar este tipo de construo, pois certamente em nenhum
momento nos exemplos propostos em nossa disciplina ou nas disciplinas de
Anlise e Projeto de Sistemas sero necessrias tais junes.
Resp:
Observemos que dois dos trs dados solicitados esto na Tabela
Emp, enquanto o outro dado est na Tabela Dept. Deveremos ento acessar
os dados restringindo convenientemente as relaes existentes entre as
tabelas. De fato, sabemos que DEPNUME chave primria da tabela de
Departamentos, e tambm chave estrangeira da Tabela de Empregados.
Portanto, este campo ser o responsvel pela equi-juno.
Obs.:
Note que as tabelas quando contm colunas com o mesmo nome,
usa-se um apelido "alias" para substituir o nome da tabela associado
coluna. Imagine que algum tivesse definido NOME para ser o Nome do
Empregado na Tabela de Empregados, e tambm NOME para ser o Nome
do Departamento na Tabela de Departamentos. Tudo funcionaria de forma
adequada, pois o alias se encarregaria de evitar que uma ambiguidade
fosse verificada.
Embora SQL resolva de forma muito elegante o problema da
nomenclatura idntica para campos de tabelas, recomendamos que o
estudante evite tal forma de nomear os campos. O SQL nunca confundir
Apndice 93
um A.NOME com um B.NOME, porm, podemos afirmar o mesmo de ns
mesmos?
Resp:
Precisamos criar um autorrelacionamento, ou seja, juntar uma tabela
a ela prpria. possvel juntarmos uma tabela a ela mesma com a utilizao
de apelidos, permitindo juntar tuplas da tabela a outra tuplas da mesma
tabela.
As SubConsultas
Uma subconsulta um comando "select" que aninhado dentro de
outro "select" e que devolve resultados intermedirios.
Resp:
SELECT EMPNOME, EMPSERV
FROM EMP A
WHERE 300000 IN ( SELECT DEPORCA
FROM DEPT
WHERE DEPT.DEPNUME = A.DEPNUME
Nota:
Observe que a clusula IN torna-se verdadeira quando o atributo
indicado est presente no conjunto obtido atravs da subconsulta.
94 Apndice
Resp:
SELECT DEPNOME
FROM DEPT A
WHERE EXISTS (SELECT *
FROM EMP
WHERE EMPSALA > 3500 AND EMP.
DEPNUME = A.DEPNUME');
Nota:
Observe que a clusula EXISTS indica se o resultado de uma
pesquisa contm ou no tuplas. Observe tambm que poderemos verificar a
no-existncia (NOT EXISTS), caso esta alternativa seja mais conveniente.
Unies
Resp:
Poderamos resolver esta pesquisa com um nico Select, porm, ao
fato de estarmos trabalhando em nosso exemplo com apenas duas tabelas,
no conseguimos criar um exemplo muito adequado para utilizao deste
recurso.
(Select *
From Emp
Where EmpNume > 10)
Union
(Select *
From Emp
Where DepNume > 10);
Apndice 95
Uma linguagem direcionada extrao de informaes de um conjunto
de dados, em tese no deveria incorporar comandos de manipulao dos
dados. Devemos observar, contudo, que a mera existncia de uma linguagem
padronizada para acesso aos dados, "convidava" os desenvolvedores a
aderirem a uma linguagem "padro" de manipulao de tabelas.
Naturalmente cada desenvolvedor coloca "um algo mais" em seu
SQL (SQL PLUS, SQL *, ISQL e toda sorte de nomenclaturas), por um lado
desvirtuando os objetivos da linguagem (padronizao absoluta), mas em
contrapartida otimiza os acessos ao seu banco de dados, e por maior que
sejam estas mudanas, jamais so to importantes a ponto de impedir que
um programador versado em SQL tenha grandes dificuldades em se adaptar
ao padro de determinada implementao.
De fato, as diferenas entre o SQL da Sybase, Oracle, Microsoft so
muito menores que as existentes entre o C, o BASIC e o Pascal, os quais so
chamados de linguagens "irms", pois todas se originam conceitualmente no
FORTRAN.
Podemos observar que todas as trs linguagens mencionadas
possuem estruturas de controle tipo "para" (for), "enquanto" (while) e repita
(do..while, repeat..until). Todas trabalham com blocos de instruo, todas tm
regras semelhantes para declarao de variveis, e todas usam comandos
de tomada de deciso baseados em instrues do tipo "se" ou "caso".
Porm, apesar de tantas semelhanas (sic), praticamente impossvel que
um programador excelente em uma linguagem consiga rapidamente ser
excelente em outra linguagem do grupo.
Poderamos arriscar a dizer que um excelente programador C que
utilize a implementao da Symantech, ter que passar por um breve perodo
de adaptao para adaptar-se ao C da Microsoft.
O que ocorreria ento se este programador tiver que adaptar-se ao
Delphi (Pascal) da Borland?
De forma alguma, o mesmo ocorrer com o especialista em SQL ao
ter que migrar do Banco de Dados X para o Banco de Dados Y. Naturalmente,
existir a necessidade de aprendizado, mas este programador poder ir
adaptando-se aos poucos sem precisar ser treinado novamente, o que um
aspecto extremamente vantajoso para as empresas.
Inserir (Insert)
96 Apndice
INSERT INTO <tabela> [<campos>] [VALUES <valores>]
Ex:
INSERT INTO DEPT;
Atualizar (Update)
Ex:
UPDATE EMP SET EMPSALA = EMPSALA* 1.2 WHERE EMPSALA<
1000;
Excluir (Delete)
Ex:
DELETE FROM emp WHERE EMPSALA > 5000;
Apndice 97
Webliografia
http://disciplinas.dcc.ufba.br/svn/MATA60/tarefa1/historico/
historico.pdf?revision=21
http://www.ime.usp.br/~andrers/aulas/bd2005-1/
http://www.cos.ufrj.br/~marta/BdRel.pdf
http://www.webng.com/pmds/Arquivos/HistoricoBD.pdf
http://www.sqlmagazine.com.br/Colunistas/RicardoRezende/03_ConceitosBD_
P2.asp
http://www.devmedia.com.br/articles/viewcomp.asp?comp=5935
http://www.apostilando.com/
http://www.scribd.com/doc/512604/Modelo-EntidadeRelacionamento
http://www.inf.puc-rio.br/~casanova/INF1731-BD/modulo02.pdf
http://chasqueweb.ufrgs.br/~paul.fisher/apostilas/basdad/bd_mod_er.htm
http://www.ime.usp.br/~andrers/aulas/bd2005-1/aula6.html
http://www2.dc.ufscar.br/~carvalho/GUBD/aulas/36.html
http://www.ic.unicamp.br/~geovane/mo410-091/Ch02-MER_pt.pdf
http://www.shammas.eng.br/acad/materiais/mer.pdf
http://www.juliobattisti.com.br/artigos/office/modelorelacional_p1.asp
http://www.dca.fee.unicamp.br/cursos/PooJava/javadb/bdrel.htm
http://www.dpi.inpe.br/spring/teoria/consulta/consulta.html
http://pt.tech-faq.com/relational-database.shtm
http://www.baixaki.com.br/download/mysql-workbench.htm
http://forum.imasters.uol.com.br/index.php?showtopic=248701
http://www.webtuga.com/ola-mysql-workbench-adeus-dbdesigner4/
http://www.tipandtrick.net/2008/mysql-workbench-visual-database-deign-tool-
free-download/pt/
http://www.mysqlbrasil.com.br/
http://dev.mysql.com/doc/refman/4.1/pt/index.html
http://br-linux.org/2009/sun-lanca-o-mysql-54/
http://www.criarweb.com/manuais/mysql/
http://www.dbtools.com.br/
ALVES, William Pereira. Fundamentos de Bancos de Dados. So Paulo:
rica, 2004. 382p.