Sunteți pe pagina 1din 89

Carreira do

Programador
Bancos de Dados
DADOS E BANCOS DE DADOS
SISTEMAS GERENCIADORES DE BANCOS DE DADOS
MODELAGEM DE DADOS PARA BANCOS DE DADOS RELACIONAIS
ACESSO A BANCOS DE DADOS
A LINGUAGEM SQL
COMANDOS DDL
COMANDOS DQL
COMANDOS DML
COMANDOS DCL
FUNES DE SQL
CONSULTA A VRIAS TABELAS COM JOINS
USO DE OPERADORES EM CONSULTAS

Apostila 2 de 5

89 pginas

Divus Carreira do Programador Bancos de Dados


Querido Aluno,
Este o terceiro volume do seu principal material de suporte ao curso Academia do
Programador da Divus. Assim como todo o material utilizado nos nossos cursos, foi
preparado por professores programadores e rene a experincia de muitos profissionais.
O mesmo cuidado empregado na preparao das nossas aulas, na seleo dos nossos
professores e em tudo mais que fazemos, est presente neste material.
O trabalho com bancos de dados est presente na rotina dos programadores desde muito
tempo e, embora a maneira como os softwares so desenvolvidos, distribudos e
mantidos esteja em constante transformao, a necessidade de emprego dos bancos de
dados unanimidade. A persistncia da informao de maneira organizada, til e
acessvel uma necessidade crescente dos negcios de qualquer setor.
Seguindo a linha pedaggica da Divus, foi privilegiada a experincia. O fazer para
aprender (e para gostar) a estratgia principal para conduzi-lo at o domnio do
contedo apresentado. Definies so acompanhadas de exemplos que so seguidos por
explicaes dos resultados e que culminam com uma proposio de exerccio. Procure
sempre realizar as tarefas propostas.
Nossa ateno est totalmente voltada para o seu aprendizado e, consequentemente para
o seu sucesso. Sinta-se sempre muito vontade para buscar orientao, tirar qualquer
dvida com seu professor, com a equipe tcnica e pedaggica ou com nosso pessoal de
suporte. Estamos todos aqui trabalhando para lev-lo to longe quanto seu esforo e
fora de vontade permitam.
Este o melhor momento e este o melhor lugar para estudar!

www.divus.com.br

Pgina 2

Divus Carreira do Programador Bancos de Dados


Sumrio
1

Dados, Bancos de dados e Sistemas gerenciadores de bancos de dados ............................. 7


1.1

1.1.1

Bancos de dados relacionais ................................................................................. 8

1.1.2

Bancos de Dados NoSql ......................................................................................... 9

Modelagem de dados para bancos de dados relacionais ................................................... 13


2.1

Tabelas e campos ........................................................................................................ 13

2.2

Chaves - Constraints .................................................................................................... 13

2.3

Tipo de Dados .............................................................................................................. 14

2.4

Relacionamento entre tabelas .................................................................................... 15

Acesso a bancos de dados ................................................................................................... 19


3.1

Alguns cuidados no trabalho com bancos de dados ................................................... 19

3.2

Qual SGBD qual BD? .................................................................................................... 21

A linguagem SQL.................................................................................................................. 25
4.1

Comandos DDL ............................................................................................................ 25

4.2

Comandos DQL ............................................................................................................ 25

4.3

Comandos DML ........................................................................................................... 25

4.4

Comandos DCL ............................................................................................................ 25

4.5

Explorando comandos DDL ......................................................................................... 26

4.5.1

Criando um novo banco de dados Create Database ........................................ 26

4.5.2

Criao de tabelas Create Table ....................................................................... 26

4.5.3

Alterao de tabelas Alter Table Add Column Criando campos................. 29

4.5.4

Alterao de tabelas Alter Table Change Column Alterando campos........ 30

4.5.5

Alterao de tabelas Alter Table Drop Column - Removendo campos ......... 30

4.5.6

Alterao de tabelas Alter Table Add Constraint Criando Chaves ............. 30

4.5.7

Alterao de tabelas Alter Table Rename Renomeando tabelas ............... 31

4.5.8

Alterao de tabelas Drop Table Excluindo Tabelas...................................... 31

4.6

Tipos de bancos de dados ............................................................................................. 7

Explorando comandos DML ........................................................................................ 33

4.6.1

Incluso de dados Insert into ........................................................................... 33

4.6.2

Alterao de dados Update .............................................................................. 36

4.6.3

Alterao de dados Delete ............................................................................... 37

Consultas ao banco de dados .............................................................................................. 41


5.1

Selecionando dados de uma tabela ............................................................................ 50

5.2

Filtrando os dados ....................................................................................................... 50

www.divus.com.br

Pgina 3

Divus Carreira do Programador Bancos de Dados


5.3

Ordenando os dados ................................................................................................... 53

5.4

Funes de SQL ........................................................................................................... 54

5.4.1

Funes agregadas .............................................................................................. 54

5.4.2

Funes Escalares ................................................................................................ 57

5.5

Consulta a vrias tabelas com joins ............................................................................ 60

5.6

Uso de operadores em consultas ................................................................................ 66

5.6.1

Campos calculados em consultas ........................................................................ 66

Segurana de bancos de dados ........................................................................................... 75

Alguns SGBD disponveis no mercado ................................................................................. 79

7.1

Firebird ........................................................................................................................ 79

7.2

Sql Server..................................................................................................................... 80

7.3

Oracle .......................................................................................................................... 80

7.4

PostgreSQL .................................................................................................................. 81

7.5

Ferramentas grficas para manipulao e administrao de bancos de dados ......... 81

Transferncia de bancos de dados entre servidores .......................................................... 85


8.1

Exportando um banco de dados ................................................................................. 85

www.divus.com.br

Pgina 4

Divus Carreira do Programador Bancos de Dados

Captulo 1

DADOS BANCOS DE DADOS E SGBDs

Definies e conceitos
Tipos de Bancos de Dados
Elementos de Bancos de Dados

www.divus.com.br

Pgina 5

Divus Carreira do Programador Bancos de Dados

www.divus.com.br

Pgina 6

Divus Carreira do Programador Bancos de Dados

1 Dados, Bancos de dados e Sistemas gerenciadores de bancos


de dados
Dados so colees de informaes abstradas do mundo real. Para que seja armazenado ou
acessado, um dado ou conjunto de dados deve ter importncia para a vida das pessoas, seja
pra o emprego em suas atividades produtivas ou de entretenimento.
Bancos de dados so colees de dados armazenados fisicamente em arquivos ou conjuntos
de arquivos, que podero estar acessveis atravs de programas especficos para
este fim, normalmente com restries de acesso baseadas em combinaes de
identificao de usurios e senhas.
muito comum utilizar-se o termo banco de dados para definir o programa que
gerencia o armazenamento e acesso aos vrios bancos de dados. Quando algum
pergunta, por exemplo: Que banco de dados voc conhece? Est certamente
referindo-se ao Sistema Gerenciador de Bancos de Dados e no ao banco de dados
propriamente.
Usando um esquema simplrio, mas com muito apelo didtico, podermos organizar assim os
trs termos que do nome a este captulo:

Definindo formalmente, o banco de dados contm as informaes e o SGBD responsvel por


gerenciar o acesso, a manuteno e armazenamento das informaes nos bancos de dados.

1.1 Tipos de bancos de dados


Sendo os bancos de dados grupos de informaes armazenadas de forma organizada, veremos
que h diversas maneiras de armazenar, organizar e servir estes dados. Muitas tecnologias
esto ou j estiveram disponveis em algum momento da histria dos bancos de dados.
Algumas dessas tecnologias no encontram mais aplicao em projetos novos, e so
empregadas apenas na manuteno de programas antigos. Hoje os SGBD mais utilizados so
aqueles capazes de gerir os bancos de dados relacionais, baseados em linguagem SQL
(Structured Query Language), embora os bancos de dados NoSql (Not only Sql) venham tendo
uma crescente aplicao para aplicaes muito grandes.

www.divus.com.br

Pgina 7

Divus Carreira do Programador Bancos de Dados

1.1.1 Bancos de dados relacionais


No modelo relacional os dados so representados como uma simples coleo de linhas e
colunas em tabelas bidimensionais. As relaes estabelecidas entre os dados de uma e outra
tabela podem estipular regras para retorno, incluso, excluso ou alterao dos dados. Neste
modelo, relaes estveis podem ser definidas entre as tabelas, para regular as transaes ou
podem ser temporariamente estabelecidas no momento em que se realizam consultas aos
dados existentes.
A seguir uma demonstrao visual das relaes definidas ente um pequeno grupo de tabelas
de um banco de dados.

Em bancos de dados relacionais, as relaes entre as tabelas so definidos por elementos


denominados chaves. No exemplo anterior, uma chave definida para o campo cli_bairro da
tabela de clientes, especifica que, neste campo somente sero aceitos valores existentes na
tabela de bairros, ou seja, necessrio, antes de se cadastrar clientes, efetuar a incluso de
um bairro par o cliente, na tabela de bairros.
Uma chave definida na tabela de bairros (campo bai_cidade) tambm especifica que somente
sero inseridos bairros cuja cidade esteja cadastrada na tabela de cidades.

www.divus.com.br

Pgina 8

Divus Carreira do Programador Bancos de Dados

Note, no conjunto de tabelas acima, que todos os clientes tem valores no campo cli_bairro,
coincidentes com os valores do campo bai_id, da tabela de bairros.
Tambm possvel observar que todos os bairros tem um nmero no campo bai_cidade,
coincidente com valores encontrados no campo cid_id , da tabela de cidades.
Neste curso, vamos concentrar nossos esforos no aprendizado dos bancos de dados
relacionais, portanto, voltaremos a este assunto mais tarde, nesta apostila.

1.1.2 Bancos de Dados NoSql


NoSql engloba uma grande variedade de tecnologias de bancos de dados e vem ganhando
espao no mercado em funo do aumento no volume de dados
armazenados de maneira distribuda por diferentes estruturas fsicas e em
modelos tambm diversos. A frequncia com que os dados so acessados
e a velocidade de processamento cada vez mais exigida tambm so
motivaes para a aplicao dos bancos de dados NoSql. Os bancos de
dados relacionais, embora muito aplicados, no foram concebidos para
fazer frente aos desafios de escala e agilidade encarados por aplicaes gigantescas de uso
global, nem foram pensados para tirar vantagem das possibilidades de armazenamento cada
vez mais baratas e do poder de processamento disponvel atualmente. A representao de
dados complexos tambm uma das possibilidades abrangidas pelos bancos NoSql.
Conforme possvel observar no exemplo anterior, a tabela de clientes no armazena um
bairro, mas to somente o id do bairro no qual o cliente reside. Este tipo de gerenciamento da
informao est distante da maneira como as entidades seriam representadas em uma
linguagem orientada a objeto. Muito provavelmente, seriam definidas no sistema as classes
cliente e bairro e quando fosse criada uma instncia de cliente em memria, esta instncia
conteria uma instncia de bairro e no apenas o seu id. No momento de persistir estas
informaes, elas teriam que ser desmontadas para serem repassadas ao banco de dados
relacional.
Como o banco de dados NoSql capaz de armazenar os dados de
forma muito similar ao modelo segundo o qual so manipulados pela
aplicao, no necessrio empregar esforo na remodelagem dos
dados nem no momento da obteno do banco para a aplicao,
nem no momento da persistncia.

www.divus.com.br

Pgina 9

Divus Carreira do Programador Bancos de Dados


A limitao dos bancos de dados NoSql reside exatamente onde est a maior das qualidades
dos bancos de dados relacionais: a performance. Por este motivo, os bancos de dados
relacionais ainda dominam o mercado. A lista a seguir, atualizada no momento da preparao
desta apostila, mostra os dez SGBD mais populares do mundo segundo o site http://dbengines.com/en/ranking. Note que desta lista 8 so relacionais.
Oracle
2. Microsoft SQL Server
3. MySQL
5. PostgreSQL
4. Microsoft Access
6. DB2
7. MongoDB
8. Sybase
9. SQLite
10. Solr

www.divus.com.br

Pgina 10

Divus Carreira do Programador Bancos de Dados

Captulo 2

MODELAGEM DE BANCOS DE DADOS

Modelagem
Tipos de Dados
Relacionamentos Entre Tabelas

www.divus.com.br

Pgina 11

Divus Carreira do Programador Bancos de Dados

www.divus.com.br

Pgina 12

Divus Carreira do Programador Bancos de Dados

2 Modelagem de dados para bancos de dados relacionais


A definio do modelo que ser utilizado para armazenar os dados em um banco de dados
relacional parte fundamental do trabalho com bancos de dados. Esta etapa define a
qualidade da gravao e recuperao dos dados durante o tempo em que o banco de dados
estar servido ao propsito para o qual foi concebido.
A modelagem dos dados passa pelo processo de conhecimento das caractersticas das
entidades sobre as quais se deseja armazenar informaes. Tambm importante conhecer o
nvel de importncia de cada uma das caractersticas dessas entidades, algumas informaes
sobre determinadas coisas do mundo real podem no ser importantes em determinados
contextos. Exemplo disso seria a renda familiar de uma pessoa. Essa informao,
importantssima para o cadastro de muturios de um banco que financia habitaes,
totalmente irrelevante para o registro de um pronturio mdico. Uma pessoa pode ser vista
como paciente ou muturio, dado o contexto na qual est envolvida. A importncia de cada
atributo de uma entidade relativa ao contexto em que est sendo considerada.
No exemplo que demos anteriormente, trs entidades foram consideradas: cliente, bairro e
cidade. Embora haja muito a se dizer sobre uma pessoa, um bairro ou uma cidade, no contexto
do nosso exemplo, consideramos importante apenas o nome da cidade, o nome do bairro, a
cidade onde o bairro est situado, o nome do cliente, o endereo dele e o bairro onde mora.

