Sei sulla pagina 1di 10

Aprendendo a programar em SQL

Descrio da aula
De uma forma simples e fcil, voc vai aprender o que so tabelas, linguagem de
definio de dados, linguagem de manipulao de dados e os comandos mais bsicos de
SQL.

Introduo
Nunca entendi o porque das pessoas complicarem algo to simples como a SQL, pois
desde nossa infncia ns aprendemos a criar, ler, atualizar e deletar informaes de todo
tipo, com vrias regras e formatos. Porque no pegamos um exemplo de nossas
brincadeiras mais divertidas de fazer com os nossas primas e primos sozinhos em um
dia de chuva sem internet? Estou falando do STOP.
Se voc no sabe de qual brincadeira se trata, entre neste
link: http://www.alienado.net/brincadeiras-de-stop-no-papel/. De todas as brincadeiras
que j joguei no papel, STOP uma das minhas preferidas. Mas o que isto tem de haver
com banco de dados e SQL? Calma que eu j chego l.

S vale nome de cidade do Brasil hein!?


Como todo mundo sabe, antes de iniciar a brincadeira, ns escolhemos quais colunas
ns vamos escrever durante o jogo (Nome, CEP, Fruta, Cor, Carro e a minha favorita
MS). Cada coluna tem suas regras como por exemplo a coluna fruta tinha que ser
um nome de uma FRUTA, portanto, morango no fruta e no podia ser escrito.
Quando todas as colunas so colocadas no papel e as regras de cada uma acertada
entre todos ns iniciamos a brincadeira. Agora repare na Figura 1 e me diga: isto ou
no uma tabela?

Figura 1 Adedanha ou STOP Fonte:


http://minhananne.blogspot.com.br/2010/10/brincadeira-adedanha.html
Ento voc pode ver que desde nossa infncia ns criamos colunas de coisas e
elaboramos regras para elas. A linguagem de modelagem de dados (DDL) faz
exatamente isto. Cria e elabora as colunas onde sero estabelecidas regras para cada
uma delas. Simples no?
lgico que as colunas em um banco de dados tem muito mais propriedades que nossa
brincadeira de infncia, porm no foge da mesma linha de pensamento: O que vamos
escrever (Coluna Fruta) e o que ser escrito (Somente frutas).

O que podemos aprender com isto?


Agora que voc j sabe o que a DDL e para o que ela serve, vamos criar alguns
diagramas para exemplificar. Se voc ainda no sabe criar diagramas em banco de
dados eu sugiro que leia o #5 Eu Respondo: Criando diagramas de banco de dados.
Modelei a tabela da figura 1 utilizando o brModelo. Veja abaixo como ficou a gerao
dos esquemas:

Figura 2 Esquemas conceitual, lgico e fsico do jogo STOP


No brModelo ns s precisamos nos preocupar com o esquema conceitual, pois os
outros dois so gerados automaticamente. Agora vamos ver o que significa cada linha
do comando SQL abaixo:
CREATE TABLE stop (
codigo_stop INTEGER PRIMARY KEY,
letra CHAR,
nome VARCHAR(25),
carro VARCHAR(25),
lugar VARCHAR(25),

objeto VARCHAR(25),
animal VARCHAR(25),
fruta VARCHAR(25),
cor VARCHAR(25),
pts DOUBLE PRECISION
)

