Introdução ao SQL

SQL (Structured Query Language) é a linguagem padrão utilizada para armazenar, manipular e recuperar informações de bancos de dados. Colocando de forma simples, é através do SQL que é possível criar e atualizar nossos dados através de um modelo relacional. Os maiores usuários da linguagem são os DBAs (Database Administrators), responsáveis por toda a gestão dos dados, desde criar tabelas até dar acesso às demais áreas (para os mais curiosos há um podcast brasileiro com foco nos DBAs chamado DatabaseCast).

Cientistas de dados também fazem uso constante da linguagem SQL para extração de dados, criação de suas próprias tabelas – pois os dados no repositório nem sempre estarão organizados para alguma tarefa específica -, dentre outras coisas.

BANCO DE DADOS RELACIONAL

A principal linguagem para lidar com bancos de dados relacionais é o SQL. Mas o que seria um banco de dados relacional (relational database)?

Um banco de dados relacional é uma organização de dados em diferentes tabelas, isto é, em relações. Basicamente, o modelo relacional é um conjunto de tabelas de diversas colunas e linhas com uma chave de identificação em comum para ligar as diferentes tabelas.

Um exemplo bem básicos seria um banco comercial que organiza as informações dos clientes em um banco de dados relacional cuja chave de identificação é o CPF (que na tabela foram incluídos com o nome id). Os dados foram separados em três tabelas diferentes: uma com o número de telefone e CEP dos clientes; outra com as transações efetuadas no Internet Banking e a data em que foram realizadas; e outra com as informações referentes ao crédito tomado e o número de parcelas da dívida. Teríamos então:

Note que uma única tabela com todas essas informações ficaria muito mais desorganizada, pois em alguns casos temos várias linhas para um único cliente. Ou seja, CEP e telefone ficariam se repetindo em uma tabela com o cadastro e as transações do cliente. No entanto, caso alguém deseja fazer a união de quaisquer tabelas isso é facilmente feito utilizando como ligação o campo id. Assim, é possível montar uma tabela com o id, crédito tomado, quantidade de parcelas da dívida, CEP e telefone.


Tabela 4: Cadastro_Credito

Poderíamos ter tambéTabela 4: Cadastro_Creditom um caso em que nem todas tabelas se ligassem por um mesmo campo. Dessa forma, você precisaria fazer as ligações utilizando campos comuns entre as tabelas. Pense nos dados de vendas de uma loja virtual. Uma forma de organizá-los, seria montar uma tabela com todas as informações de compras (identificador da ordem, data da compra, status, identificação do cliente), em outra colocar os detalhes de cada compra (identificador da ordem, identificador do produto, quantidade) e em uma outra tabela os detalhes de cada produto (identificador do produto, nome, descrição). Visualmente, teríamos:

COMANDOS BÁSICOS

Abaixo, uma lista de comandos básicos no SQL e a foto da tabela de saída de cada comando:

Criar tabela:

/*Cria tabela e define tipo de cada variavel*/
CREATE TABLE Cadastro (
id varchar(11)
, CEP varchar(8)
, Telefone double
);

/*Insere informacoes na tabela*/
INSERT INTO Cadastro (id, CEP, Telefone)
VALUES
('45875426887', '12402007', 9564142365)
, ('87445789652', '97610003', 4501023254)
, ('38954265874', '32560000', 9987546544)
;

Selecionar todos os campos e elementos de uma tabela (o resultado é o mesmo da tabela acima):

SELECT * FROM CADASTRO;

Selecionar todos os campos e elementos de uma tabela, limitando o número de linhas (nesse caso n = 3):

SELECT *
FROM TRANSACOES
LIMIT 3
;

Selecionar algumas colunas específicas de uma tabela:

SELECT CEP, Telefone FROM Cadastro;

Criar uma nova tabela com campos específicos selecionados pelo usuário (o resultado é o mesmo da tabela acima):

CREATE TABLE TELEFONE AS
SELECT CEP, Telefone
FROM Cadastro;

Selecionar apenas os campos que atendam a alguma condição dada (e.g.: selecionar apenas os clientes do CEP 12402-007):

SELECT * FROM Cadastro
where CEP = '12402007';

Agrupar somando os valores de uma coluna. Por exemplo, calcular o valor total das transações de cada cliente da tabela Transações:

SELECT id, SUM(transacao) as soma_transacoes
from TRANSACOES
group by id;

Poderíamos ter também o cálculo do valor médio das transações de cada cliente:

SELECT id, AVG(transacao) as media_transacoes
from TRANSACOES
group by id;

Unir tabelas por um campo comum. Por exemplo, trazer as informações de crédito para a tabela CADASTRO e formar assim a tabela 4 apresentada anteriormente:

SELECT A.*, B.*
from CADASTRO A
left join CREDITO
on A.id = B.id;

Mais sobre join você pode ver em Como combinar tabelas no SAS utilizando left join e full join e Combinando três tabelas com o left join.

SQL NO SAS

Por ser a referência em manipulação de dados, você consegue fazer uso de SQL dentro do SAS através do comando proc sql. Todos os comandos realizados acima podem ser executados no SAS acrescentando ‘proc sql;’ antes e ‘run;’ em seguida:

PROC SQL;
SELECT * FROM CADASTRO;
RUN;

Leia também:
Wikipedia: Banco de Dados Relacional
Como combinar tabelas no SAS utilizando left join e full join
Empilhando bases no SQL
Charada de SQL

Formatar/Identar o código feito em SQL para deixá-lo mais legível, mais agradável de se ler: SQLFormat

Fonte das tabelas da loja virtual: ntu.edu.sg

E aí, curtiu o post?

E aí? Gostou do conteúdo? Se inscreva para receber todas as novidades. Deixe seu e-mail em INSCREVA-SE na barra à direita, logo abaixo de pesquisar. E, por favor, não deixe de comentar, dar seu feedback e, principalmente, compartilhar com seus amigos. De verdade, isso faz toda a diferença. Além disso, você também pode acompanhar mais do meu trabalho seguindo a conta de Twitter @UniDosDados, no Instagram @universidadedosdados ou por alguma das redes que você encontra em Sobre o Estatsite / Contato, como meu canal de Youtube Canal Universidade dos Dados.

Aproveite e adquira sua camiseta de data science na LOJA DA UNIVERSIDADE DOS DADOS. Vai ficar estiloso e me ajudar neste projeto!

BONS ESTUDOS!

Deixe um comentário

O seu endereço de email não será publicado. Campos obrigatórios marcados com *