2.1 Tabelas e campos


Uma tabela uma estrutura de dados que armazena todas as entidades de mesmo tipo. A
partir de um modelo conceitual de dados podemos identificar quais so as entidades do
sistema de criar as tabelas necessrias.
importante notar que nem toda entidade identificada em um modelo conceitual ter uma
tabela correspondente. Em determinado contexto, o analista poderia optar por criar uma
tabela para armazenar os endereos em nosso banco de dados de exemplo. Ns, ao contrrio,
resolvemos definir que o endereo, ao invs de ser considerado como uma entidade do banco
de dados seria definido com um atributo do cliente, ou seja, endereo no ser uma tabela,
mas um campo em uma tabela.
De maneira inversa, uma informao que possa parecer atributo de entidade, em determinada
circunstncia, pode merecer status de entidade, como foi o caso da tabela de bairros, definida
em nosso exemplo. Sendo assim, a informao relativa ao bairro onde mora o cliente um
atributo do cliente, dependente das informaes contidas em uma tabela externa, a tabela de
bairros.

2.2 Chaves - Constraints


Definir uma chave primria impede que registro se repitam na mesma tabela, ou, impede, ao
menos, que em determinado campo, um valor seja inserido para mais de um registro. Um
exemplo de chave primria pode ser o campo CPF de um cadastro de clientes, Se definido o
campo como chave primria, cada CPF pode aparecer apenas uma vez entre os registros

www.divus.com.br

Pgina 13

Divus Carreira do Programador Bancos de Dados


armazenados na tabela, ainda que existem dois clientes chamados Jos da Silva, ambos
sempre podero ser inequivocamente reconhecidos pelo CPF.
De acordo com a especificidade de cada conjunto de dados, duas so as maneira de se
estabelecer uma chave primria:
Chave natural: ocorre quando a chave primria escolhida a partir de um dos campos de
naturalmente existentes na tabela, ou seja, um campo representativo de um dos atributos
naturais da entidade, por exemplo, o CPF do cliente.
Chave substitutiva: quanto nenhum dos campos da tabela oferece condies para ser eleito
como chave primria, um campo pode ser incluso especialmente para esta tarefa, ainda que a
informao contida nele no seja representativa para o universo de informaes que se
pretende gerir.
No nosso exemplo, a tabela de cidades no parece oferecer nenhum campo apropriado para
ser a chave primria, nesse caso foi includo o campo cid_id para esta finalidade.
Normalmente mais simples trabalhar com uma chave substituta, pois um simples valor
numrico e no precisamos perder muito tempo na analise da entidade para descobrir a chave
natural. Alm disso, existem entidades que possuem mais de uma chave natural, o que
complica ainda mais o processo de anlise. Por isso, as chaves substitudas so mais utilizadas
na prtica e iremos utilizar nosso modelo para incluir uma chave primria substituta.

2.3 Tipo de Dados


Por fim, para viabilizar a criao das tabelas em um banco de dados relacional necessrio
definir os tipos de dados de cada coluna. Cada implementao de bandos de dados apresenta
tipos prprios, por isso para definir os tipos importante conhecer qual sistema gerenciador
de bancos de dados (SGBD) ser utilizado. Exemplos de SGBDs so:
Apesar de existirem diferenas entre os tipos especficos de dados, as caractersticas bsicas
dos tipos so comuns a todos os gerenciadores. Temos:
Tipos numricos: Permitem a definio do limite das grandezas armazenadas e da quantidade
de casas decimais que devem ser consideradas.
Tipos com caracteres: Permitem a definio do nmero mximo de caracteres para a
informao a ser armazenada.
Valores de data e hora: para registrar momentos no tempo, o nvel de exatido dessa
informao tambm pode ser definido.
Dica: procure conhecer os tipos de dados definidos por pelo
menos alguns SGBDs, isso vai te dar uma ideia de como
coisas diferentes podem ser muito parecidas, quando
seguem um padro

www.divus.com.br

Pgina 14

Divus Carreira do Programador Bancos de Dados

2.4 Relacionamento entre tabelas


Para preservar a integridade dos dados, s vezes necessrio impor regras entrada de dados
em um campo, a fim de que, quando for necessrio obter os dados armazenados, seja
guardada a consistncia entre eles. As estruturas destinadas a estabelecer relao entre uma
tabela e outra so as chaves estrangeiras ou foreign Keys. Estas chaves chamam-se assim por
definirem dentro da tabela, uma regra de entrada de dados que depende de informaes
contidas fora da prpria tabela, ou seja, em um mbito estrangeiro.
Exemplo disso o campo cli_bairro na tabela de clientes, que somente pode receber dados
que sejam coincidentes com as informaes contidas no campo bai_id que a chave primria
da tabela de bairros.
Como o campo bai_id chave primria, um valor registrado nesse campo no poder se
repetir, enquanto que o campo cli_bairro pode apresentar valores repetidos na tabela de
bairros, ma vez que, naturalmente, muitos dos clientes registrados nessa tabela podem residir
no mesmo bairro. Este tipo de relacionamento chamado de um-para-muitos, j que o o
bairro chamado centro cujo id seja 10, por exemplo, existe somente uma vez na tabela de
bairros, mas pode te o seu id utilizados infinitas vezes na tabela de clientes, para especificar o
bairro de todos os clientes que morem no centro.
Em certas ocasies pode-se criar um relacionamento um-para-muitos, entre tabelas
representativas de entidades e tabelas intermedirias, cuja funo ligar outras duas. Imagine
que em uma aplicao comercial, exista uma tabela de produtos e uma de fornecedores. Caso
um produto seja vendido pro mais de um fornecedor e um fornecedor venda mais que um
produto (o que muito comum), uma terceira tabela ter que ser criada, para estabelecer a
ligao entre os produtos e seus fornecedores, e entre os fornecedores e seus produtos. Nessa
tabela intermediria cujo nome poderia ser produtos_fornecedores, cada Fornecedor poder
aparecer tantas vezes quantos forem os produtos vendidos por ele, e um produto poder
aparece tantas vezes quantos forem os fornecedores que o vendam. Ao longo do nosso estudo
de bancos de dados veremos exemplos prticos desse tipo de relao.

www.divus.com.br

Pgina 15

Divus Carreira do Programador Bancos de Dados

www.divus.com.br

Pgina 16

Divus Carreira do Programador Bancos de Dados

Captulo 3

TRABALHANDO COM BANCOS DE DADOS

Credenciais
Ferramentas Grficas
Conexes

www.divus.com.br

Pgina 17

Divus Carreira do Programador Bancos de Dados

www.divus.com.br

Pgina 18

Divus Carreira do Programador Bancos de Dados

3 Acesso a bancos de dados


Para realizar operaes em um banco de dados, necessrio obter acesso a ele. Este acesso
acontece a partir do fornecimento de um nome de usurio e senha, que devem estar
previamente cadastrados no banco de dados por um administrador do SGBD. Quanto uma
ferramenta de gerenciamento de bancos de dados obtida, um usurio padro definido na
sua instalao, este usurio ou tem uma senha muito bvia, constante da documentao do
SGBD, ou no tem senha. necessrio que este usurio com super poderes exista na
instalao, a fim de que as operaes iniciais possam ser realizadas. Aps a instalao, quando
o servio estiver prestes a ser disponibilizado para os elementos consumidores de dados, a
senha deste super usurio deve ser trocada e novos usurios devem ser definidos, de acordo
com os diferentes nveis de privilgio que cada grupo de usurios deva ter.
O acesso a um banco de dados obtido atravs de um procedimento chamado de conexo. A
conexo a um banco de dados o estabelecimento de um canal de comunicao atravs do
qual se pode executar comandos que modificam os dados e, em cetros casos a estrutura sob a
qual os dados so armazenados. Esta conexo pode ser obtida atravs de um aplicativo
desenvolvido especialmente para a gesto de um negcio ou atravs de programas que
fornecem interfaces grficas para facilitar a interao programtica com o SGBD. Tambm
existe a opo de efetuar conexes e interagir com o banco de dados atravs do console do
sistema operacional, Esta ltima opo, por exigir a memorizao de comandos e de nomes
das estruturas de bancos de dados, no tem sido muito apreciada no trabalho produtivo e
mais empregada no meio acadmico.
Neste curso vamos utilizar o SGBD MySql, que j vai estar instalado nos computadores da
Divus. Tambm ser utilizada uma interface grfica para interao com o SGBD, chamada
MySQL Workbench, ambos, o SGBD e a ferramenta grfica so distribudo gratuitamente e
pode ser baixados da internet.
Para instalao do SGBD, foi utilizado um instalador destinado a efetuar a instalao no
apenas do SGBD, mas tambm de outras ferramentas de programao. A instalao do MySql
atravs do Wamp muito simples e no requer nenhuma configurao adicional, resumindo a
uma sequncia de next, next, next.
Para acessar o SGBD, vamos utilizar o MySql Workbench, mas poderia ser qualquer outra
ferramenta ou nenhuma delas. As GUI para acesso a bancos de dados so uma facilidade a
mais e no representam uma condio para o trabalho.

3.1 Alguns cuidados no trabalho com bancos de dados


SGBD so aplicaes e devem estar iniciados para que possam ser acessados. Atravs das
ferramentas grficas disponibilizadas pelo seu sistema operacional preferido, possvel iniciar
um servio, Par-lo ou at mesmo suspend-lo. No caso do MySql, instalado atravs do Wamp,
voc poder verificar se o SGBD est iniciado atravs do cone do wamp na barra de tarefas.
Para que o MySql esteja rodando e possa ser apropriadamente utilizado, o cone do Wamp
deve estar sendo mostrado e deve estar verde na barra de tarefas. Caso no seja esse o
www.divus.com.br

Pgina 19

Divus Carreira do Programador Bancos de Dados


cenrio verificado no seu computador, procure o cone do Wamp no seu menu iniciar ou na
rea de trabalho e de um duplo clique, a fim de iniciar o Wamp e por conseguinte os MySql.
Uma boa ferramenta com interface grfica amigvel indispensvel para o trabalho com
bancos de dados, poupa-se tempo ao verificar nomes de elementos dos bancos de dados e
mesmo ao escrever instrues complexas. No obstante essa facilidade, no se deve
estabelecer uma relao de dependncia para com estas ferramentas, uma vez que podem
no estar disponveis em determinados ambientes de trabalho ou podem ter o seu uso no
permitido em momentos nos quais seu conhecimento pode estar sendo testado. Assim,
importante usar, mas no depender delas.
Dica: Procure conhecer outras ferramentas grficas para
manipulao de bancos de dados. Pea ao seu professor para
apresentar algumas.

Uma GUI no um SGBD. Estas ferramentas so apenas um meio de acesso mais amigvel,
mas no so mais que isso.
Usurio e senhas so uma preocupao a parte e devem ser tratados com a gravidade que
merecem. A segurana bem estabelecida previne no somente invases mal intencionadas,
mas tambm danos causados por impercia, sendo estes menos criminosos que os primeiros,
mas no menos danosos.

1.1. Primeiro acesso ao banco de dados - Ferramentas


Vamos fazer agora o nosso primeiro acesso ao banco de dados. Para tanto, certifique-se de ue
o SGBD est iniciado e se no estiver, inicie, clicando no cone do Wamp.

Em seguida abra o MySql Workbench. Como o MySql Workbench no instalado no


computador, mas to somente descompactado, v at a pasta onde ele foi descompactado e
de um duplo clique no executvel.

A primeira tela a ser apresentada a seguinte:

www.divus.com.br

Pgina 20

Divus Carreira do Programador Bancos de Dados

Clique no retngulo cinza (local instance wampmysqlId) e a seguinte tela ser apresentada:

O painel da esquerda exibe os vrios bancos de dados geridos pelo MySql, o painel da direita
permite que sejam digitados os comandos que aprenderemos a seguir, para interao com os
dados e com suas estruturas.

3.2 Qual SGBD qual BD?


Como vrios bancos de dados pode estar disponveis em cada instalao do MySql, deve-se dar
um duplo clique no banco com o qual se deseja trabalhar (painel da esquerda). Esse duplo
clique define o banco clicado como atual. A quantidade de bancos de dados mostrados no
painel da esquerda pode variar de acordo com o uso que j foi feito por usurios anteriores do
computador.
Quando voc clicou no retngulo cinza da tela anterior, uma conexo foi realizada com o
banco de dados padro (aquele que vem junto com o MySql para fins de teste), o banco test. O
usurio utilizado para esta conexo foi root que deve ter sua senha configurada para
sequncia vazia de caracteres, ou seja, o usurio root conecta sem senha.
Caso se deseje conectar a um banco de dados diferente ou utilizar credenciais diferentes,
pode-se optar por clicar no menu Database e escolher a opo Connect to Database, fazendo
com que a tela seguinte seja exibida:

www.divus.com.br

Pgina 21

Divus Carreira do Programador Bancos de Dados