1. A primeira linha CREATE TABLE stop ( se refere criao de uma tabela


com o nome de stop. Note que nesta linha aberto um parnteses que s
fechado no final do comando.
2. A segunda linha se refere chave primria da tabela. um identificador de cada
linha da tabela, como se fosse um C.P.F de cada linha. Para entender o que
chave primria sugiro que leia o #5 Eu Respondo: Criando diagramas de banco
de dados.
3. A terceira linha se refere coluna (que em banco de dados ns chamamos
tambm de campo) letra. A palavra char logo em seguida define o tipo do
campo, ou seja, somente um carcter (uma letra).
4. A quarta linha se refere ao campo carro e seu tipo varchar. O tipo varchar
abria vrios caracteres, que so delimitados por parnteses, ou seja, varchar(25)
significa que este campo pode ter no mximo 25 caracteres;
5. Da quinta at a dcima linha ns temos outras colunas com outros tipos de
categorias do stop, todas com o mesmo tipo de dado varchar(25).
6. Na dcima primeira linha ns temos o campo pts que tem seu tipo double
precision. Este tipo de dado abrange nmeros decimais com ou sem vrgula
(por exemplo 5 ou 5.1234).
7. Na ltima linha temos o parnteses fechando o comando da criao da tabela,
em outras palavras, delimitando o comando CREATE TABLE. Quando se tem
mais comando abaixo deste, usa-se tambm um ponto e vrgula aps o
parnteses.
Se voc entendeu os comando acima citados parabns! Voc j sabe o que DDL e
como utiliz-la. Agora vamos voltar nossa brincadeira e ver se aprendemos mais
alguma coisa dela.

Jogando o stop
Depois de escolher a letra no dedo claro, comea a brincadeira. Se a letra for C
tranquilo mas se for H fica bem difcil. Eu sempre escrevia primeiro o nome, depois a
filme, CEP, carro, Objeto, MS e o resto. Porm quando via que algum escrevia o
mesmo nome que o meu eu logo trocava para ganhar mais pontos. Se voc escrevesse
besteira perdia pontos ento era bom deletar antes que algum gritasse STOP. Depois
era s rir das coisas que escreviam para ganhar mais pontos, porque na contagem final
valia mais os nomes diferentes.
Todo este negcio de escrever, ler, mudar e apagar as coisas tm um nome em banco de
dados e este nome CRUD que em ingls significa respectivamente:

1. Create (Criar). Em SQL significa escreva alguma coisa em alguma tabela.


Mais especificadamente insira dentro da tabela fruta na coluna nome o
valor Mamo, que traduzindo para a
SQL
INSERT INTO fruta (nome) VALUES ("Mamo")

2. Uma linha criada chamada de novo registro ou nova tupla.


3. Read (Ler). Em SQL significa leia alguma coisa em alguma tabela. Mais
especificadamente Selecione a coluna nome da tabela fruta, que
traduzindo para a SQL
SELECT fruta.nome FROM fruta

4. a funo mais utilizada do CRUD, que pode tambm ter a propriedade


WHERE para especificar aonde ns queremos procurar na tabela. Por exemplo
se tivssemos uma tabela de nome pessoa com os campos nome e sexo.
Para procurar os nomes das pessoas do sexo feminino ns usaramos desta
forma:
SELECT pessoa.nome FROM pessoa WHERE pessoa.sexo = "feminino"

5. Update (Atualizar). Em SQL significa mude o valor da alguma coluna em


alguma tabela. Mais especificadamente Atualize da tabela fruta na coluna
nome com o valor melancia onde nome igual a Mamo, que
traduzindo para SQL
UPDATE fruta SET nome="melancia" WHERE nome="Mamo"

6. Delete (Deletar). Em SQL significa apague da tabela fruta onde os valores


nome so iguais a Mamo, que traduzindo para SQL
DELETE FROM fruta WHERE nome="Mamo"

Veja que no fazemos nada alm do que brincarmos com as tabelas, criando, lendo,
mudando e apagando linhas, assim como fazemos no STOP. Desta forma o CRUD
nada mais que princpios bsicos de armazenamento de dados atravs da linguagem
SQL. E adivinha o que o CRUD utiliza? A linguagem de modelagem de dados (DML),
que nada mais uma linguagem para modelar os dados, isto , a DML utilizada para
criar, ler, atualizar e deletar dados.
Observa-se desta maneira que a DML e DDL so conceitos to simples que ns
utilizamos at em uma brincadeira de adolescente. E a causa do seu sucesso
exatamente a sua simplicidade e facilidade no gerenciamento de bancos de dados.
claro que podemos fazer consultas mirabolantes, inseres de valores virtuosas, proezas
inimaginveis na SQL mas em resumo ela to fceis e simples como uma brincadeira.

Vamos ao exerccio
Um dos leitores do blog mandou um exerccio que utiliza todos os conceitos acima.
um exemplo de banco de dados de uma escola, onde tem tabelas de alunos, cursos,
disciplinas, professores etc. Na figura 3 ns temos o modelo conceitual do exerccio.

Figura 3 Modelo conceitual de banco de dados de uma escola


Parece difcil de entender no incio mas vamos dar uma olhada entidade por entidade
(uma tabela no banco de dados chamada de entidade no modelo entidaderelacionamento), relao por relao (relacionamentos das tabelas no banco so feitos
atravs de chaves primrias e chaves estrangeiras) para vermos o que que h.
1. Por primeiro a entidade alunos. Esta entidade contm os dados bsicos de um
aluno. Se voc comparar com a entidade professores voc vai perceber alguns
campos em comum (nome, email e senha). No que repetir campos est errado,
porm poderamos fazer uma melhora neste diagrama. Porm como o exerccio
foi dado para ser feito desta maneira ns no vamos mudar.
2. Por segundo a relao faz uma. Repare na seta logo acima da relao e veja o
que ela est dizendo que a entidade alunos faz uma matricula. muito mais
fcil entender o papel de cada entidade e relaes se existem nomes simples e
adequados para cada tipo de elemento, contando tambm com a direo da seta.
3. Por terceiro a entidade matriculas. Ela serve especialmente para cadastrar uma
matrcula feita pelo aluno, por isto tambm temos nela o campo ativa e
data_cadastro que nos ajudam a identificar quando o aluno fez a matrcula e se
o aluno ainda est em uma situao regular.
4. Por quarto a relao inscreve em um. Note que pela direo da seta ns
podemos entender que a entidade matricula inscreve em um curso, em outras
palavras, que ao aluno fazer uma matrcula ele inscrito em um curso.

5. Por quinto a entidade cursos. Note que nesta entidade somente h dois campos:
o idcurso que nada mais que uma identificao da linha da tabela e o campo
nome que vai conter o nome do curso. Na vida real uma entidade pode variar o
nmero de campos que em mdia so de 5 a 50 campos. Porm como este
exemplo didtico ns temos poucos campos, somente o essencial para haver
um mnimo de consistncia da base da dados. Para entender mais sobre o
conceito de consistncia em banco de dados sugiro que leia a aula Banco de
Dados Conhecimento Bsico.
6. Por sexto a entidade associativa disciplinas_cursos. Uma entidade associativa
acontece quando duas entidades possuem uma relao de muitos para muitos,
neste exemplo os cursos podem ter muitas disciplinas e uma disciplina pode
estar em muitos cursos. Para entender melhor a entidade associativa sugiro que
leia o #5 Eu Respondo: Criando diagramas de banco de dados.
7. Por stimo a entidade disciplinas. Ela serve para registrar as disciplinas
oferecidas na escola, porm esta escola s oferece um conjunto de disciplinas
em um determinado curso.
8. Por oitavo a relao ministra. Observe que pelo sentido da seta a entidade
professor ministra uma disciplina. O que parece bvio pelo diagrama pode ficar
muito complicado se for somente por linha de cdigo, por isto to importante
desenhar e planejar todo o banco de dados antes de efetivamente constru-lo.
Aps descritos todos os elementos do diagrama acima a figura 4 ilustra o que acontece
quando gerado o modelo lgico. Eu alterei um pouco o modelo para ficar mais
compreensvel, porm foram poucas alteraes que no afetam um estudo dos arquivos
da aula.

Figura 4 Modelo lgico do banco de dados da escola


Note que as relaes sumiram dando lugar s chaves primrias (chaves em amarelo) e
chaves estrangeiras (chaves em cinza). Neste modelo tambm podemos ver o tipo de
dado que cada campo possui e as cardinalidades entre as tabelas.
Este diagrama o mais prximo da estrutura de uma tabela de um banco de dados
relacional, porm ainda no o cdigo em si. No brModelo existe a opo de gerar o
cdigo fsico, que nada mais que a prpria DDL entrando em ao para criar a tabela e
definir suas colunas.

Depois de entender as linguagens e os diagramas que so exigidos no exerccio no


prximo tpico esto as questes dos exerccios e a resoluo de cada uma delas.

Questes e resoluo
As questes do exerccio esto divididas por tpicos sendo que o primeiro pargrafo a
resoluo do exerccio em seguida a explicao da resposta.

A Envie O Comando SQL Que Cria O Seguinte Modelo Dentro Do Banco


De Dados, Junto Com Os Comandos Para Inserir, Atualizar, Excluir E
Selecionar Usurios
-- Primeira parte: criacao do modelo dentro do banco de dados
CREATE TABLE alunos (
nome VARCHAR(75),
email VARCHAR(75),
senha VARCHAR(10),
cpf VARCHAR(11),
idpessoa INTEGER PRIMARY KEY
)
CREATE TABLE matriculas (
idmatricula INTEGER PRIMARY KEY,
ativa INTEGER,
data_cadastro DATE,
idpessoa INTEGER,
idcurso INTEGER,
FOREIGN KEY(idpessoa) REFERENCES alunos (idpessoa)
)
CREATE TABLE cursos (
idcurso INTEGER PRIMARY KEY,
nome VARCHAR(25)
)
CREATE TABLE disciplinas (
iddisciplina INTEGER PRIMARY KEY,
nome VARCHAR(75),
idprofessor INTEGER
)
CREATE TABLE professores (
idprofessor INTEGER PRIMARY KEY,
nome VARCHAR(75),
email VARCHAR(75),
senha VARCHAR(10)
)
CREATE TABLE disciplinas_cursos (
iddisciplina INTEGER,
idcurso INTEGER,
iddisciplina_cursos INTEGER PRIMARY KEY,

FOREIGN KEY(iddisciplina) REFERENCES disciplinas (iddisciplina),


FOREIGN KEY(idcurso) REFERENCES cursos (idcurso)
)
ALTER TABLE matriculas ADD FOREIGN KEY(idcurso) REFERENCES cursos
(idcurso)
ALTER TABLE disciplinas ADD FOREIGN KEY(idprofessor) REFERENCES
professores (idprofessor)
-- Segunda parte: CRUD da tabela usuarios
-- Inserir (Create)
INSERT INTO alunos (nome,email,senha,cpf) VALUES
("Jose","jose@exemplo.com","1234","93472312251")
-- Atualizar (Update)
UPDATE alunos SET nome="Jose
Medeiros",email="Jose@exemplo.com",senha="4312",cpf="12578569845"
WHERE nome="Jose"
-- Excluir (Delete)
DELETE FROM alunos WHERE nome="Jose Medeiros"
-- Selecionar usurios (Read)
SELECT * FROM alunos

Explicao da questo A
A primeira parte da questo trata-se exclusivamente da linguagem de definio de dados
(DDL). Atravs dela ns criamos e modelamos os dados dentro do banco de dados,
transformando o cdigo em uma tabela.
A segunda parte abrange o CRUD que utiliza a linguagem de modelagem de dados
(DML) para fazer as operaes com os dados j citadas nesta aula. As prximas
questes tratam somente da leitura dos dados utilizando consultas SQL, portanto esto
includas na linguagem de manipulao de dados.

B. Enviar O Comando De Seleo Que Permita Visualizar As Disciplinas


De Um Determinado Aluno.
SELECT
d.nome
FROM
disciplinas d
INNER JOIN disciplinas_cursos dc ON (d.iddisciplina =
dc.iddisciplina)
INNER JOIN cursos c ON (dc.idcurso = c.idcurso)
INNER JOIN matriculas m ON (c.idcurso = m.idcurso)
INNER JOIN alunos a ON (m.idpessoa = a.idpessoa)
WHERE
a.nome = 'Jose'

Explicao da questo B
Observa-se que a tabela aluno teve que passar por vrias outras tabelas at chegar na
tabela disciplina. O tipo de ligamento utilizado foi o INNER JOIN pela sua

simplicidade. Para encontrar novas formas de ligar tabelas sugiro que leia a aula
Banco de Dados Conhecimento Bsico.

C. Enviar O Comando De Seleo Que Permita Encontrar Os Professores


De Um Determinado Aluno.
SELECT
p.nome
FROM
professores p
INNER JOIN disciplinas d ON (p.idprofessor = d.iddisciplina)
INNER JOIN disciplinas_cursos dc ON (d.iddisciplina =
dc.iddisciplina)
INNER JOIN cursos c ON (dc.idcurso = c.idcurso)
INNER JOIN matriculas m ON (c.idcurso = m.idcurso)
INNER JOIN alunos a ON (m.idpessoa = a.idpessoa)
WHERE
a.nome = 'Jose'

Explicao da questo C
Observa-se que praticamente a mesma coisa que a questo anterior porm com mais
uma ligao da tabela professor. O INNER JOIN timo pois liga as tabelas e as
indexa direitinho, porm este mtodo prejudica muito na performance, sendo
recomendvel utilizar outras formas de obter os dados. Porm como se trata de um
exerccio que visa uma maior clareza sacrificando a performance, no tem problema
algum em us-lo.

D. Enviar O Comando De Seleo Que Permita Selecionar Os Alunos De


Um Determinado Professor.
SELECT
a.nome
FROM
alunos a
INNER JOIN matriculas m ON (a.idpessoa = m.idpessoa)
INNER JOIN cursos c ON (m.idcurso = c.idcurso)
INNER JOIN disciplinas_cursos dc ON (c.idcurso = dc.idcurso)
INNER JOIN disciplinas d ON (dc.iddisciplina = d.iddisciplina)
INNER JOIN professores p ON (d.idprofessor = p.idprofessor)
WHERE
p.nome = 'Jose'

Explicao da questo D
A resoluo desta questo praticamente a mesma coisa da resoluo anterior,
mudando apenas as posies das tabelas. Outra propriedade utilizada para a

simplicidade do cdigo os aliases (apelido) das tabelas. Isto significa que toda vez que
eu colocar alguma letra em frente algum nome de uma tabela, esta letra vai referenciar
esta tabela. Por exemplo: professores PR. O aliase PR est referenciando a tabela
professores.

Potrebbero piacerti anche