DESCOMPLICANDO
SQL
Conceitos básicos, comandos
e dicas para você que iniciou
ou quer entrar no mundo do
desenvolvimento...
INTRODUÇÃO
Hoje vemos que o mercado de
trabalho carece muito de
profissionais de TI, tanto no
mercado nacional como no
internacional, diariamente vemos
ou ouvimos sobre pessoas que
foram morar no exterior para
trabalhar com tecnologia da
informação.
Existem vários setores
diferentes na área de TI, desde
suporte básico até
administradores de rede, DBAs,
desenvolvedores... Mas nosso
foco aqui é no desenvolvimento
de software, ou melhor, no SQL,
na parte de Banco de Dados, na
manipulação das informações.
MAS AFINAL, O QUE É
SQL?
A Linguagem de consulta
estruturada (SQL) ou Structured
Query Language é a linguagem
utilizada para a manipulação da
informação de dentro de um Banco
de dados através de um SGBD, este
que é o conjunto de softwares
responsáveis pelo gerenciamento de
bases de dados...
Atualmente muitos APPs, aplicações
ou programas utilizam de base de
dados onde são armazenadas todas
as informações do software e o SQL
é o conjuntos de comandos,
responsável por ler, inserir, alterar,
deletar ou até criar novas estruturas
para o armazenamento novas
informações.
PRIMEIROS PASSOS:
AMBIENTE
Você precisa de um Banco de Dados
e uma ferramenta para acesso e
manipulação dos dados, caso ja
possui uma base e acesso pode pular
está etapa, se não tiver, abaixo
listamos algumas opções
disponíveis...
-> Oracle Database Express Edition.
Uma boa opção gratuita para
estudos e teste, mais conhecida
como Oracle XE.
AMBIENTES
-> SQL Server Express Edition
-> PostgreSQL
-> MYSQL
AMBIENTES
E para realizar a conexão com a base
e ser possível criar as tabelas, fazer
as consultas existem algumas
ferramentas disponíveis como:
PRIMEIROS COMANDOS
CREATE
Caso não tenha acesso a um banco ou
realizou a instalação nova,
precisaremos criar um USER ou
chamado “Owner”, local onde vamos
criar nossas tabelas e montar toda a
estrutura dos nossos dados...
Para isso usaremos o comando:
CREATE USER
Através dessa instrução vamos criar
um usuário, uma espécie de conta
com a qual vamos realizar a conexão.
Existem algumas clausulas que podem
ser adicionadas ao comando, mas
nesse momento usaremos um
comando simples...
CREATE
Usaremos o seguinte comando
CREATE USER BASE_TREINAMENTO
iDENTIFIED BY BASE_TREINAMENTO
Com essa instrução estamos criando
um usuário “BASE_TREINAMENTO”
com senha “BASE TREINAMENTO”
Dica #1 : Criamos os usuário com
senha igual o nome para facilitar o
acesso e evitar o retrabalho de
trocar a senha toda vez que
“esquecer”.
CREATE
Com o usuário criado e conectado ao
novo owner, vamos iniciar a criação
do banco de dados. O ideal é que
sempre sejam levantadas todas
informações que serão necessárias e
todos dados que deverão ser
armazenados... Também utilizar uma
ferramenta de modelagem de dados
ou até uma folha e uma caneta, para
criar uma representação visual de
como os dados serão dispostos no
banco...
Exemplo de uma modelagem
simples com 4 tabelas
CREATE
Para nossa base vamos criar uma
estrutura simples com tabelas de
clientes, produtos, tipos de produtos,
vendas, vendedores...
Nossa primeira tabela será a
CLIENTES, para isso usaremos o
comando CREATE TABLE
CREATE TABLE CLIENTES ...
Dica # 2: Não é uma regra, cada
desenvolvedor e empresa tem seu
padrão, mas a dica sempre usar
nomes que indicam quais
informações estão naquela tabela,
como no nosso caso, a tabela
clientes tem as informações dos
clientes .
CREATE
Vamos ao comando completo...
create table CLIENTES (
cliente_id number(5),
nome_cliente varchar2(60),
cpf number(11),
data_nascimento date,
status varchar2(1),
constraint pk_clientes primary key (cliente_id));
Dica # 3: Sempre criar um coluna
que será como um identificador da
tabela, ou seja, uma coluna única
que não irá se repetir, como no
exemplo foi criada como
CLIENTE_ID, assim em qualquer
outra tabela que tiver uma coluna
com esse nome, estará
referenciando a um cliente da
tabela clientes.
CREATE
A instrução é criada com um CREATE
TABLE seguido do NOME DA TABELA,
seus campos com a definição do tipo
de dado que será armazenado, nos
exemplos estamos usando o ORACLE
XE, por isso, usamos os tipo NUMBER
para definir que aquele campo irá
receber apenas números e o
VARCHAR2(60) ) para textos (nesse
caso com tamanho de 60 caracteres).
Por ultimo, definimos a chave
primaria com o comando
CONSTRAINT nome da chave PRIMARY
KEY coluna que será o id, esse que
usamos para definir o id único da
tabela.
Dica # 4: O nome da chave com PK
+ nome da tabela, pois ajudará
localizar caso ocorra algum erro.
INSERT
Após a criação já podemos alimentar
a tabela, para inserirmos as
informações usamos o comando
INSERT.
INSERT INTO nome_tabela (campo1,
campo2, campo3) VALUES (info1,
info2, info3);
Na instrução INSERT INTO precisamos
informar a tabela que serão inseridos
os dados e após o “(” informaremos
os campos que vamos inserir
separados por “,” e seguida
colocamos “) VALUES (“ e as
informações que pretendemos
adicionar em nossa tabela, campos
de texto devem estar entre aspas
simples “‘“.
INSERT
Vamos fazer a inserção de 2 clientes
em nossa tabela..
insert into clientes (cliente_id, nome_cliente, cpf,
data_nascimento, status) value (1, 'JOAO SILVA',
'01234567890', '01/06/1990', 'A');
insert into clientes (cliente_id, nome_cliente, cpf,
data_nascimento, status) value (2, 'MARIA SILVA',
'09876543210', '06/01/1989', 'A');
E assim ficou nossa tabela com os
registros adicionados...
Dica # 5: Coluna status, seria um
indicativo de “ativo” ou “inativo”,
utilizamos apenas “A” ou “I”,
bastante utilizadas como padrão
também o “0” e “1”, como
referencia aos código binários,
onde 0 = Desligado e 1 = Ligado
PRATICANDO
Agora que já conhecemos as
instruções para criação de tabelas e
para adicionar os dados, chegou a
hora de praticar, antes de passar
para as próximas etapas, crie as
próximas tabelas e adicione os dados
abaixo...
Tabela Tipos_produtos:
- tipo_produto_id;
- nome_tipo_produto;
- status;
Tabela Produtos:
- produto_id;
- nome_produto;
- tipo_produto_id ;
- status;
Tabela Vendedores:
- vendedor_id;
- nome_vendedor;
- status;
PRATICANDO
A seguir vamos inserir dados nas
tabelas.
Na tabela tipos_produtos inserimos:
1, bebidas, ativo;
2, alimentos, ativo;
3, diversos, ativo;
Na tabela produtos:
1, agua, tipo bebidas, ativo;
2, coca-cola, tipo bebidas, ativo;
3, pastel, tipo alimento, ativo;
4, bolo, tipo alimento, ativo;
5, pirulito, tipo diversos, ativo;
*coluna tipo colocamos o id referente
ao tipo desejado.
Na tabela vendedores:
1, Julio Silva, ativo;
2, Julia Santos, ativo.
PRATICANDO
Assim inserimos nas tabelas:
Tipos_Produtos
insert into tipos_produtos (tipo_produto_id,
nome_tipo_produto, status) values ('1', 'bebidas', 'A');
insert into tipos_produtos (tipo_produto_id,
nome_tipo_produto, status) values ('2', 'alimentos', 'A');
insert into tipos_produtos (tipo_produto_id,
nome_tipo_produto, status) values ('3', 'diversos', 'A');
Produtos
insert into produtos (produto_id, nome_produto,
tipo_produto_id, status) values ('1', 'agua', '1', 'A');
insert into produtos (produto_id, nome_produto,
tipo_produto_id, status) values ('2', 'coca-cola', '1', 'A');
insert into produtos (produto_id, nome_produto,
tipo_produto_id, status) values ('3', 'bolo', '2', 'A');
PRATICANDO
insert into produtos (produto_id, nome_produto,
tipo_produto_id, status) values ('4', 'pastel', '2', 'A');
insert into produtos (produto_id, nome_produto,
tipo_produto_id, status) values ('5', 'pirulito', '3', 'A');
Vendedores
insert into vendedores (vendedor_id, nome_vendedor, status)
values ('1', 'Junior Silva', 'A');
insert into vendedores (vendedor_id, nome_vendedor, status)
values ('2', 'Julia Santos', 'A');
ALTER TABLE
A instrução ALTER TABLE é utilizada
quando precisamos fazer alguma
alteração em uma tabela ja criada,
tanto para adicionar coluna, mudar
tipo, alterar formato de alguma
coluna ou criar chave primaria ou
estrangeiras.
ALTER TABLE PRODUTOS ADD
QUANTIDADE NUMBER(5);
O comando consiste em ALTER TABLE
seguido da tabela que será alterada,,
nosso exemplo usamos o ADD para
adicionar uma coluna, logo após o
nome da coluna e especificação.
Adicionamos a coluna QUANTIDADE
com especificação de números com
tamanho 5, ou seja, permite números
até 5 dígitos.
ALTER TABLE
Instruções que podem ser usadas
com ALTER TABLE...
ADD - para adicionar colunas;
alter table tabela add nova_coluna varchar2(10);
DROP - para excluir uma coluna;
alter table tabela drop column coluna_ecluir
RENAME - para renomear colunas;
alter table tabela rename column
coluna_anterior to nova_coluna;
MODIFY - para modificar a
especificação de uma coluna,
aumentar ou alterar tipo;
alter table tabela modify column
coluna_ja_existente number(6);
FOREIGN KEY
Além do da chave primaria que
chamamos de PK, existe também as
chaves estrangeiras ou FOREIGN KEY,
também chamadas de FKs, são
chaves que ajudam nas ligações entre
as tabelas e também no desempenho
das consultas, quando criamos uma
FK em uma tabela estamos
registrando que a coluna faz
referencia a uma coluna de outra
tabela, geralmente para a PK da
tabela de referencia.
ALTER TABLE PRODUTOS ADD
CONSTRAINT
FK_PRODUTOS_TIPOS_produtos FOREIGN
KEY (TIPO_PRODUTO_ID) REFERENCES
TIPOS_PRODUTOS(TIPO_PRODUTO_ID);
Dica # 6: FK com nome da tabela
origem + o nome da tabela de
referencia, para fácil localização.
SELECT
Agora vamos consultar os dados
dessas tabelas que criamos e para
isso usamos a instrução SELECT
SELECT * FROM NOME_TABELA
O comando select é utilizado para
buscar os registros de uma deter-
minada tabela, logo após o select
podemos informar as colunas que
deseja retornar, caso queria não seja
necessário trazer apenas algumas
colunas especificas, pode usar o *,
dessa maneira retornará todas
colunas da tabela, para completar
colocamos o comando FROM seguido
de qual tabela virão as informações...
SELECT
Por exemplo, vamos buscar todos os
produtos cadastrados em nossa base
SELECT * FROM produtos
Esse será o retorno obtido...
Com a instrução obtivemos tosos os
registros que foram inseridos, ou
seja, todos os produtos que foram
cadastrados em nossa base de
treinamento
ORDER BY
Ainda sobre o select temos a
instrução ORDER BY que é usada
para ordenar por alguma coluna do
select, se olhar novamente o retorno
da consulta anterior o produto_id não
está em ordem, para isso usamos
esse comando.
SELECT * FROM PRODUTOS ORDER BY
PRODUTO_ID
ORDER BY
Agora temos os itens ordenados pelo
ID, para o ORDER BY podemos
também colocar o nome da coluna ou
a posição da coluna, se quisessem
ordenar pelo nome, por exemplo,
poderia colocar apenas “ORDER BY
2”, ou seja, segunda coluna.
SELECT * FROM PRODUTOS
ORDER BY 2
WHERE
Instrução WHERE, usada quando
precisamos impor uma condição ou
aplicar algum filtro em nossa
consulta, usamos quando queremos
retornar somente os registros que se
encaixam em alguma condição, por
exemplo, vamos fazer um select na
tabela tipos_produtos
SELECT * FROM TIPOS_PRODUTOS
Com o resultado podemos ver que o
tipo_produto_id de “alimentos” é o
código 2...
WHERE
A partir desse código vamos buscar
todos os produtos que são do tipo
ALIMENTOS e para isso usamos o
WHERE
SELECT * FROM PRODUTOS
WHERE TIPO_PRODUTO_ID = 2
Estamos informando a o banco de
dados que queremos todos os
produtos que sejam do tipo alimento,
e como ele sabe quais são? Pelo
TIPO_PRODUTO_ID, seguindo nossa
dica #3, sabemos que essa coluna
faz referencia a tabela de
TIPOS_PRODUTOS e ao identificador
dela, no caso a chave primaria que é o
ID.
WHERE
Com esse comando o banco de dados
irá nos retornar somente os registros
que se encaixam na condição
Nos retornou apenas os produtos
4 - Pastel e 3 - Bolo, são os produtos
de tipo_produto_id = 2 - alimentos
Dica # 7: Sempre que possível
utilizar condições com WHERE,
quando temos grande volume de
dados, uma consulta sem nenhuma
condição, pode trazer muitas
informações, levar bastante
tempo e até aumentar consumo do
banco e afetar o desempenho .
INNER JOIN
Existe outra maneira de chegar a esse
mesmo resultado, porém de maneira
mais eficiente e sem necessidade de
fazer a consulta em uma tabela para
saber o id e outra para ter as
informações, para isso utilizamos o
INNER JOIN para fazer a ligação entre
as duas tabelas
SELECT p.*, t.*
FROM PRODUTOS P
INNER JOIN TIPOS_PRODUTOS T
ON P.TIPO_PRODUTO_ID = T.TIPO_PRODUTO_ID
WHERE NOME_TIPO_PRODUTO = 'alimentos'
Com INNER JOIN fazemos a ligação
entre as tabelas, ou seja, indicamos o
que há em comum entra às duas
tabelas, essa ligação garante que
vamos trazer exatamente o tipo que
está cadastrado para aquele
produto.
PRATICANDO
Uma consulta pode ter um ou mais
INNER JOIN, vamos criar uma nova
tabela, simulando um registros das
vendas, um histórico das
movimentações, para isso criaremos
uma tabela chamada VENDAS, nessa
tabela, seguindo as dicas e as
instruções que vimos até aqui, deverá
ter uma coluna com um ID único, data,
seguidos dos IDs de produto,
vendedor e cliente... Em seguida
também vamos inserir alguns dados
como se fossem vendas realizadas,
conforme exemplo abaixo.
PRATICANDO
Abaixo os scripts para criação e
dados da tabela...
create table vendas (
vendas_id number,
data date,
produto_id number,
vendedor_id number,
cliente_id number,
constraint pk_vendas primary key (vendas_id),
constraint fk_vendas_produtos foreign key (produto_id)
references produtos(produto_id));
insert into vendas values (1, '28/01/2023', 1, 1, 1);
insert into vendas values (2, '29/01/2023', 2, 2, 1);
insert into vendas values (3, '28/01/2023', 3, 1, 2);
insert into vendas values (4, '29/01/2023', 4, 2, 1);
insert into vendas values (5, '28/01/2023', 5, 1, 2);
insert into vendas values (6, '30/01/2023', 1, 2, 1);
insert into vendas values (7, '30/01/2023', 2, 1, 2);
insert into vendas values (8, '28/01/2023', 3, 2, 1);
insert into vendas values (9, '29/01/2023', 4, 1, 2);
insert into vendas values (10, '28/01/2023', 5, 2, 1);
Dica # 7: Quando as informações
que serão adicionadas ocuparão
todos campos, não há necessidade
de listar todos, apenas garantir que
estão na mesma ordem das colunas.
PRATICANDO
Após a inserção dos dados, devemos
ter um cenário da tabela de vendas
igual a imagem abaixo...
Como falamos anteriormente o INNER
JOIN é utilizado para fazer a ligação
entre as tabelas, através desta
instrução vamos informar o que há de
igual entre as tabelas, geralmente as
ligações são feitas com as mesmas
colunas das FOREIGN KEY, ou seja,
usando os identificadores únicos
também chamados de PK.
PRATICANDO
Agora vamos realizar a consulta
nessa tabela, mas precisamos saber
qual produto adquirido, qual o foi o
cliente que comprou e quem foi o
vendedor. Para nosso relatório os
dados devem ser listados da seguinte
maneira...
| DATA | CLIENTE | PRODUTO | TIPO DE PRODUTO | VENDEDOR |
Para buscarmos os dados faremos as
seguintes ligações..
Cliente - coluna cliente_id com a
coluna cliente_id da tabela
clientes;
Produto - coluna produto_id com
a coluna produto_id da tabela
produtos;
PRATICANDO
Tipo de produto - essa segue um
padrão diferente, como não
temos a coluna tipo_produto_id
na tabela de vendas, temos que
ligar o produto antes e usaremos
o tipo_produto_id da tabela de
produtos;
Vendedor - coluna vendedor_id
com a coluna vendedor_id da
tabela vendedores;
Pare aqui nessa página e crie a
consulta, vamos testar o que
aprendemos até agora, na próxima
pagina teremos a consulta pronta e
seu retorno.
GROUP BY
GROUP BY é o comando utilizado
para agrupar informações, um
exemplo prático seria, nos registros
de vendas de um estabelecimento
podem existir vários registros para
um mesmo cliente ou mesmo
produto... Por exemplo, queremos
saber os clientes que compraram, se
fizermos um SELECT da tabela de
vendas com um INNER JOIN na
clientes, saberemos todos os clientes
que compraram, porém se o cliente
tiver mais de um registro seu nome
poderá vir multiplicado pela
quantidade de registros nas vendas.
GROUP BY
select c.nome_cliente
from vendas v, clientes c
where v.cliente_id = c.cliente_id
Note na imagem acima que obtivemos
todos clientes, porém os nomes estão
sendo repetidos conforme a
quantidade de registos na tabela
VENDAS
GROUP BY
Para isso utilizamos o GROUP BY que
irá agrupar os registros iguais, vamos
aplicar o comando na coluna
NOME_CLIENTE para que os nomes
iguais sejam agrupados...
O comando é simples, basta informar
ao final da consulta o GROUP BY mais
a coluna que será agrupada
select c.nome_cliente
from vendas v, clientes c
where v.cliente_id = c.cliente_id
GROUP BY c.nome_cliente
Com isso teremos o seguinte retorno
Até aqui vimos apenas o básico do
SQL, mas esse mundo vai muito além
do que apresentamos, tem outras
instruções, regras e dicas que podem
ajudar nas consultas e montagem das
estruturas de dados... fique ligado em
breve novos materiais com novas
dicas e muito mais...
Precisa de ajuda?
Nosso suporte
CLIQUE AQUI