Atravs desta tela possvel conectar-se a um banco de dados do servidor local (computador
atual) ou a um banco de dados gerenciado por outro SGBD, situado em outro computador.
Para isso basta fornecer as informaes relativas ao computador servidor de dados e as
credenciais do usurio. Alm do nome do computador, tambm possvel digitar o endereo
IP do servidor.
Dica: Experimente realizar conexes externas ao seu
computador com a ajuda do seu professor

www.divus.com.br

Pgina 22

Divus Carreira do Programador Bancos de Dados

Captulo 4

LINGUAGEM SQL

DDL
DML
DCL

www.divus.com.br

Pgina 23

Divus Carreira do Programador Bancos de Dados

www.divus.com.br

Pgina 24

Divus Carreira do Programador Bancos de Dados

4 A linguagem SQL
A linguagem SQL define uma serie de instrues que so agrupados em categorias de acordo
com seu objetivo. Algumas variaes da linguagem padro podem ser encontradas nos
diversos SGBDs existentes, mas h um ncleo comum mantido por um conselho internacional
e obedecido pela maioria dos SGBDs. A seguir vamos apresentar uma viso geral sobre as
diversas categorias existentes e seus principais comandos. A sequncia em que os grupos de
comandos aparecero nesta apostila determinada pela lgica intrnseca ao uso dos bancos
de dados: primeiro preciso criar as estruturas e definir a maneira como os dados sero
armazenados e como se relacionaro, depois preciso inserir dados em quantidade e
qualidade adequadas aos testes, a sim, podemos fazer selees de dados e observar o
resultado que cada uma delas produz.

4.1 Comandos DDL


A categoria DDL (data definition language) engloba os comandos utilizados para manuteno
das estruturas que vo armazenar os dados. Seus principais comandos so:
CREATE TABLE: comando para criao de novas tabelas no banco de dados.
ALTER TABLE: comando para alterao da estrutura das tabelas, como por exemplo adicionar,
remover ou alterar uma coluna, criar uma foreign key etc.
DROP TABLE: comando para remoo de tabelas do banco de dados.

4.2 Comandos DQL


A categoria DQL (data query language) engloba apenas um comando, com uma infinidade de
variaes, porm o principal foco para um usurio de banco de dados, uma vez que tem a
finalidade de retornar registros salvos no banco de dados. Este comando o select.

4.3 Comandos DML


A categoria DML (data manipulation language) engloba os comandos para manipular dados
das tabelas. Seus principais comandos so:
INSERT: comando para adicionar registros a tabela
UPDATE: comando para utilizar valores de registros j existentes
DELETE: comando para remover registros

4.4 Comandos DCL


A categoria DCL (data control language) engloba os comandos utilizados no controle de
permisso de acesso aos dados do banco de dados. Seus principais comandos so:
GRANT: comando para adicionar permisses a um usurio de banco de dados
REVOKE: comando para remover permisses de um usurio de banco de dados
www.divus.com.br

Pgina 25

Divus Carreira do Programador Bancos de Dados

A sintaxe de qualquer linguagem s aprendida quando h


demanda, mas voc pode se preparar praticando. Crie
situaes fictcias e transforme em bancos de dados.

4.5 Explorando comandos DDL


Conforme vimos antes, os comandos do grupo DDL definem o modelo que ser utilizado para
armazenar os dados em nosso banco. Normalmente estes comandos so empregados durante
a concepo do banco de dados, mas podem ser utilizados mesmo aps a existncia de dados
nas tabelas, observados os devidos cuidados para que no haja perda ou corrupo de
informao.

4.5.1 Criando um novo banco de dados Create Database


Todos os objetos que estamos prestes a aprender a criar, os quais destinam-se a abrigar os
dados de interesse do sistema, esto contidos em um banco de dados, No vamos nos
esquecer que SGBD servem para gerenciar bancos de dados! Sendo assim, antes de criar
tabelas ou outros elementos, necessrio criar o banco de dados que vai conter esses
elementos. A sintaxe para criao de um banco de dados a seguinte:
create database nome_do_banco_de_dados

Veja o exemplo, criando um banco de dados chamado loja, no SGBD:


create database loja;

Uma vez criado o banco, podemos comear a inserir nele elementos necessrios ao
armazenamento dos dados.

4.5.2 Criao de tabelas Create Table


Veja em seguida um modelo de sintaxe para criao de tabelas novas em um banco de dados:
create table nome_da_tabela
(
nome_campo tipo_de_dado null/not null primary key auto_increment,
nome_campo tipo_de_dado null/not null,
nome_campo tipo_de_dado null/not null,
nome_campo tipo_de_dado null/not null,
constraint foreign key nome_da_chave(campo_nesta_tabela) references
nome_da_outra_tabela(campo_da_outra_tabela),
constraint foreign key nome_da_chave(campo_nesta_tabela) references
nome_da_outra_tabela(campo_da_outra_tabela)
)
engine =InnoDB;

As expresses em negrito so literais e devem ser escritas como constam acima, as outras
devem ser substitudas de acordo com o que se deseja definir. Os campos a serem criados e
suas caractersticas so separados uns dos outros por vrgulas sendo que aps o ltimo campo
s haver vrgula se uma foreign key for criada.
www.divus.com.br

Pgina 26

Divus Carreira do Programador Bancos de Dados


possvel criar uma tabela sem que nenhuma foreign key seja definida, neste caso, aps o
ltimo campo no haver vrgula.
A seguir exemplos de criao de tabela. Note que a expresso cid_id int not null primary key
auto_increment est separada de cid_nome char(250) not null por vrgula, mas no h
vrgula aps cid_nome char(250) not null. A lista de campos separada por vrgulas e o
ltimo campo s tem vrgula se uma foreign key for ser criada, o que no o caso no prximo
exemplo.
Criando a tabela de cidades, denominada cidade, sem nenhuma chave estrangeira:
create table cidade (
id int not null primary key auto_increment,
nome char(250) not null,
estado char(2) not null
) engine=InnoDB;

Criando a tabela de bairros, denominada bairro, sem chaves estrangeiras:


create table bairro(
id int(11) not null primary key auto_increment,
nome char(250) not null
) engine=InnoDB;

Criando a tabela de tipos de clientes, denominada tipo_cliente, sem chaves estrangeiras e


que, portanto, no parece ter muita utilidade nesse momento.
create table tipo_cliente (
id int(11) not null primary key auto_increment,
nome char(250) not null,
limite_credito double not null
) engine=InnoDB;

Criando a tabela de clientes, denominada cliente, com duas chaves estrangeiras, uma das
chaves relacionando o campo bairro com o campo id da tabela bairro e outra relacionando o
campo cidade com o campo id da tabela cidade.
create table cliente(
id int(11) not null primary key auto_increment,
nome char(250) not null,
bairro int(11) not null,
cidade int(11) not null,
cpf char(14) not null,
constraint cli_bai_fk foreign key (bairro) references bairro (id),
constraint cli_cid_fk foreign key (cidade) references cidade (id)
) engine=InnoDB;

www.divus.com.br

Pgina 27

Divus Carreira do Programador Bancos de Dados


Criando a tabela de fornecedores de produtos, denominada fornecedor, com duas chaves
estrangeiras, uma das chaves relacionando o campo bairro com o campo id da tabela bairro e
outra relacionando o campo cidade com o campo id da tabela cidade.
create table fornecedor(
id int(11) not null primary key auto_increment,
nome char(250) not null,
bairro int(11) not null,
cidade int(11) not null,
cpf char(14) not null,
constraint for_bai_fk foreign key (bairro) references bairro (id),
constraint for_cid_fk foreign key (cidade) references cidade (id)
) engine=InnoDB;

Criando a tabela de pedidos dos clientes, denominada pedido, com chave estrangeira
relacionando o campo cliente com o campo id da tabela cliente:
create table pedido(
id int(11) not null primary key auto_increment,
data datetime not null,
cliente int(11) not null,
constraint cli_ped_fk foreign key (cliente) references cliente (id)
) engine=InnoDB;

Criando a tabela de tipo de produtos, denominada tipo_produto, sem chaves estrangeiras:


create table tipo_produto(
id int(11) not null primary key auto_increment,
nome char(250) not null
) engine=InnoDB;

Criando a tabela de produtos, denominada produto, com duas chaves estrangeiras, uma
relacionando o campo fornecedor com o campo id da tabela fornecedor e outra relacionando
o campo tipo com o campo id da tabela tipo_produto:
create table produto (
id int(11) not null primary key auto_increment,
nome char(250) not null,
valor_entrada double not null,
valor_saida double not null,
tipo int(11) not null,
fornecedor int(11) not null,
estoque int(11) not null,
constraint
prod_for_fk
foreign
key
(fornecedor)
references
fornecedor (id),
constraint prod_tipo_fk foreign key (tipo) references tipo_produto
(id)
) engine=InnoDB;

www.divus.com.br

Pgina 28

Divus Carreira do Programador Bancos de Dados


Criando a tabela de itens dos pedidos dos clientes, denominada item_pedido, com chave
estrangeira relacionando o campo pedido com o campo id da tabela de pedido:
create table item_pedido (
id int(11) not null primary key auto_increment,
pedido int(11) not null,
produto int(11) not null,
quantidade double not null,
valor_unitario double not null,
valor_total double not null,
constraint item_ped_fk foreign key (pedido) references pedido (id)
) engine=InnoDB;

Criando uma tabela apenas para ser renomeada e depois excluda em nossos exerccios,
denominada tabela_para_alterar, sem chaves estrangeiras.
create table renomeie_depois_exclua (
id int(11) not null primary key auto_increment,
nome int(11) not null
) engine=InnoDB;

A expresso engine =InnoDB, colocada ao final das instrues de criao de tabela indica que
a tabela criada suporta a criao de foreign Keys.
Quando uma tabela serve de referncia para uma chave estrangeira contida em outra tabela,
ela deve ser criada antes, como fizemos, quando criamos tipo_produto antes de produto, j
que produto tem uma chave estrangeira, relacionando seu campo tipo com o campo id da
tabela tipo_produto.
O ponto-e-vrgula colocado ao final de cada instruo no faz parte da instruo, mas til em
certas ferramentas de interface grfica como o MySql Workbench, para delimitar o fim de cada
instruo, j que vrias instrues podem ser escritas na mesma janela e serem executas
individualmente.

4.5.3 Alterao de tabelas Alter Table Add Column Criando


campos
Com esta instruo, o campo definido em nome_da_coluna, ser includo na tabela. O tipo da
dado, quando exigir especificao de tamanho deve conter esta informao, exemplo:
char(250).
alter
table nome_da_tabela add column nome_da_coluna tipo_de_dado
null/not null

Adicionamos tabela cliente um campo chamado idade para armazenar dados do tipo inteiro
e que pode ficar nulo quando no se desejar inserir informao.
alter table cliente add column idade int null;

www.divus.com.br

Pgina 29

Divus Carreira do Programador Bancos de Dados


Adicionamos tabela cliente um campo chamado limite_compra para armazenar dados do
tipo double que pode ficar nulo quando no se desejar inserir informao.
alter table cliente add column limite_compra double null;

4.5.4 Alterao de tabelas Alter Table Change Column


Alterando campos
Com esta instruo, o campo definido em nome_atual_do_campo, ser alterado e ficar com
as caractersticas especificadas em novo_nome_do_campo, novo_tipo_de_dado e null/not
null.
alter
table
nome_da_tabela
change
column
nome_atual_do_campo
novo_nome_do_campo novo_tipo_de_dado null/not null;

A seguir exemplo de alterao de campos em tabelas:


Alteramos a tabela de clientes para que o campo limite_compra, que havia sido criado para
armazenar dados do tipo double que poderia ficar nulo quando no se desejar inserir
informao, passe a se chamar tipo e armazene dados do tipo inteiro, no podendo mais
receber nulo, quando se cria um novo registro.
alter table cliente change column limite_compra tipo int not null;

A seguir, alteramos a tabela cliente para que o campo nome tenha sua capacidade de
armazenar caracteres, diminuda dos 250 anteriores, para 150.
alter table cliente change column nome nome char(150) not null;

Repare que, mesmo quando no desejamos modificar nome do campo, o tipo de dado ou se
ele suporta nulo, temos que fornecer estas informaes,

4.5.5 Alterao de tabelas Alter Table Drop Column Removendo campos


Com esta instruo, o campo definido em nome_ do_campo, ser removido da tabela e seus
dados, se houver, deixaro de existir.
alter table nome_da_tabela drop column nome_do_campo;

Removemos o campo idade da tabela de clientes.


alter table cliente drop column idade;

4.5.6 Alterao de tabelas Alter Table Add Constraint


Criando Chaves
Atravs deste comando possvel incluir uma restrio de entrada de dados em uma tabela j
existente.

www.divus.com.br

Pgina 30

Divus Carreira do Programador Bancos de Dados


alter table nome_da_tabela add constraint nome_da_foreign_Key
foreign key
(campo_da_tabela_atual)
references
nome_da_tabela_externa
(campo_da_tabela_externa)

Criamos uma foreign key na tabela cliente limitando a entrada de dados no campo tipo a
valores que j existam na tabela tipos_cliente.
alter table cliente add constraint
references tipo_cliente(id);

cli_tipo_fk

foreign

key

(tipo)

4.5.7 Alterao de tabelas Alter Table Rename Renomeando


tabelas
Com este comando possvel trocar o nome de uma tabela, aps a sua criao.
alter table nome_atual rename to nome_novo;

Renomeamos a tabela denominada tabela_inutil para tabela_para_excluir.


alter table renomeie_depois_exclua rename to tabela_para_excluir;

