Escolar Documentos
Profissional Documentos
Cultura Documentos
1
Autor: Jeferson Marques Cunha
Aconselho você caro amigo leitor à fazer todos os comandos que virão abaixo sempre digitando e não
utilizar o copiar e colar.
http://www.oracle.com/technetwork/products/express-edition/downloads/index.html
Nessa mesma tela você também pode baixar o Oracle SQL Developer ou baixar um trial do PLSQL Developer 10 que é
a ferramenta que eu utilizo, é muito profissional e com muitos recursos, acesse nesse endereço =>
http://www.allroundautomations.com/plsqldev.html?gclid=COeGyPqy0LkCFZF7QgodQhEAZA
Instalar o Oracle XE para que possamos começar a brincar com a criação do nosso banco de dados e com a utilização
de comandos SQL.
Vou mostrar passo-a-passo a instalação do Oracle XE, essa instalação é muito simples e não tem
segredo, mesmo porque é um ambiente de treinamento nosso.
2
Autor: Jeferson Marques Cunha
3
Autor: Jeferson Marques Cunha
Digitar a senha do usuário sys e system, será utilizado posteriormente para acessar o banco.
4
Autor: Jeferson Marques Cunha
5
Autor: Jeferson Marques Cunha
No caminho abaixo temos o arquivo que contém as strings de conexão com o nosso banco de dados, o
arquivo tnsnames.ora, edite esse arquivo e verifique que já teremos uma string chamada XE configurada e
pronta para ser utilizada.
6
Autor: Jeferson Marques Cunha
7
Autor: Jeferson Marques Cunha
Na tela abaixo, se o caminho da instalação aparecer C:\Program Files (x86) ou Arquivos de Programas
(x86), substitua eliminando o (x86), conforme tela abaixo.
8
Autor: Jeferson Marques Cunha
Pronto, agora que já está instalado o PLSQL Developer, vamos começar a colocar a mão na massa.
Você vai acessar da seguinte maneira, usuário sys, a senha que você digitou na instalação, Database=XE
e alterar o Connect as para SYSDBA, conforme tela abaixo.
9
Autor: Jeferson Marques Cunha
Clique na pasta branca no canto esquerdo superior e depois clique em SQL Window.
Após fazer isso vamos começar a executar os nossos primeiros comandos SQL.
Dar permissão para o usuário logar e vamos dar permissão de DBA porque precisaremos fazer vários
procedimentos como dropar tabelas, criar tabelas, fazer updates. A permissão poderia ser específica para
cada um desses itens que citei acima, mas vamos colocar DBA para termos permissão de fazer tudo.
10
Autor: Jeferson Marques Cunha
Após digitar o commando aperte F8 para executar o comando. Pronto, o usuário foi criado e agora você já
pode logar com ele.
Vamos criar nossa primeira tabela no banco de dados com o comando abaixo.
Será uma tabela onde iremos cadastrar as cidades e seus respectivos códigos.
Aperte F8.
Observe que o campo ID_CIDADE foi criado como primary key not null, o que isto significa?
R: Ele está querendo dizer que será um campo chave e que não poderá ser nulo. O campo chave significa
que não poderemos ter dois códigos iguais.
Ex: Não poderemos ter duas cidades cadastradas com o código 1 por exemplo.
Observe que na frente do ID_CIDADE tem um tipo NUMBER(4), o que isto significa?
R: Ele está querendo dizer que o campo onde vai estar o código da cidade pode ter até 4 dígitos
numéricos ou seja, você poderá cadastrar 9999 cidades.
11
Autor: Jeferson Marques Cunha
R: Ele está querendo dizer que o campo onde vai estar a descrição da cidade ou seja o nome da cidade,
pode conter até 100 caracteres alfanuméricos.
O tipo Date, que não foi mostrado aí, que é a data, é colocado somente DATE na frente do campo.
Depois de criada a tabela, você já pode fazer sua consulta para verificar se está tudo ok.
Aperte F8.
Após executar esse comando aparecerá uma tela como esta abaixo.
O * no select acima significa que estou querendo trazer todos os campos da tabela CIDADES.
Existe uma maneira de trazermos somente alguns campos, como mostro no select abaixo.
12
Autor: Jeferson Marques Cunha
Basta colocar o nome do campo que você quer trazer antes da cláusula FROM, dessa forma se você
quiser ver somente o nome das cidades, sem o código.
Observe que não existe nenhuma cidade cadastrada, precisamos agora aprender a inserir as cidades aí
dentro dessa tabela, esse será o nosso próximo passo.
COMMIT;
Sempre rodar um comando de cada vez, marque a linha do insert e aperte F8 e depois marque o commit e
aperte F8.
O comando commit serve para gravar a informação no banco, se não der um commit a informação não
será gravada, o banco automaticamente fará um rollback ou seja, voltará ao estado original.
Agora a cidade de Barretos já foi inserida no nosso banco de dados dentro da tabela cidades.
13
Autor: Jeferson Marques Cunha
Nesse momento você já conseguiu inserir seu primeiro registro no banco de dados, Parabéns!!!
EXERCÍCIOS:
1 – Crie uma tabela chamada Clientes e insira nessa tabela os seguintes campos:
• CLIENTE_ID com tipo number(5), lembrando que esse deve ser uma chave primária e não pode
ser nulo.
• NOME do tipo varchar2(100);
• RAZAO_SOCIAL do tipo varchar2(100);
• CPF do tipo number(11);
• CNPJ do tipo number(14);
• DT_CADASTRO do tipo Date;
CLIENTE_ID =1
NOME = SEU NOME
RAZAO_SOCIAL= SEU NOME E SOBRENOME
CPF = 12345678900
CNPJ = 12345678000100
DT_CADASTRO = DATA DO DIA
Obs: A data deve ser inserida nesse formato e entre aspas simples: ‘DD/MM/YYYY’;
DD = DIA
MM=MÊS
YYYY=ANO
14
Autor: Jeferson Marques Cunha
Vocês se recordam que existe um registro gravado na tabela CIDADES com o código 1 e o nome da
cidade BARRETOS, correto?
Antes de deletarmos, vamos inserir mais uma cidade em nossa tabela para exemplificarmos melhor.
COMMIT;
Agora vamos rodar uma consulta para nos certificarmos que existem realmente 2 cidades cadastradas.
Vamos agora apagar somente a cidade que contém o código = 1, veja o comando:
COMMIT;
Faça um select para conferir como ficou a tabela cidades depois do comando delete.
Explicação: Aqui nesse comando delete, nós colocamos a cláusula WHERE que significa “ONDE”
para selecionar somente o ID_CIDADE = 1 para ser apagado.
15
Autor: Jeferson Marques Cunha
Como sabemos nossa tabela de cidades ficou somente com a cidade de Goiânia que é o código 2.
Vamos agora alterar esse registro e colocar essa cidade com o nome de Barretos e ainda alterar o código
dela para 1.
UPDATE CIDADES
SET ID_CIDADE = 1,
DESC_CIDADE = 'BARRETOS'
WHERE ID_CIDADE = 2
AND DESC_CIDADE = 'GOIANIA'
Obs: Como o campo ID_CIDADE é uma chave, ele nunca será repetido, portanto eu poderia ter feito
o update somente com o ID_CIDADE. Não teria como existir uma outra cidade com o código 2 com
outro nome.
UPDATE CIDADES
SET ID_CIDADE = 1,
DESC_CIDADE = 'BARRETOS'
WHERE ID_CIDADE = 2
Explicação: Estamos fazendo um update que significa “ALTERAR”, o comando set é para
“SETARMOS” os novos valores que vamos querer e a cláusula where novamente selecionando a
cidade com o código 2 e a cláusula AND que significa “E” juntamente com a descrição da cidade
que é “GOIANIA”.
Isso faz com que ele selecione o código = 2 e a cidade de Goiânia e mude esse registro para
código=1 e a cidade passa a ser Barretos.
Execute uma consulta para verificar como ficou a tabela cidades agora.
Para que possamos iniciar esse trabalho, precisaremos criar uma nova tabela chamada ESTADOS.
Sintaxe:
17
Autor: Jeferson Marques Cunha
Nota: - Não é possível alterar uma coluna contendo nulos para uma constraint
- Para alterar uma restrição, esta deve ser eliminada e então pode-se adicionar
as alterações desejadas, como uma nova restrição.
Aqui estamos inserindo o campo ID_ESTADO na tabela CIDADES, esse campo é que vai identificar que
uma cidade pertence à um certo estado, esse campo não pode ser nulo, por isso o parâmetro not null.
Vamos deletar todos os registros da tabela cidades para que possamos fazer a criação do campo
corretamente.
Agora precisamos criar uma foreign key para o campo ID_ESTADO da tabela CIDADES para que possa se
relacionar com o campo da ID_ESTADO da tabela ESTADOS.
Isso significa que toda cidade que iremos cadastrar deve conter o código do estado.
Por exemplo, o ID_ESTADO = 25 pertence ao estado de SP.
Agora para você saber como isso funciona, vamos tentar inserir uma cidade com um ID_ESTADO que não
existe na tabela ESTADOS. Vamos ao teste.
Serão vários registros, talvez não mostre todos na tela pra você, então existe uma seta verde que expande
os registros para que possa visualizar todos.
18
Autor: Jeferson Marques Cunha
Agora tente inserir um registro na tabela CIDADES onde o ID_ESTADO não exista na tabela ESTADOS.
Será exibida essa mensagem de erro informando que ele não localizou o registro da chave mãe, ou seja
da tabela MASTER ou PAI como queiram falar.
O ID_ESTADO 35 que foi colocado no insert não existe na tabela estados como vocês puderam comprovar
com o select que foi feito na tabela ESTADOS.
Agora com o ID_ESTADO=25 que pertence ao Estado de SP a cidade de Barretos foi inserida
corretamente, confirme:
Vamos cadastrar mais algumas cidades para podermos fazer o select unindo duas tabelas.
SELECT C.DESC_CIDADE,
E.UF
FROM CIDADES C,
ESTADOS E
WHERE C.ID_ESTADO = E.ID_ESTADO
OBS: Observe que sempre que existe duas tabelas deve haver uma ligação da chave primária com a sua
chave de relacionamento WHERE C.ID_ESTADO = E.ID_ESTADO. Isso é obrigatório para você não ter
problemas de trazer mais informações do que você necessita.
Rode esse select e veja o resultado.
Explicação: Observe que na frente do CIDADES tem uma letra C.
Essa letra é como se fosse um apelido para a tabela cidades.
Utilizo isso para ficar mais fácil de saber de qual tabela está vindo os campos.
Então quando eu coloco C.DESC_CIDADE, significa que estou trazendo o campo DESC_CIDADE da
tabela CIDADES. A mesma coisa acontece com o Estado.
Aqui observamos a importância das foreign Keys ou chaves de relacionamento.
EXERCÍCIOS 2
1 – Criar uma nova tabela de produtos com o nome PRODUTOS e insira nessa tabela os seguintes
campos.
• PRODUTO_ID – tipagem NUMBER(3) - não pode ser nulo e tem que ser chave primária.
• NOME - tipagem VARCHAR2(50)
• VALOR –tipagem NUMBER(6,2)
Obs: O tipo number(6,2) representa o campo para inserção de valores, quer dizer que o
valor do seu produto pode ter até seis dígitos sendo dois deles destinados às casas
decimais.
Ex: R$ 4312,00
2 – Construa uma nova tabela com o nome de PEDIDOS e insira nessa tabela os seguintes campos.
• PEDIDO_ID – tipagem NUMBER(3) - não pode ser nulo e tem que ser chave primária
• CLIENTE_ID – tipagem NUMBER(5) - tem que ser uma foreign key ligando com a tabela
clientes que você já criou no outro exercício.
• PRODUTO_ID – tipagem NUMBER(3) – tem que ser uma foreing key ligando com a tabela de
produtos.
3 – Inserir 5 registros com o código do produto, o nome e o valor para todos os produtos.
4 – Inserir 5 registros com o código do pedido, o código do cliente e código do produto.
5 – Fazer uma consulta(select), trazendo na tela o código do pedido(PEDIDO_ID) , o nome do
cliente(NOME) e o cpf(CPF).
6 – Fazer uma consulta(select), trazendo o número do pedido(PEDIDO_ID) e o nome do produto(NOME).
20
Autor: Jeferson Marques Cunha
3 – Inserir mais 5 registros na tabela cidades, todos os registros devem ser inseridos com datas diferentes.
OBS: Lembre-se que para inserir um pedido onde tenha o código do cliente, esse código de cliente
deve estar cadastrado na tabela de CLIENTES também, o mesmo acontece com o produto na tabela
PRODUTOS, pois o campo CLIENTE_ID e PRODUTO_ID são foreing keys ou seja “chaves de
relacionamento”. Você terá que ligar a tabela PEDIDOS com a tabela CLIENTES e a tabela PEDIDOS
com a tabela PRODUTOS para trazer o resultado no primeiro e no segundo select.
Agora vamos fazer uma somatória com todos os produtos que você inseriu no exercício acima.
Obs: Esse valor é a soma do valor de todos os produtos. Como o Sum é uma função de grupo, se
tivéssemos trazido mais algum campo teríamos que utilizar o Group By, veremos no próximo
tópico.
Para termos um resultado coeso, precisaremos inserir mais alguns itens na tabela de pedidos.
Você com certeza já vai ter cadastrado 5 registros que são os registros do exercício 2.
Como você já vai ter inserido 5 pedidos, vamos ir na sequência apartir do pedido 6.
Você poderá rodar esses inserts todos de uma única vez clicando em File --->New ---->Command Window,
só copiar e colar na tela do command, aparecerá uma tela como essa abaixo, mostrando que os registros
foram inseridos.
21
Autor: Jeferson Marques Cunha
Agora que temos os produtos inseridos vamos fazer um select com sum e group by.
SELECT P.PRODUTO_ID,
SUM(PR.VALOR)
FROM PEDIDOS P,
PRODUTOS PR
WHERE P.PRODUTO_ID = PR.PRODUTO_ID
GROUP BY P.PRODUTO_ID;
EXPLICAÇÃO: Tive que unir a tabela de PRODUTOS porque eu queria somar o valor e o campo
valor pertence à tabela de PRODUTOS e não à tabela de PEDIDOS.
Tive que utilizar o where para dizer que o produto_id da tabela de PEDIDOS tinha que ser o mesmo
produto_id da tabela de PRODUTOS.
E como eu havia dito anteriormente, a cláusula “SUM” juntamente com algum outro campo
necessita de agrupamento. Nesse caso aqui ele agrupou pelo código do produto, ou seja, ele vai
pegar todos os produtos com o mesmo código na tabela de PEDIDOS e vai somar o valor total de
cada produto.
Você só poderá agrupar um campo se ele tiver sido apresentado no select.
Concatenar significar colocar um campo na frente do outro ou qualquer símbolo na frente, no meio ou
depois dos campos.
22
Autor: Jeferson Marques Cunha
Explicação: O símbolo || significa que você quer colocar o resultado de duas colunas em uma
coluna somente. Essa consulta vai nos trazer o código do produto seguido da frase “A SOMA DO
PRODUTO É R$” e na frente o campo valor com o valor total vendido daquele produto.
O comando distinct serve para você saber quais os códigos que existe dentro de uma tabela sem precisar
trazer todos os registros e sair procurando todos os códigos.
Conforme inserts que fizemos anteriormente, você deve ter cadastrado o mesmo código de produto mais
de uma vez na tabela de pedidos, com isso poderemos exemplificar o comando distinct.
SELECT *
FROM PEDIDOS;
Observe que trouxe 9 linhas o select acima. Agora compare com o select abaixo o número de
linhas.
SELECT DISTINCT(PRODUTO_ID)
FROM PEDIDOS;
23
Autor: Jeferson Marques Cunha
O comando distinct faz com que mostre para você todos os códigos de produtos distintos, ou seja, sem
repetí-los. Agora ele trouxe somente 5 linhas.
Certo de que você fez o exercício 2, se não fez corretamente será necessário fazê-lo para que possa dar
continuidade nesse tópico.
Primeiro execute um select na tabela de clientes e verifique os registros retornados.
24
Autor: Jeferson Marques Cunha
Observe que tenho registros com datas do dia 12,20,21 e 22, isso vai nos possibilitar fazermos teste com a
menor e maior data.
Abaixo segue o select para trazer a menor data, utilizando o comando MIN.
25
Autor: Jeferson Marques Cunha
Agora segue o select para trazer a maior data, utilizando o comando MAX.
SELECT C.CLIENTE_ID,
C.DT_CADASTRO
FROM CLIENTES C
ORDER BY C.DT_CADASTRO
Explicação: Esse select faz a ordenação padrão do menor para o maior. Alguns profissionais
utilizam a cláusula ASC no order by para indicar que o produto será ordenado na ascendente,
porém se você executar o order by sem o ASC ele já vai fazer esse tipo de ordenação padrão.
Com o ASC seria assim:
SELECT C.CLIENTE_ID,
C.DT_CADASTRO
FROM CLIENTES C
ORDER BY C.DT_CADASTRO ASC
Se você quiser trazer o resultado na descendente, é só utilizar o DESC no order by, conforme select
abaixo:
SELECT C.CLIENTE_ID,
C.DT_CADASTRO
FROM CLIENTES C
ORDER BY C.DT_CADASTRO DESC
26
Autor: Jeferson Marques Cunha
Você vai perceber que a data será ordenada da maior para a menor.
INSERT INTO PRODUTOS (PRODUTO_ID, NOME, VALOR) VALUES (6,'RODA ARO 15',NULL);
Execute esse select para certificar-se de como ficou o campo valor do produto com código 6.
SELECT PRODUTO_ID,
NOME,
NVL(VALOR,0)
FROM PRODUTOS;
Explicação: O NVL foi utilizado no campo que eu inseri como nulo o produto com código 6.
Execute o seguinte select e irá perceber que ele não irá trazer nulo e sim trará 0 no lugar de nulo.
O NVL, converte um valor nulo em outro valor.
Obs: No lugar de 0, poderia ser qualquer outro número.
Agora vamos consultar essa tabela para ter certeza de que ela existe mesmo.
Explicação: Foi utilizado o comando drop para apagar a tabela teste e o comando cascade
constraints para apagar alguma chave de relacionamento que poderia existir na tabela, como as
foreigns keys que criamos nas outras tabelas.
---------------------------------------------------------------FIM--------------------------------------------------------------------
Agradeço à todos que adquiriram o tutorial, tenho certeza de que dá para começar a mexer com o básico
com SQL apartir desse tutorial.
27
Autor: Jeferson Marques Cunha
No blog vocês encontrarão assuntos variados sobre banco de dados, tanto de Transact PLSQL quanto de
Administração de Banco de Dados.
Autor:
Jeferson Marques Cunha
DBA Oracle/SQL Server
28