4.5.8 Alterao de tabelas Drop Table Excluindo Tabelas


Este comando permite excluir uma tabela do banco de dados
drop table nome_da_tabela

Exclumos definitivamente a tabela denominada tabela_para_excluir, que antes de ser


renomeada chamava-se renomeie_depois_exclua do banco de dados. Se houver dados
armazenados na tabela eles no podero ser recuperados.
drop table tabela_para_excluir;

www.divus.com.br

Pgina 31

Divus Carreira do Programador Bancos de Dados

DDL - Definindo como os dados sero armazenados

1 crie um novo banco de dados denominado escola


2 utilizando os exemplos vistos anteriormente como modelo, crie as tabelas a seguir:
nome da tabela
nome do campo
id
nome
idade
cpf
nome da tabela
nome do campo
id
nome
duracao

tipo de dado
int
char(250)
int
char(14)

Aluno
permite nulo
no
no
sim
no

chave primria
sim
no
no
no

auto numerao
Sim
No
No
No

tipo de dado
int
char(250)
int

Curso
permite nulo
no
no
no

chave primria
sim
no
no

auto numerao
Sim
No
No

nome da tabela
Turma
nome do campo tipo de dado
permite nulo
chave primria
auto numerao
id
int
no
sim
Sim
nome
char(250)
no
no
No
curso
int
no
no
No
incluir chave estrangeira entre o campo curso desta tabela e o campo id da tabela curso.
nome da tabela
nome do campo
id
nome

tipo de dado
int
char(250)

tipo_curso
permite nulo
no
no

chave primria
sim
no

auto numerao
Sim
No

3 utilizando os exemplos vistos anteriormente como modelo, fazer as seguintes alteraes


nas tabelas:
nome da tabela
tipo de alterao
nome do campo tipo de dado
valor
int

Curso
incluso de campo
permite nulo
chave primria
sim
no

auto numerao
No

nome da tabela
tipo de alterao
nome do campo tipo de dado
valor
double

Curso
modificao de campo
permite nulo
chave primria
no
no

auto numerao
No

www.divus.com.br

Pgina 32

Divus Carreira do Programador Bancos de Dados

nome da tabela
tipo de alterao
nome do campo
Valor

curso
remoo de campo

nome da tabela
tipo de alterao
nome do campo tipo de dado
tipo
int
nome da tabela
tipo de alterao
nome do campo nome da chave
tipo

tipo_curso_fk

nome da tabela
tipo de alterao
nome do campo tipo de dado
Turma
int
nome da tabela
tipo de alterao
nome do campo nome da chave
turma
aluno_turma_fk

curso
incluso de campo
permite nulo
chave primria
no
no

auto numerao
no

curso
incluso de chave estrangeira
tabela referncia campo
referncia
tipo_curso
Id
Aluno
incluso de campo
permite nulo
chave primria
no
no

auto numerao
no

aluno
incluso de chave estrangeira
tabela referncia campo referncia
turma
id

4.6 Explorando comandos DML


Conforme dito anteriormente, os comandos do grupo DML modificam os dados armazenados
nas tabelas, fazendo incluso de novos dados, alterando ou excluindo os existentes.

4.6.1 Incluso de dados Insert into


Conforme o prprio nome sugere, este comando utilizado para inserir novos registros nas
tabelas. Quando estiver inserindo dados, no obrigatrio que todos os campos da tabela
recebam informaes, contanto que no tenham sido definidos como not null durante o
design da tabela.
insert into nome_da_tabela
(
primeiro_campo,
segundo_campo
)
values
(
'primeiro_valor', 'segundo_valor'
);

www.divus.com.br

Pgina 33

Divus Carreira do Programador Bancos de Dados


A forma seguinte muito til, quando se deseja inserir mais de um registro:
insert into nome_da_tabela
(
primeiro_campo,
segundo_campo
)
values
('primeiro_valor_reg_1', 'segundo_valor_reg_1'),
('primeiro_valor_reg_2', 'segundo_valor_reg_2'),
('primeiro_valor_reg_3', 'segundo_valor_reg_3');

Observe que a quantidade de campos deve ser coincidente com o nmero de valores da lista
de valores. Se no houver coincidncia o comando falhar. Tambm importante notar que os
valores a serem inseridos nos campos cujo dado texto, estaro entre aspas simples. Esta
tambm uma exigncia para que o comando funcione. Veja um exemplo de incluso de 4
registros na tabela cidade:
Mais um exemplo de insero de dados na tabela cidade, desta vez inserimos um registro
apenas:
insert into cidade
(
nome,
estado
)
values
('Manaus', 'AM'),
('So Paulo', 'SP'),
('Tucurui', 'PA'),
('Rio de Janeiro', 'RJ');

Outro exemplo de insero de dados. Desta vez inserimos um registro na tabela de


tipo_cliente. Observe que um dos campos recebe texto e o outro nmero, o primeiro valor
(Especial) est entre aspas simples, enquanto o segundo valor (1500.0) no utiliza aspas.
insert into tipo_cliente
(
nome,
limite_credito
)
values
(
'Especial',
1500.0
);

www.divus.com.br

Pgina 34

Divus Carreira do Programador Bancos de Dados


Agora a insero de vrios registros na tabela tipo_cliente.
insert into tipo_cliente
(
nome,
limite_credito
)
values
('Prata', 3000.0),
('Ouro', 6000.0),
('Diamante', 12000.0);

Agora vamos inserir um registro na tabela cliente, para demonstrar o cuidado que se deve ter
ao inserir dados em campos para os quais tenha sido definida uma chave primria:
insert into cliente
(
nome,
bairro,
cidade,
cpf,
tipo
)
values
(
'Joo Ubaldo Ribeiro',
1,
1,
'123.456.789-10',
1
),

Observe que o nmero 1 que estamos prestes a inserir no campo cidade da tabela cliente
corresponde ao id de um dos registros da tabela cidade.
Lembre-se que durante o estudo dos comandos DDL, estabelecemos uma chave estrangeira na
tabela cliente, definindo que no campo cidade, somente sero aceitos valores coincidentes
com os que j existirem no campo id ta tabela cidade.
Pode parecer (e de fato ) muito maante definir o valor nos campo que so chaves
estrangeiras, quando se insere registros em uma tabela. Se um cliente do tipo ouro, por
exemplo, na tabela de cliente, a informao que dever constar o id do tipo ouro na tabela
de tipos de clientes. Mas quando se est escrevendo uma instruo SQL, como possvel
lembrar que nmero corresponde ao nome que se tem em mente? A resposta : exercite a
memria ou alterne entre janelas para consultar as tabelas de referncia para compor o
registro que pretende inserir.

www.divus.com.br

Pgina 35

Divus Carreira do Programador Bancos de Dados


Felizmente essa uma preocupao apenas do perodo de testes do banco de dados, ou do
desenvolvimento de material acadmico. Quando o usurio de uma aplicao precisa inserir
dados em um dos campos limitado por chave estrangeira, isso feito a partir da escolha de
valores em uma estrutura que possa listar os itens disponveis de maneira que possam ser
reconhecidos e interpretados pelo ser humano de inteligncia e memria mediana, bastando
que conhea as regras do negcio que opera. A seguir uma figura ilustrativa desse tipo de
estrutura:

4.6.2 Alterao de dados Update


Em certas ocasies necessrio modificar dados que j estejam gravados em uma tabela,
neste caso, no se trata de inserir novos, mas de mudar os valores dos registros j existentes.
Para este fim existe o comando Update.
update nome_da_tabela
set
primeiro_campo = primeiro_valor,
segundo_campo = segundo_valor
where campo_criterio = valor_criterio;

Vejamos a alterao do registro que acabamos de inserir na tabela bairros.


update
bairros
set
bai_nome = 'Praa da S'
where
bai_id = 5;

Veja que atualizamos o valor do campo nome do registro cujo valor do campo id igual a 1, na
tabela bairro. uma prtica quase unnime estabelecer um critrio para restringir os registros
que sofrero alterao. Quando os valores de mais de um campo vo ser alterados na mesma
ocasio, os pares campo/valor so separados por vrgulas. Veja o exemplo a seguir:
update
fornecedor
set
nome = 'Comida Farjuta S.A.',
bairro = 1,
cpf = '999.901.109-35'
where
id = 6;

Com esta instruo atualizamos apenas o registro cujo id 6, modificando ao campos da


seguinte forma: O campo nome que tinha o valor Comida Fantasma Ltda passa a conter o
www.divus.com.br

Pgina 36

Divus Carreira do Programador Bancos de Dados


valor Comida Farjuta S.A.. O campo bairro cujo valor era 1 agora 3 e o campo cpf que
continha 888.022.789-78 agora tem '999.901.109-35. No foi alterado o valor do campo
cidade.

4.6.3 Alterao de dados Delete


Quando um dado se torna desnecessrio ou indesejado pode- querer remov-lo da tabela
onde se encontra. Neste caso, utiliza-se o comando delete. Como muito raro que se deseje
remover todos os dados de uma tabela, o comando delete quase sempre combinado com a
clusula where que restringe os registros a serem excludos. Veja a seguir o comando delete:
delete from nome_da_tabela
where campo_criterio = valor_criterio;

Vejamos a remoo da cidade cujo id seja 5 da tabela de cidades:


delete from cidade
where id = 5;

Note que apenas um registro ser excludo, aquele coincidente com o valor definido no
critrio, atravs da clusula where.

www.divus.com.br

Pgina 37

Divus Carreira do Programador Bancos de Dados

DML - Inserindo, removendo e alterando dados

Utilizando banco de dados denominado escola, faa as operaes definidas a seguir:


1 insira os seguintes registros nas tabelas criadas no exerccio anterior:
nome da tabela
id
Num. Automtica
Num. Automtica
Num. Automtica

nome
Gesto
Programao
Automao

nome da tabela
id
Num. Automtica
Num. Automtica
Num. Automtica
Num. Automtica
Num. Automtica

Nome
Academia do Programador
Academia Java
Academia Android
Scrum
Robtica para Iniciantes

nome da tabela
id
Num. Automtica
Num. Automtica
Num. Automtica
Num. Automtica
Num. Automtica

Nome
AP26
AP27
AD18
SC06
AP28

nome da tabela
id
Num. Automtica
Num. Automtica
Num. Automtica
Num. Automtica
Num. Automtica
Num. Automtica
Num. Automtica

www.divus.com.br

tipo_curso

Nome
Tales de Mileto
Digenes de Apolnia
Pitgoras de Samos
Parmniedes de Eleia
Rene Descartes
Albert Camus
Immanuel Kant

curso
durao
80
120
60
20
20

tipo
2
2
2
1
3

turma
Curso
1
1
3
4
1
Aluno
idade
18
40
36
44
50
12
30

cpf
789.456.789-25
654.456.789-12
422.456.789-63
123.456.758-78
123.999.789-45
121.350.789-98
414.453.789-01

turma
1
1
1
1
2
2
3

Pgina 38

Divus Carreira do Programador Bancos de Dados

Captulo 5

DQL - CONSULTAS A BANCOS DE DADOS

www.divus.com.br

Pgina 39

Divus Carreira do Programador Bancos de Dados

www.divus.com.br

Pgina 40

Divus Carreira do Programador Bancos de Dados

5 Consultas ao banco de dados


Depois da faze de modelagem, na qual os formatos e as condies em que os dados sero
armazenados so definidos, as operaes comuns em um banco de dados so a alterao e
consulta de dados, sendo que as consultas so as operaes mais realizadas. Toda
consulta envolve a leitura de dados gravados no modelo definido pelo SGBD e
apresentao desses dados de forma legvel pelo usurio. possvel realizar desde
uma consulta simples, que retorne todos os registros encontrados em uma tabela, at
uma muito sofisticada, que combine dados de vrias tabelas e inclua informaes
calculadas no momento em que a consulta realizada, alm de ordenao,
agrupamento e filtragem de registros.
A instruo select a responsvel pelo retorno de registros para o usurio e a nica
instruo da sua categoria (DQL). Apesar de ser a nica do seu tipo, pode ser utilizada com
uma enorme combinao de clusulas para adequar cada consulta a um objetivo especfico.
Um banco de dados para servir de sparring
A fim de que voc possa ter uma experincia mais rica com as consultas a bancos de dados, e
possa observar o retorno de dados resultante dos comandos que vai aprender daqui em
diante, um banco de dados pronto e com dados inseridos ser disponibilizado pelo seu
professor.
Opcionalmente o banco de dados utilizado para o aprendizado das consultas poder estar no
SGBD instalado nos computadores da Divus, poder estar instalado no seu notebbok pessoal,
poder ser acessado a partir de em um computador da rede local ou mesmo na internet. Seu
professor vai orient-lo quanto forma de obter uma cpia do banco de dados para seu
computador ou utiliz-lo atravs da rede.
O nome do banco que vamos utilizar loja e possui as tabelas e relaes constantes do
diagrama seguinte:

www.divus.com.br

Pgina 41

Divus Carreira do Programador Bancos de Dados

Observando o diagrama, fcil concluir o seguinte:


Todo produto classificado de acordo com um tipo previamente definido. Este tipo est
definido no campo tipo da tabela produto que abriga uma restrio para entrada de dados,
obrigando que sejam fornecidos para este campo, apenas dados constantes no campo id na
tabela tipo_produto.
Na tabela produto tambm armazenada a informao relativa ao fornecedor de cada
produto. Esta informao abrigada pelo campo fornecedor. Este campo mantm uma
restrio de entrada de dados, definida pela foregin key que relaciona o campo fornecedor da
tabela produto com o campo id na tabela fornecedor.

www.divus.com.br

Pgina 42

Divus Carreira do Programador Bancos de Dados

Todas essas relaes de dependncia foram estabelecidas atravs da criao das chaves
estrangeiras nas tabelas que so dependentes de outras.
A seguir, todo os comandos Sql utilizados para a criao do nosso banco de dados para testes:
Cidades
create table cidades
(
cid_id int not null primary key auto_increment,
cid_nome char(250) not null,
cid_estado char(2) not null
);

Bairros
create table bairros
(
bai_id int not null primary key auto_increment,
bai_nome char(250) not null,
bai_cidade int not null,
constraint
foreign
key
bairro_cidade(bai_cidade)
cidades(cid_id)
);

www.divus.com.br

references

Pgina 43

Divus Carreira do Programador Bancos de Dados


Formecedores
create table fornecedores
(
for_id int not null primary key auto_increment,
for_nome char(250) not null,
for_bairro int not null,
for_cpf char(14) not null,
constraint
foreign key fornecedor_bairro(for_bairro)
bairros(bai_id)
);

references

Clientes
create table clientes
(
cli_id int not null primary key auto_increment,
cli_nome char(250) not null,
cli_bairro int not null,
cli_cpf char(14) not null,
constraint
foreign key cliente_bairro(cli_bairro)
bairros(bai_id)
);

references

Tipos de Produtos
create table tipos_produtos
(
tip_id int not null primary key auto_increment,
tip_nome char(250) not null
);

Produtos
create table produtos
(
pdt_id int not null primary key auto_increment,
pdt_nome char(250) not null,
pdt_valor_entrada double not null,
pdt_valor_saida double not null,
pdt_tipo int not null,
pdt_fornecedor int not null,
pdt_estoque int not null,
constraint
foreign
key
produto_tipo(pdt_tipo)
references
tipos_produtos(tip_id),
constraint
foreign
key
produto_fornecedor(pdt_fornecedor)
references fornecedores(for_id)
);

Pedidos
create table pedidos
(
ped_id int not null primary key auto_increment,
ped_data datetime not null,
ped_cliente int not null,
constraint
foreign key pedido_cliente(ped_cliente)
clientes(cli_id)
);

www.divus.com.br

references

Pgina 44

Divus Carreira do Programador Bancos de Dados


Itens dos Pedidos
create table itens_pedidos
(
itPed_id int not null primary key auto_increment,
itPed_pedido int not null,
itPed_produto int not null,
itPed_qtd double not null,
itPed_vu double not null,
itPed_vt double not null,
constraint
foreign
key
item_pedido(itPed_pedido)
pedidos(ped_id),
constraint
foreign key item_produto(itPed_produto)
produtos(pdt_id)
);

references
references

Nas pginas seguintes temos uma lista dos registros existentes em cada tabela do banco de
dados, para que voc possa confrontar o resultado das suas consultas:
select * from bairro;

select * from cidade;

www.divus.com.br

Pgina 45

Divus Carreira do Programador Bancos de Dados


select * from tipo_cliente;

select * from tipo_produto;

select * from cliente where id < 16;

www.divus.com.br

Pgina 46

Divus Carreira do Programador Bancos de Dados


select * from cliente where id > 15;

select * from fornecedor;

www.divus.com.br

Pgina 47

Divus Carreira do Programador Bancos de Dados

select * from produto;

select * from fornecedor

www.divus.com.br

Pgina 48

Divus Carreira do Programador Bancos de Dados

select * from pedido where id < 16;

select * from pedido where id > 15;

select * from item_pedido where id < 17;

A tabela item_pedido contm 208 registros. Somente os 16 primeiros foram exibidos


aqui.

www.divus.com.br

Pgina 49

Divus Carreira do Programador Bancos de Dados

5.1 Selecionando dados de uma tabela


SELECT
Consultar um banco de dados implica em retornar informaes relativas aos registros que
esto contidos nas suas tabelas. Estas informaes podem ser relativas aos dados
armazenados em cada campo, ou relativas s quantidades de registros contidos nas tabelas.
Operaes aritmticas, imposio de ordem, critrios de filtragem combinaes de dados de
vrias tabelas so, entre outras, possibilidades que esto disposio do programador.
Conhecer profundamente a sintaxe e memorizar uma quantidade enorme de funes e
palavras chave pode ser um recurso muito til, mas, tambm neste caso, desenvolver a
criatividade para combinar esses recursos to importante quanto conhec-los. Saber se um
recurso pode ser combinado a outro, decidir sobre que estratgia utilizar ou mesmo prever o
resultado que determinada combinao de recursos vai oferecer, so habilidades alcanadas
com a prtica e a experimentao. Quanto mais voc utiliza um recurso, mais fluente se torna.
Nas pginas seguintes, vamos aprender algumas formas de retornar resultados armazenados
em tabelas, formas de filtrar, ordenar, formatar e agrupar estes resultados.
Para retornar dados de uma tabela devemos antes decidir quais campos devero fazer parte
do resultado da consulta, ou se todos os campos vo fazer parte resultado. Veja o exemplo a
seguir:
select * from produto;

Na consulta anterior, todas as informaes contidas em todos os campos sero retornadas. Na


consulta a seguir, estaremos obtendo apenas as informaes contidas nos campos id e nome:
Select id, nome from produto;

Muitas linguagens de programao dispem de ferramentas para navegao atravs dos


registros retornados por um comando SQL. Aes como ir para o prximo, ou verifique se j
prximo registro e muitas outras similares a estas podem estar disponveis com pequenas
variaes de nome entre linguagens.

5.2 Filtrando os dados


Existem algumas maneiras de estabelecer filtros para os dados que se deseja ver.
Vejamos algumas

www.divus.com.br

Pgina 50

Divus Carreira do Programador Bancos de Dados


SELECT DISTINCT
Quando h a possibilidade de existirem valores duplicados em uma das colunas da tabela e s
se deseja visualizar valores exclusivos, pode-se utilizar o este comando. No exemplo a seguir,
retornamos pedidos dos clientes, especificando que no desejamos ver mais de um pedido
para cada cliente. Sabemos que os ids dos clientes repetem-se na tabela de pedidos, porque
cada cliente pode comprar muitas vezes na mesma loja mas, nesse caso desejamos ver apenas
valores exclusivos: um pedido de cada cliente.
select distinct cliente, id , data

from pedido

SELECT TOP / LIMIT / ROWNUM


Quando h necessidade de retornar apenas os primeiros registros de um conjunto, podemos
utilizar a clusula SELECT TOP, na qual definimos a quantidade ou o percentual de registros a
serem retornados. Alguns SGBD no suportem esta clusula, mas oferecem recursos
semelhantes para empregarmos em seu lugar.
Selecionando os 3 primeiros produtos e em seguida 50% dos produtos de uma tabela no SQL
SERVER ou no MS ACESS
select top 3 * from Produto;
select top 50 percent * from Produto

Selecionando os 5 primeiros produtos de uma tabela no MYSQL.


select * from produto limit 5

Selecionando os 5 primeiros produtos de uma tabela no ORACLE


select * from produto where rownum <= 5

WHERE
Use a clusula WHERE para obter apenas os registros que preencha os critrios especificados.
Por exemplo, filtrando os pedidos por cliente. possvel retornar apenas os pedido para
efetuados por determinado cliente. Lembre que o campo cliente na tabela pedido chave
estrangeira e guarda no os nomes dos clientes, mas o seu id (relacionado com o campo id da
tabela cliente)
select *

from pedido where cliente = 2

Operadores OR e AND
Os operadores AND e OR so utilizados para combinar critrios e seu uso est sujeito s regras
da lgica booleana. O uso de AND restring o retorno de registros queles que satisfaam tanto
uma quanto outra caracterstica. O uso de OR retorna registros que satisfaam a pelo menos
uma das caractersticas utilizada para o filtro. Veja uma consulta que retorna os produtos que
tenha tipo igual a 6 e com estoque acima de 1000:
www.divus.com.br

Pgina 51

Divus Carreira do Programador Bancos de Dados


select * from produto where tipo = 6 and estoque > 1000

Agora uma consulta que retorne produtos cujo valor de entrada seja maior que 10 ou ento
tenha mais que 1000 unidades em estoque:
select * from produto where valor_entrada > 10 or estoque > 1000

Agora uma combinao entre o operador OR e AND. Neste exemplo sero retornados
produtos cujo valor de entrada seja maior que 10 ou ento que tenham estoque maior que
1000, mas, mesmo atendendo a uma ou outra dessas especificaes, o produto deve ser do
fornecedor 7. Repare que os critrios relacionados com OR esto entre parntesis, seguidos do
critrio relacionado com AND.
select * from produto where (valor_entrada > 10 or estoque > 1000) and
fornecedor = 7

Operador BETWEEN
O operador BETWEEN utilizado na clusula WHERE em combinao com o operador AND e
retorna valores que estiverem dentro de uma faixa especificada. Na instruo a seguir, os
produtos retornados sero aqueles cuja quantidade em estoque esteja entre 10 e 200.
select * from produto where estoque between 10 and 200

Operador LIKE
Este operador usado dentro da clusula WHERE para coincidir o valor do campo com um
padro estabelecido. Embora seja possvel utilizar LIKE para encontrar uma sequncia exata,
seu uso mais comum em combinao com os caracteres curinga. Tambm chamados de
wildcards. No exemplo seguinte vamos selecionar produtos cujo nome comece com a letra a:
select * from produto where nome like 'a%'

WILDCARDS
Os WILDCARDS combinados com a o operador LIKE podem ser repetidos no padro de busca,
combinados uns com os outros e posicionados em diferentes locais do padro. Veja alguns
exemplos:
Selecionando produtos cujo nome tenha a sequncia ce em qualquer parte do seu nome. O
caractere percentual ( % ) utilizado em substituio a qualquer quantidade de qualquer
caractere antes de ce e tambm depois.
select * from produto where nome like '%ce%'

Nome do produto pode ter qualquer caractere (mas apenas um!) antes da expresso e e
qualquer quantidade de caracteres aps o e.
select * from produto where nome like '_e%'

www.divus.com.br

Pgina 52

Divus Carreira do Programador Bancos de Dados


Operador IN
O operador in permite a incluso de mltiplos valores na clusula where. No resultado da
consulta sero includos registros cujo valor do campo na clusula where coincida com
qualquer dos valores.
select * from cidade where nome in ('manaus', 'Rio de Janeiro')

Clusula WHERE combinada com NULL


Tambm possvel filtrar registros usando como critrio a condio de um ou mais campos
estarem ou no nulos (nulo = sem valor algum, nem mesmo zero). Veja os exemplos abaixo:
Retornando registros da tabela de cidades os quais tem valor no campo nome, ou seja, o
campo nome no est nulo.
select * from cidade where nome is not null

Retornando registros da tabela de cidades que no possuam valor algum no campo nome, ou
seja, o campo nome est nulo.
select * from cidade where nome is null

Nulo aquele campo que no contm valor algum, ou seja, o


valor no existe. Muito diferente do campo que contm valor
zero! A existncia de valor zero em um campo permite que
sejam realizadas operaes aritmticas envolvendo o campo,
permite que o campo seja impresso ou mostrado em uma de
interface grfica. O valor nulo ao contrrio no serve para
nenhuma dessas operaes, menos que a nulidade seja
testada e tratada no cdigo que acessa o campo.

5.3 Ordenando os dados


Para ordenao dos registros de uma consulta, usamos a palavra chave ORDER BY combinada
com informaes necessrias ordenao. Estas informaes so relativas aos campos que
devem ser considerados na ordenao, a prioridade de cada campo sobre os outros e o tipo de
ordem que de ver ser empregada.
Clusula ORDER BY
Para ordenar um conjunto de registros deve-se usar a palavra chave ORDER BY seguida do
campo por cujos valores se deseja ordenar o dados. No exemplo a seguir retornamos todos os
campos da tabela de produtos, ordenados pela quantidade em estoque. Os produtos sero
ordenados desde o que possui a menor quantidade at o que apresenta a maior quantidade
em estoque.
www.divus.com.br

Pgina 53

Divus Carreira do Programador Bancos de Dados


select * from produto order by estoque

ORDER BY ordena, por padro, na ordem natural, ou seja, do menor valor para o maior, ou em
ordem alfabtica crescente, caso o campo contenha valores literais. Tambm possvel
especificar ordenao inversa, veja o exemplo seguinte, onde acrescentamos a expresso desc
aps o nome do campo de ordenao.
select * from produto order by estoque desc

Tambm possvel especificar diversas colunas para ordenao, neste caso as colunas devem
ser separadas por vrgulas. Veja mais um exemplo, onde ordenamos os registros por
fornecedor de forma ascendente e por quantidade em estoque, de forma descendente. As
colunas pelas quais se deseja ordenar os dados devem aparece na consulta na ordem de
prioridade que se deseja. No nosso exemplo, definimos que a coluna fornecedor tem
prioridade sobre a coluna estoque.
select * from produto order by fornecedor asc, estoque desc

5.4 Funes de SQL


SQL possui vrias funes internas capazes de retornar clculos efetuados com os dados.
Vejamos algumas delas e suas subdivises.

5.4.1 Funes agregadas


Funes agregadas realizam uma operao matemtica em um conjunto
definido de registros e retornam um valo nico, resultante dessa operao.
Case haja valores nulos no campo envolvido no clculo, este ignorado por
todas as funes agregadas exceto count(). muito comum o uso das funes
agregadas associadas agrupamentos promovidos pela clusula group by.
Funo AVG
Retorna a mdia dos valores de um campo na tabela. Veja o exemplo em que calculamos o
valor mdio de entrada dos produtos de uma tabela. O retorno dessa instruo uma nica
linha com um nico valor contido em um campo cujo nome o alias que determinamos na
consulta.
select avg(valor_entrada) as media from produto

www.divus.com.br

Pgina 54

Divus Carreira do Programador Bancos de Dados


Funo COUNT
Retorna a contagem de valores encontrados em uma coluna. Voc deve estar atendo para o
fato de que esta funo no leva em considerao as grandezas representadas pelo contedo
do campo, ela apenas conta quantos registros tem o campo preenchido. Veja o exemplo em
que contamos os registros da tabela de cidades.
select count(ID)from cidade

Funo FIRST
Usamos esta funo para retornar o primeiro registro de um conjunto. Aqui tambm vamos
encontrar diferentes implementaes desta funcionalidade entre os SGBD. Vejamos algumas:
No Ms Access, para retornar o primeiro da tabela de produtos, faa assim:
select first(id) AS idProduto FROM Produto

No Sql Server, assim:


select top 1 id, nome from produto order by id

No MySql, faa assim:


select id, nome from produto order by id limit 1

No Oracle faa assim:


select id, nome from produto order by id asc where rownum <=1

Funo LAST
Muito semelhante funo FIRST, a funo LAST usada para retornar o ltimo registro de um
conjunto. Vejamos as diferentes implementaes ou estratgias substitutivas em diferentes
SGBD:
No Ms Access, para retornar o ltimo registro da tabela de produtos, faa assim:
select last(id) AS idProduto FROM produto

No Sql Server, assim:


select top 1 id, nome from produto order by id desc

No MySql, faa assim:


select id, nome from produto order by id desc limit 1

No Oracle faa assim:


select id, nome from produto order by id desc where rownum <=1

www.divus.com.br

Pgina 55

Divus Carreira do Programador Bancos de Dados


Funo MAX
Enquanto as funes FIRST e LAST baseiam-se na posio do registro dentro do conjunto para
decidir qual deles exibir, MAX utiliza o valor do campo como critrio, retornando o maior valor
contido no campo para o conjunto de registros, no importando a posio que o mesmo
ocupa:
select max(valor_entrada) as maiorpreco from produto;

Funo MIN
Semelhante funo MAX, difere por retornar o menor valor. Veja
select min(valor_entrada) as maiorpreco from produto;

Funo SUM
Retorna a soma dos valores de um dos campos da tabela, dentro do universo de registros
especificado. Veja alguns usos:
Retorna a soma dos valores de todos os itens de todos os pedidos
select sum(valor_total) as total from item_pedido

Retorna a soma dos valores dos itens do pedido cujo id um


select sum(valor_total) as total from item_pedido where pedido = 1

Resumo das funes agregadas:

Funo
AVG
COUNT
FIRST
LAST
MAX
MIN
SUM

www.divus.com.br

Retorno
Mdia dos valores contidos em um campo
Quantidade de registros
Primeiro registro
ltimo registro
Valor mximo encontrado em um campo
Valor mnimo encontrado em um campo
Soma dos valores de um campo

Pgina 56

Divus Carreira do Programador Bancos de Dados

5.4.2 Funes Escalares


Funes escalares operam sobre um valor de um campo, retornando parte
dele, informaes sobre o valor ou o prprio valor com formatao especfica,
definida pela prpria funo. Encapsulam funcionalidades corriqueiras,
evitando escrita de cdigo adicional nas aplicaes front end, delegando ao
prprio banco de dados, operaes simples e muito usuais. O conjunto de
funes escalares disponvel nos SGBD tem aplicaes diversas e variam de
nome e propsito de um SGBD para outro. Apesar de teis as funes escalares podem
comprometer o desempenho de uma consulta, quando o volume de registros aumenta
significativamente.
Funo UCASE
Retornando o contedo do campo nome da tabela de clientes formatando os caracteres para
maisculas
select ucase(nome) from cliente

Funo LCASE
Retornando o contedo do campo nome da tabela de clientes formatando os caracteres para
minsculas.
select lcase(nome) from cliente

Funo MID
Retornando 3 caracteres do contedo do campo nome, a partir da segunda posio. Ex.
Marcos retorna arc.
select mid(nome, 2,3) from cliente

No Sql Server, esta funcionalidade est implementada das seguinte forma:


select substring(pdt_Nome,2,3) as parteNome from Produtos

Funo LENGTH
A funo LENGTH retorna um nmero inteiro equivalente quantidade de caracteres que
um campo contm. Veja:
select length(nome) as qtd from cliente

Funo ROUND
Retorna o valor do campo arredondado para um nmero determinado de casas decimais.
select round(valor_entrada,1) as ve from produto

www.divus.com.br

Pgina 57

Divus Carreira do Programador Bancos de Dados


Funo NOW
Retorna a data atual do sistema.
No MySql
select now()

No Sql Server
select

getdate()

Funo FORMAT
Formata o valor de um campo para o nmero especificado de casas decimais
No MySql
select nome, format(valor_entrada,3) from produto;

No Sql Server a funo format tem aplicao mais ampla, podendo formatar nmero, datas e
receber parmetros para formatos especficos e de localidade.
SELECT
SELECT
SELECT
SELECT

FORMAT
FORMAT
FORMAT
FORMAT

(getdate(),
(1253, 'N',
(1253, 'G',
(1253, 'C',

'd', 'pt-BR'
'pt-BR' ) AS
'pt-BR' ) AS
'pt-BR' ) AS

) AS 'Data brasileira'
'formato numrico Nmeric'
'Formato geral "General"'
'formato de moeda "Currency"'

As formataes acima retornam, respectivamente;


03/10/2014
1.253,00
1253
R$ 1.253,00

Resumo das funes escalares apresentadas aqui:

Funo
UCASE
LCASE
MID
LEN
ROUND
NOW
FORMAT

www.divus.com.br

Retorno
Valor do campo convertido para maisculas
Valor do campo convertido para minsculas
Parte dos caracteres de um campo
Quantidade de caracteres de um campo
Valor de um campo arredondado
Data atual do sistema
Contedo formatado do campo

Pgina 58

Divus Carreira do Programador Bancos de Dados

DQL - Consultando dados no banco

1. Crie um banco de dados denominado loja no seu SGBD.


2. Faa download do script para gerao dos objetos do banco de dados loja, do local
especificado pelo instrutor e rode o script utilizando a interface grfica de sua preferncia.
Aps rodar o script, seu banco de dados vai contar no apenas com as tabelas e suas
chaves estrangeiras, mas tambm com os dados para servirem de exemplo nas consultas.
3. Execute consultas ao banco de dados que retornem:
3.1. Todos dos registros da tabela bairro sem qualquer ordem
3.2. Todos dos registros da tabela bairro ordenados pelo nome do bairro
3.3. Todos os registros da tabela produto cujo valor de entrada seja menor que 5
3.4. Todos os registros da tabela produto cujo valor de entrada seja entre que 3 e 6
3.5. Todos os registros da tabela produto cujo valor de entrada seja entre que 3 e 6 e o
nome comece com a letra f
3.6. Todos os registros da tabela produto cujo valor de entrada seja menor que 10 e o
nome contenham a sequencia de caracteres "ao".
3.7. Todos os registros da tabela produto de maneira que o produto com menor valor de
entrada aparea em primeiro lugar e o de maior valor de entrada seja o ltimo a ser
listado
3.8. Todos os registros da tabela produto de maneira que o produto com maior valor de
entrada aparea em primeiro lugar e o de menor valor de entrada seja o ltimo a ser
listado
3.9. O valor mdio de venda dos produtos
3.10.
A quantidade de pedidos de clientes existem no banco de dados
3.11.
Quantos produtos esto cadastrados no banco
3.12.
Retorne os cinco primeiros bairros da tabela de bairros
3.13.
Os cinco ultimos bairros da tabela de bairros
3.14.
O valor do produto mais caro da tabela usando um funo agregada
3.15.
O valor do produto mais barato da tabela usando um funo agregada
3.16.
A soma de todos os valores de saida dos produtos
3.17.
O valor total do estoque de produtos da empresa (soma do valor de venda
vezes quantiade em estoque)
3.18.
os ids, nomes e valor de entrada de todos os produtos da tabela com seus
nomes em maisculas
3.19.
Os ids, nomes e valor de entrada de todos os produtos da tabela com seus
nomes em maisculas e seus valores arredondados para uma casa decimal apenas.

www.divus.com.br

Pgina 59

Divus Carreira do Programador Bancos de Dados

5.5 Consulta a vrias tabelas com joins


Joins so relaes estabelecidas entre duas tabelas a fim de
retornar dados como um nico conjunto que pode ser utilizado
para apresentao ou para se relacionar com outro conjunto ou
outra tabela. As relaes estabelecidas pelo uso de joins no so
perenes, ou seja, no permanecem como caracterstica de
nenhuma das tabelas envolvidas na relao. importante,
portando, no confundir joins com chaves estrangeiras (foreign
keys). As foreign keys definem relaes permanentes entre as tabelas para restringir a
entrada de dados em uma tabela, com base na existncia de dados na outra.
O uso dos diferentes tipos de joins determina como os dados sero retornados e podem
gerar efeitos muito teis ou resultados inesperados, dependendo da percia no emprego
de cada tipo de join, bem como do exato conhecimento do que se quer retornar.
A seguir veremos algumas condies em que estes joins podem ser empregados.
Novamente lembramos que praticamente impossvel esgotar o assunto, pois as
combinaes so muitas e esto mais ligadas capacidade de elaborar solues do que a
limitaes tcnicas.
Para ilustrar os prximos exemplos, vamos definir um banco de dados bem simples com
apensas 3 tabelas, cujo formato e registros mostramos a seguir:
create table aluno (
id int not null primary key
nome char(250) not null,
curso int(11) default null,
)

auto_increment,

create table curso (


id int not null primary key auto_increment,
nome char(250) default null,
tipo int(11) default null,
)
create table tipo_curso (
id int not null primary key auto_increment,
nome char(250) default null,
)

www.divus.com.br

Pgina 60

Divus Carreira do Programador Bancos de Dados

Em seguida os dados contidos nas tabelas para efetuarmos os testes com joins:

Agora vejamos uma consulta simples envolvendo apenas uma tabela:


select * from aluno;

O resultado da consulta:

INNER JOIN
O resultado da consulta anterior apresenta somente nmeros no campo
curso. Estes nmeros so, por deduo, os valores contidos no campo id
da tabela de cursos. Para muitas finalidades este nmero bastante til,
mas para apresentao ao usurio em um relatrio, por exemplo, a
informao no seria esclarecedora. Neste caso preciso relacionar a tabela
aluno com a tabela curso e retornar o valor contido no campo nome da
tabela curso. Vejamos a instruo SQL.
select
a.nome as alu,
c.nome as cur
from aluno a inner join curso c
on a.curso = c.id;

Um relacionamento entre duas tabelas, estabelecido atravs inner join determina que,
para um registro fazer parte do conjunto retornado preciso que haja coincidncia entre
o valor dos campos envolvidos no relacionamento.

www.divus.com.br

Pgina 61

Divus Carreira do Programador Bancos de Dados

Veja o resultado desta consulta:

Note que dessa vez foram retornados tanto dados da tabela aluno quanto da tabela
curso, mas os alunos para os quais no foi definido um curso no aparecerem no
resultado da consulta. Desta vez as alunas Amanda e Maria foram omitidas. Isso
ocorreu devido imposio da condio de que, para fazer parte do conjunto de
resultados, os valores dos campos mencionados no join devem ser coincidentes em
AMBAS as tabelas.
LEFT JOIN
Imagine que seja necessrio retornar dados de ambas as tabelas, mas queremos priorizar
os dados de uma delas. Queremos, por exemplo, visualizar os alunos e o curso em que
cada um est matriculado, mas, quanto um aluno no estiver relacionado a nenhum
curso, ele tambm deva ser includo entre os resultados, ou seja, os dados da tabela de
cursos tem que encontrar coincidncia com os da tabela de alunos, mas os no o
contrrio. Neste caso a tabela de alunos teria um comportamento mandatrio no
relacionamento.
Neste caso, dependendo da maneira como as tabelas aparecem na consulta, podemos
utilizar left ou right join. Primeiramente vamos utiliza left join. Veja o exemplo a
seguir:
select
a.nome as alu,
c.nome as cur
from aluno a left join curso c
on a.curso = c.id;

Veja o resultado desta consulta:

Veja que, usando o left join, foram exibidos todos os registros


da tabela de alunos, mesmo aqueles que no contm nenhum
valor no campo curso, ou seja, alunos que no esto
relacionados a nenhum dos cursos constantes na tabela de
cursos.
www.divus.com.br

Pgina 62

Divus Carreira do Programador Bancos de Dados

Isso ocorre, porque neste tipo de relao a tabela da esquerda tem seus registros
exibidos, mesmo que no haja coincidncia entre os campos definidos para relacionar as
tabelas. J a exibio dos registros da tabela da direita est condicionada coincidncia.
Esquerda e direita so referncias ordem em que a tabela aparece na clusula from,
Esquerda a tabela que aparece primeiro e direita a posio da prxima tabela em
relao anterior, uma vez que o texto escrito da esquerda para a direita e de cima
para baixo.
RIGHT JOIN
Considerando agora que desejamos ver todos os registros da tabela de cursos e os
registros da tabela de alunos somente quando houver coincidncia. Assim iremos ver
todos os cursos, mesmo aqueles para os quais no haja aluno matriculado. Par obter
esse resultado a tabela curso teria um papel mandatrio no relacionamento.
Agora vamos utilizar right join. Veja o cdigo a seguir:
select
a.nome as alu,
c.nome as cur
from aluno a right join curso c
on a.curso = c.id;

Veja o resultado desta consulta:

Veja que, usando o right join, foram exibidos todos os registros da tabela de cursos,
mesmo aqueles para os quais no h aluno matriculado, ou seja, foram exibidos at os
cursos cujos valores do campo id no apaream no campo curso da tabela aluno.
Desta vez, os registros cuja exibio est sujeita existncia de coincidncia entre os
campos relacionados so os da tabela aluno. Todos os registros da tabela curso sero
exibidos, enquanto que apenas alunos com valores no campo curso, coincidentes com
valores do campo id da tabela curso sero exibidos. Note que Amanda e Maria
ficaram fora dos resultados.
No right join a tabela da direita mandatria no relacionamento.

www.divus.com.br

Pgina 63

Divus Carreira do Programador Bancos de Dados

CROSS JOIN
Este um tipo especial de join que no exige a definio de uma relao entre campos
das duas tabelas. A palavra on, utilizada para introduzir o tipo de amarrao que
fazemos entre os dados das tabelas no aparece aqui. Diferentemente do inner join, os
dados agora no so combinados: para cada linha de uma tabela, todas as linhas da outra
tabela so retornadas, de maneira que a quantidade de registros retornados um produto
entre as quantidades de registros de cada uma delas. O resultado de um cross join entre
uma tabela com 30 registros e outra com 10 registros ser um conjunto de 300 registros.
Agora vamos utilizar cross join. Veja o cdigo a seguir:
select
a.nome as alu,
c.nome as cur
from aluno a cross join curso c

Veja parte do resultado desta consulta no recorte abaixo:

Usando o cross join, foram exibidos todos os registros da tabela de cursos, e todos os
registros da tabela de alunos. Para cada registro em uma h todos os registros da outra
so exibidos. No ouve nenhum tipo especial de combinao.

www.divus.com.br

Pgina 64

Divus Carreira do Programador Bancos de Dados

Joins - Combinando dados de vrias tabelas

1. Crie um banco de dados denominado loja no seu SGBD.

2. Faa download do script para gerao dos objetos do banco de dados loja, do local
especificado pelo instrutor e rode o script utilizando a interface grfica de sua preferncia.
Aps rodar o script, seu banco de dados vai contar no apenas com as tabelas e suas
chaves estrangeiras, mas tambm com os dados para servirem de para as consultas.

3. Crie consultas que retornem:


3.1. O id e o nome do produto e o nome do tipo de produto
3.2. O id o nome do cliente e o nome do bairro do cliente
3.3. O id o nome do cliente e o nome do bairro do cliente e o nome da cidade do cliente

4. Execute as consultas a seguir e responda s questes aps cada execuo:


4.1. Selecione todos os clientes do banco de dados. Quantos clientes foram listados?
4.2. Selecione todos os pedidos do banco de dados. Quantos pedidos foram listados?
4.3. Selecione todos os pedidos exibindo o id, data e o nome do cliente do pedido,
utilizando INNER JOIN. Quantos registros foram retornados?
4.4. Selecione todos os pedidos exibindo o id, data e o nome do cliente do pedido,
alternado o uso de INNER JOIN, LEFT JOIN e RIGHT JOIN. Quantos registros foram
retornados em cada ocasio? Tente explicar o que houve em cada caso.
4.5. Selecione apenas os clientes para os quais no h nenhum pedido. Dica: utilizar LEFT
ou RIGHT JOIN e combinar com uso de NULL na clusula where.

www.divus.com.br

Pgina 65

Divus Carreira do Programador Bancos de Dados

5.6 Uso de operadores em consultas


Operadores podem ser empregados de diversas maneiras para a elaborao de
instrues, tanto para mostrar resultados calculados (select) quanto para modificar o
contedo das tabelas (update). Outro emprego muito frequente dos
operadores a aplicao de critrios para retorno de registros na
clusula where.

5.6.1 Campos calculados em consultas


Quando se deseja ver um cenrio hipottico ou projeo, ou at mesmo para produzir
um resultado no persistido no banco de dados, utilizamos alm das funes agregadas,
os campos calculados. Imagine, por exemplo, que se deseje ver o total de cada pedido
no nosso banco de dados de exemplo. Como no h um campo com o valor total do
pedido na tabela de pedidos, a nica forma de obtermos essa informao somando
cada um dos valores totais dos itens de cada pedido. Vejamos um exemplo:
select sum(valor_total) from item_pedido where pedido = 2;

A consulta anterior soma o valor_total (valor unitrio x quantidade vendida), de cada


um dos itens do pedido cujo id 2, retornando o valor 160.8.
Vejamos uma consulta exibindo todos os itens desse pedido:
select * from item_pedido where pedido = 2;

Analise o resultado da consulta:

Agora imagine a seguinte situao: Um aumento est previsto para os produtos


comercializados pela empresa. Planeja-se acrescer os preos dos produtos em 10%.
Quanto seria o valor do estoque total considerado este aumento?
Como a questo saber o valor total que o estoque atingiria com o aumento, mas no
aplicar o aumento ainda (no vamos alterar os dados existentes). Lanamos mo de uma
consulta onde o campo valor_saida fosse multiplicado por 1.1 depois o valor obtido
fosse multiplicado pela quantidade em estoque. Assim teramos o valor total de estoque
de cada produto considerado um aumento de 10 % sobre o preo de sada do produto.
Depois bastaria somar os valores obtidos em cada linha e teramos o valor total do
estoque da empresa, caso os preos fossem aumentados em 10%.

www.divus.com.br

Pgina 66

Divus Carreira do Programador Bancos de Dados

A seguir um diagrama dando ideia de como tudo acontece durante a preparao do


resultado:

www.divus.com.br

Pgina 67

Divus Carreira do Programador Bancos de Dados

Veja em seguida a construo dessa consulta passo a passo, uma expresso de cada vez
e, finalmente, todas as expresses juntas para obteno de resultado nico:
Vejamos o valor de cada produto sem o
aumento:

Exibindo o valor de cada produto com 10%


de aumento:

Select valor_saida * 1.10 from


produto;

Select valor_saida
produto;

Agora o valor de cada produto com 10% de


aumento, multiplicado pela quantidade em
estoque:

Retorno de campo calculado usando o


operador * para obter o valor de cada linha e
sum(), para somar as linhas

Select valor_saida *
estoque from produto;

Select sum(valor_saida * 1.10 *


estoque) from produto;

www.divus.com.br

1.10

1.10

from

Pgina 68

Divus Carreira do Programador Bancos de Dados

1.2. Agrupamento de dados combinados com funes de agregao


Quando estudamos funes agregadas, vimos que possvel retornar um valor
resultante do clculo efetuado em um domnio (conjunto de registros). Se desejarmos,
por exemplo, saber o total de unidade em estoque de todos os produtos, basta usar a
funo sum(), como no exemplo seguinte:
select sum(estoque) from produto;

Ocorre que, em determinadas ocasies necessrio obter


resultados parciais. Um bom exemplo desse tipo de situao seria
retornar o total de itens em estoque de produtos, para cada
diferente fornecedor. Neste caso o resultado nico, resultante da
soma de todas as unidades em estoque no seria adequado. Uma
soluo funcional, mas no ideal, seria fazer vrias consultas ao banco de dados
somando o campo estoque e filtrando por fornecedor. Veja o exemplo:
select
select
select
select
...

sum(estoque)
sum(estoque)
sum(estoque)
sum(estoque)

from
from
from
from

produto
produto
produto
produto

where
where
where
where

fornecedor
fornecedor
fornecedor
fornecedor

=
=
=
=

1;
2;
3;
n;

Esta estratgia, embora com muito esforo funcionasse, muito ruim, por dois motivos:
o primeiro que cada consulta teria que ser efetuada separadamente e o resultado
anotado para tabulao posterior o segundo que seria necessrio conhecer cada
fornecedor do banco de dados para alterar o filtro em cada execuo. Teramos que
contar com a disciplina e a memria do usurio. Estratgia descartada. Vejamos uma
alternativa, com o uso do GROUP BY.
select fornecedor, sum(estoque) from produto group by fornecedor;

Esta estratgia utiliza o GROUP BY para efetuar somas parciais de cada grupo de
produtos, utilizando o campo fornecedor como critrio de agrupamento. Veja o
resultado:

Conhecer toda a sintaxe de SQL e no usar a imaginao para


utiliz-los em conjunto um desperdcio de esforo. Neste
momento j conhecemos o uso de GROUP BY e j
estudamos tambm o uso de JOINS. Com a combinao
desses dois recursos, podermos produzir uma consulta mais
www.divus.com.br

Pgina 69

Divus Carreira do Programador Bancos de Dados

sofisticada que, ao invs de retornar os nmeros dos fornecedores (correspondentes aos


valores do campo id da tabela de fornecedores), mostre o nome dos fornecedores para
cada grupo de soma. Veja a consulta a seguir:
select f.nome, sum(estoque) from produto p inner join fornecedor f
on p.fornecedor = f.id
group by fornecedor;

Agora veja o resultado da consulta:

www.divus.com.br

Pgina 70

Divus Carreira do Programador Bancos de Dados

DDL + Joins + Funes

1. Utilizando o banco de dados loja, execute as seguintes consultas:


1.1. Retorne o id, nome e valor de entrada dos produtos com acrscimo de 20 por cento.
1.2. Retorne o id, nome do produto e o lucro bruto na venda de cada um (diferena entre
preo de venda e preo de entrada)
1.3. Retorne o id, nome do produto e o lucro bruto na venda de cada um, considerado um
desconto de 10 por cento sobre cada produto.
1.4. Retorne o lucro bruto total obtido caso todo o estoque fosse vendido.
1.5. Retorne o lucro bruto total obtido caso todo o estoque fosse vendido com um
desconto de 20 por cento sobre o atual preo de venda.
1.6. Qual valor do estoque por tipo de produto considerando o valor de sada dos
produtos.

www.divus.com.br

Pgina 71

Divus Carreira do Programador Bancos de Dados

www.divus.com.br

Pgina 72

Divus Carreira do Programador Bancos de Dados

Captulo 6

Segurana em bancos de dados

www.divus.com.br

Pgina 73

Divus Carreira do Programador Bancos de Dados

www.divus.com.br

Pgina 74

Divus Carreira do Programador Bancos de Dados

6 Segurana de bancos de dados


Voc deve ter reparado que para utilizar um banco de dados necessrio, ao efetuar
uma conexo, informar usurio e senha, alm da correta especificao do SGBD que
gerencia o banco de dados. O fornecimento das informaes relativas ao usurio serve
para que o SGBD seja capaz de gerenciar as aes que cada usurio tem direito de
executar. A fim de permitir que um usurio conecte-se a um banco de dados, o usurio
deve estar previamente cadastrado e ter suas prerrogativas (privilgios) definidas.
Como para cadastrar um usurio preciso estar logado no SGBD e para estar logado
necessrio que um usurio j esteja cadastrado, ento ficaramos num dilema sem sada:
como cadastrar o primeiro usurio para que este possa cadastrar os outros?
A soluo desse problema data pelo prprio fabricante do SGBD que j
fornece junto com o aplicativo, um usurio padro, cujo nome e senha
variam de um fabricante para outro. A documentao do SGBD escolhido
dever ser consultada para que se conhea o usurio padro de fbrica e
sua senha se houver. Aps instalado e configurado um SGBD,
fortemente recomendado que se criem novos usurios de acordo com a
necessidade do negcio, e que a senha do usurio padro seja definida ou redefinida,
conforme seja o caso.No mysql o usurio padro o root e ele no possui uma senha
definida. Vamos ver o comando necessrio para criar um novo usurio no servidor de
dados.
CREATE USER 'nomeDoUsuario'@'SGBD' IDENTIFIED BY 'senha';

Onde 'nomeDoUsuario' deve ser substitudo pelo nome do usurio que se deseja criar.
'SGBD' o nome do servidor de dados, 'senha' a senha para o novo usurio. Vamos criar
um novo usurio no servidor local, denominado Joo, cuja senha seja 123.
CREATE USER 'joao'@'localhost' IDENTIFIED BY '123';

Quando o usurio criado ainda no h privilgios definidos para ele em nenhum dos
bancos de dados. Ser preciso ento conceder privilgios para que ele possa atuar sobre
os objetos contidos nos bancos de dados de interesse. Veja a sintaxe da concesso de
privilgios:
GRANT ALL ON bancoDeDados.objeto TO 'usuario'@'servidor';

A seguir um exemplo da concesso de todos os privilgios para o usurio joao na tabela


aluno do banco de dados escola.
GRANT ALL ON escola.aluno TO 'telis'@'localhost';

Agora um exemplo da concesso de todos os privilgios em todos os objetos do banco


de dados escola para o usurio joao:
GRANT ALL ON escola.* TO 'joao'@'localhost';

www.divus.com.br

Pgina 75

Divus Carreira do Programador Bancos de Dados

Concedendo privilgio para selecionar registros na tabela de turmas do banco de dados


denominado escola:
GRANT SELECT ON escola.turma TO 'joao'@'localhost';

Concedendo privilgio para deletar registros na tabela de alunos do banco de dados


denominado escola:
GRANT SELECT ON escola.aluno TO 'joao'@'localhost';

Tambm possvel definir os limites para uso dos recursos do banco de dados para um
determinado usurio. No exemplo seguinte vamos limitar a execuo de consultas
tabela aluno do banco de dados escola para o usurio joao em 100 consultas por hora:
GRANT
USAGE
ON
escola.aluno
MAX_QUERIES_PER_HOUR 90;

TO

'joao'@'localhost'

WITH

Tambm possvel conceder todos os privilgios de uma s vez para determinado


usurio sobre recursos de um banco de dados. Veja como concedemos todos os
privilgios para o usurio joao no banco de dados escola:
GRANT ALL PRIVILEGES ON escola.* TO 'joao'@'localhost' IDENTIFIED BY
'123';

Agora um exemplo da excluso de privilgio. Vamos negar ao usurio joao o privilgio


de inserir dados nas tabelas do banco de dados escola
REVOKE INSERT ON escola.* FROM 'joao'@'localhost';

Para remover um usurio da lista de usurios do seu SGBD, impedindo que ele efetue
novas conexes use DROP USER da seguinte maneira:
DROP USER joao@'localhost';

At a verso 5.0.2 do MySql o comando DRPO USER removia apenas usurios para os quais
no houvesse nenhum privilgio definido. Para remover um usurio completamente incluindo
seus privilgios, era necessrio remover os privilgios do usurio utilizando REVOKE e, sem
seguida utilizar DROP USER para remover o usurio. Atualmente o comando DROP USER
remove o usurio especificado e todos dos seus privilgios.

www.divus.com.br

Pgina 76

Divus Carreira do Programador Bancos de Dados

Captulo 7

SGBDs
Ferramentas Grficas

www.divus.com.br

Pgina 77

Divus Carreira do Programador Bancos de Dados

www.divus.com.br

Pgina 78

Divus Carreira do Programador Bancos de Dados

7 Alguns SGBD disponveis no mercado


Existem diversas alternativas para quem deseja exercitar os conhecimentos em banco de
dados ou para quem deseja criar solues sem fins lucrativos ou com finalidade aprendizado.
Muitos fabricantes de SGBD disponibilizam verses livres de seus softwares. A deciso sobre
qual delas utilizar passa por vrios critrios, permanecendo em primeiro lugar a saudvel
ditadura do mercado. Voc deve aprender ou tornar-se especialista naquilo pelo que o
mercado anseia.
Consideraes tcnicas tambm podem participar da escolha por uma ferramenta de
aprendizado e testes. Alguns SGBDs limitam, na sua verso livre, a quantidade mxima de
dados armazenados por banco de dados, outras impem diferentes limitaes de
caractersticas tcnicas e funcionalidades, somente presentes nas verses pagas.
Diversos fabricantes tambm autorizam a distribuio de verses de seus SGBDs, mesmo em
atividades nas quais o programador v obter lucro. A alterao do cdigo fonte dos SGBDs
tambm autorizada por alguns fabricantes. imprescindvel conhecer os contratos de
utilizao e distribuio de cada fabricante, para fazer a escolha mais acertada e no ferir a
tica.
Vejamos algumas dessas possibilidades:

7.1 Firebird
Banco de dados relacional amplamente compatvel com ANSI SQL, com rodando em
Linux, Windows e outras plataformas, oferece suporte a stored procedures e triggers
e totalmente grtis para uso comercial inclusive. Conforme a definio do prprio
pessoal responsvel pelo Firebird, ele livre como um pssaro. Eles pretendem
significar que verses podem ser construdas a partir do cdigo fonte
disponibilizado, desde que a nova verso seja disponibilizada segundo os mesmos princpios de
gratuidade da verso original.
Tambm usam a expresso grtis como cerveja grtis, para significar que no sero cobradas
taxas, registros no sero requeridos e nenhum tipo de licena ser necessrio, mesmo que o
Firebird seja includo em uma aplicao comercial e distribudo como parte dela.
Segundo sua documentao, o firebird suporta bancos de dados maiores que 20 terabytes,
alm de contar com as seguintes caractersticas:

Suporte a multi-usurio nativo


Instalador nativo para Windows em diversas linguagens
Pode rodar como servio ou como aplicativo
Verses RPM ou tar.gz para Linux
Possibilidade de criao de instaladores 100% silenciosos (transparantes)
Possibilidade de desenvolvimento de aplicaes somente leitura (servidor e banco
podem estar em CD, DVD, etc).
Uso reduzido de recursos, com instalao mnima requerendo 4 Mb e instalao
standard de 33 Mb)

www.divus.com.br

Pgina 79

Divus Carreira do Programador Bancos de Dados

7.2 Sql Server


Este tradicional e amplamente utilizado SGBD da Microsoft na sua verso 2014,
assim como nas anteriores, apresenta limitao quanto ao tamanho mximo
dos bancos de dados, agora aumentado para 10 GB. Esse tamanho mximo no
chega a ser um impedimento para a maioria das aplicaes com que estudantes
e iniciantes trabalham. Tambm possvel distribuir legalmente as aplicaes
baseadas nessa ferramenta, mesmo para finalidades comerciais e obteno de
lucro financeiro.
Se desejar aproveitar o conhecimento adquirido nas verses gratuitas do SQL Server o
desenvolvedor (ou seu patrocinador) vai precisar desembolsar significativa soma para
aquisio das modalidades de licena da verso paga, um preo a se pagar pelo reconhecido
suporte de alta qualidade, disponibilidade de informaes e confiabilidade dos produtos da
gigante Microsoft.
Algumas caractersticas do Sql Server na sua verso 2014:

Uso otimizado de memria


Flexibilidade para executar cargas de trabalho do SQL Server no local ou na nuvem
Integrao com diversos tipo de nuvens
Diversos tipos de assistentes para guiar processos complexos
Backups criptografados
Estimativa de cardinalidade melhorada para avaliao da qualidade de planos de
consultas

7.3 Oracle
Tecnologia de bancos de dados mais popular (no necessariamente o mais
utilizado) do mundo, assim como seu concorrente mais prximo, o Sql
Server, vem desenvolvendo novas funcionalidades a cada edio e tambm
tem buscado, utlimamente, investir na capacidade de gerencias grandes
massas de dados em nuvem, uma tendncia mundial das aplicaes, motivda
pelo crescimento do volume de dados e pela necessidade de
compartilhamento de informao.
Por se tratar de uma soluo estremanete profissional, alm das melhorias esperadas pra cada
nova verso de um SGBD, como disponibilidade, escalbilidade, gerenciamento de
armazenamento, segurana e reduo de custos de oprao, a verso 12c d ainda uma
ateno especial ao gerenciamento de dados em nuvem, ao atendimento necessidade de
dados muito grandes (big data) e tambm ao trabalho com dados em memria para agilizao
de transaes.
A integrao perfeita entre o software e hardware produzidos pela Oracle, ao lado da
facilidade de integrao com Java, tambm so aspectos a considerar, quanto se dipe de um
oramento capaz de suportar esse tipo despeza.

www.divus.com.br

Pgina 80

Divus Carreira do Programador Bancos de Dados

7.4 PostgreSQL
Alternativa muito profissional para quem tem ormento baixo e mdias
necessidades. Parece ser muito claro o fato de que algo com amplo padtrocnio,
como so so SGBD da Oracle e da Microsoft, tem condies de investimento
em pesquisa para melhoria e correo de erros muito aumentadas. Isso no
significa, no entanto, que solues baseadas em patrocnio voluntrio, tenham
que deixar a desejar na qualidade. O PostgreSQL, livre para uso, cpia,
modificao e distribuio uma poderosa ferramenta para pequenos e
mdios negcios. Na sua verso beta 2014-07-24, traz as seguintes caractersticas:

Tamanho ilimitado do banco de dados


Tamanho mximo das tabelas 32 TB
Tamanho mximo de registro 1.6 TB
Tamanho mximo de campo 1 GB
Nmero ilimitado de registros por tabela
250- a 1600 de colunas por tabela, dependendo do tipo de dado
Inlimitados ndices em uma tabela

7.5 Ferramentas grficas para manipulao e administrao de bancos de


dados
Criar e manter um banco de dados no so tarefas fceis de realizar. Entre outras habilidades,
exigido um slido conhecimento da linguagem SQL, da implemtnaes de funes e
particularidades da sintaxe do SGBD que se pretende utilizar. A escrita de instrues top til
como inevitvel. Mesmo antes de se tornar um prfissional conhecimentos slidos da liguagem
SQL podem ser ties no momento da seleo e dos testes para postos de trabalho. Apesas do
conhecimento de SQL ser assim to til, tarefas repetitivas ou corriqueiras podem ser
facilitadas por ambientes grficos especialmente criados para esta tarefa.
importante no confundir a ferramenta grfica com o SGBD. Conforme j dissemos o
ambiente grfico um facilitador do trabalho e depende do SGBD tanto quanto qualquer
aplicao.
Muitos diferentes ambientes grficos para administrao de bancos de dados esto
disponveis para download, alguns livres de licena e outros pagos. O uso dessas ferramentas
de administrao est mais ligado aos SGBD livres ou gratuitos. SGBD como Sql Server ou
Oracle oferecem suas prprias ferramentas de administrao, altamente integradas,
dispensando a busca por solues alternativas.

www.divus.com.br

Pgina 81

Divus Carreira do Programador Bancos de Dados

www.divus.com.br

Pgina 82

Divus Carreira do Programador Bancos de Dados

Captulo 8

Movimentao de bancos de dados entre servidores

www.divus.com.br

Pgina 83

Divus Carreira do Programador Bancos de Dados

www.divus.com.br

Pgina 84

Divus Carreira do Programador Bancos de Dados

8 Transferncia de bancos de dados entre servidores


Nem sempre o servidor em que um banco de dados modelado e sofre as primeiras
manipulaes de dados o mesmo local onde dever permanecer durante sua utilizao.
prtica comum que o desenvolvedor ou sua equipe inicie o projeto em um ambiente e precise
levar o baco de dados para outro local, a fim de que sirva ao propsito para o qual foi criado.
Vejamos como efetuar essa transio.

8.1 Exportando um banco de dados


Muitas ferramentas de administrao de bancos de dados, oferecem suporte gerao de
scripts, nos quais esto contidas as intrues capazes de reconstruir objetos do banco de
dados e, aps a reconstruo, incuir os dados j existentes. A gerao desses scripts
chamada de exportao de banco de dados, exatamente porque os scripts gerados em um
SGBD podem ser levados at outro SGBD, a fim de reproduzir um banco de dados existente no
primeiro. O SGBD onde foi gerado o script chamado de origem e aquele onde o script ser
gerado chamado de destino.
No SQL Wordbench existe uma ferramenta capaz de fazer essa exportao: Veja o passo-apasso:
Expanda o menu Server e ecolha a opo Data Export

www.divus.com.br

Pgina 85

Divus Carreira do Programador Bancos de Dados


Na tela seguinte voc deve fornecer informaes sobre a exportao que deseja realizar:

Aps clicar no boto Start Export uma tela ser exibida solicitando o fornecimento da senha
com privilgios para fazer a exportao. Digite a senha, caso haje, e prossiga.

Uma barra de progresso ser exibida indicando a execuo da tarefa. Ao final do


preenchimento completo da barra, navegue at a pasta onde o arquivo foi gerado e copie-o
em uma mdia da sua preferncia, para o servidor onde est localizado o SGBD de destino, ou
armazene a mdia em lugar seguro, caso destine-se a backup.

1.3. Importanto contedo de um banco de dados a partir de um arquivo de Script


De posse de um arquivo gerado a partir dos procedimentos descritos anteriormente, possvel
recuprar os dados do banco de origem para o banco de destino. Vejamos como fazer isso:

www.divus.com.br

Pgina 86

Divus Carreira do Programador Bancos de Dados


O primeiro passo criar um novo banco de dados para o destino com o nome igual ao bano de
origem. Clique com o boto direito do mouse no painel de navegao do lado esquerdo da
janela no SQL Workbench e escolha a opo Create Schema...

Nas telas seguintes defina o nome do banco de dados de clique em Apply.

www.divus.com.br

Pgina 87

Divus Carreira do Programador Bancos de Dados


As telas seguintes sero apenas confirmaes do processo de criao do novo banco.
Com o novo banco criado de um duplo clique sobre ele no painel de navegao esquerda da
janela, para torn-lo o banco atualmente em uso. O nome do banco deve ficar em destaque,
aps receber o duplo clique.

Agora escolha a opo Data Import no menu Server.

www.divus.com.br

Pgina 88

Divus Carreira do Programador Bancos de Dados


Na tela que ser mostrada, insira as informaes sobre a importao que deseja realizar.

Aps clicar em Start e digitar a senha, se houver, na janela que exibida, uma barra de
progresso ser mostrada. Quando a barra estiver completa, os dados estaro disponveis no
novo banco de dados. Talvez seja necessrio clicar com o boto direito no navagador ao lado
esquerdo da janela e escolher a opo Refresh All, a fim de que as novas caractersticas do
banco sejam exibidas.

www.divus.com.br

Pgina 89

S-ar putea să vă placă și