Você está na página 1de 54

SQL BÁSICO – PARTE 1

SQL Básico
SQL for absolute begginers
(nome bonito para: começando do ZERO)
Seja bem vindo, padawan! Se você veio para
aprender SQL do zero para iniciar sua carreira
de ciência de dados, acertou em cheio

Nessa primeira parte veremos os conceitos


básicos para você sair sabendo responder
algumas perguntas de negócio (experimente aí
na sua empresa!)
SQL Básico
Motivação (ou, porquê vc está vendo esse
nerd falar de queries na madrugada)
Python, R, Scala, Go? Qual a linguagem
mais utilizada por cientista de dados???

Hein? Hein? Você acha que é Python???


SQL Básico
SQL Básico
Motivação (ou, porquê vc está vendo esse
nerd falar de queries na madrugada)
Tá bom, a 1ª é Python

Mas a 2ª é SQL! Isso porque as fontes de


dados ainda estão armazenados em bancos
de dados relacionais

Mesmo em bancos de dados distribuídos


(Hadoop) é importante conhecer SQL
SQL Básico
Motivação (ou, porquê vc está vendo esse
nerd falar de queries na madrugada)
Forma poderosa de buscar insights em
grandes volumes de dados

Linguagem simples

Sem enrolação: só com essa aula você sairá


fazendo suas 1as consultas em qualquer
banco de dados (thanks, SQL-ANSI/ISO)
SQL Básico
Motivação (ou, porquê vc está vendo esse
nerd falar de queries na madrugada)
Qualquer que seja a sua formação, aprender
SQL vai lhe trazer grandes vantagens no
caminho para ser um bom cientista de dados

Muitas agências de emprego pedem testes de


SQL (inclusive as grandes dos vale do silício)
SQL Básico
Introdução
SQL - Structured Query Language

“Ésse quê éle” em português

“Éss quiú él” ou ainda “síquol” em inglês


SQL Básico
Introdução
SQL BÁSICO
Introdução
Linguagem padrão para acessar
informações em bancos de dados

SQL-ANSI/ISO: SQL padrão, funciona em


praticamente qualquer banco de dados
(inclusive em arquiteturas de Big Data)
SQL Básico
Introdução
Comandos são muito parecidos com a língua
inglesa:

SELECT banda, nome banda nome


The Beatles Abbey Road
FROM albuns David Bowie David Bowie
WHERE ano = 1969 The Who Tommy
SQL Básico
Introdução
SQL Básico
Introdução
Tabelas (ou relações): conjunto que representa
um conceito do mundo real (ex: bandas, músicas,
alunos, matérias, professores, municípios)
ID Nome Estilo Ano_Formacao Pais
1 The Beatles Rock 1960 Inglaterra
2 Led Zeppelin Rock 1968 Inglaterra
3 The Who Rock 1964 Inglaterra
SQL Básico
Tabelas do mundo real
Área médica: pacientes, CID, médicos, consultas
Financeira: clientes, contas, empréstimos
Direito: processos, réus, advogados
Agronegócios: grãos, produção anual, propriedades
Logística: rotas, veículos, cargas
SQL Básico
Introdução
Linhas (ou tuplas): um exemplo específico de
uma tabela (observação). No exemplo abaixo
temos 3 linhas
ID Nome Estilo Ano_Formacao Pais
1 The Beatles Rock 1960 Inglaterra
2 Led Zeppelin Rock 1968 Inglaterra
3 The Who Rock 1964 Inglaterra
SQL Básico
Introdução
Colunas (ou atributos): cada característica de
uma tabela. No exemplo abaixo temos 5 colunas

ID Nome Estilo Ano_Formacao Pais


1 The Beatles Rock 1960 Inglaterra
2 Led Zeppelin Rock 1968 Inglaterra
3 The Who Rock 1964 Inglaterra
SQL Básico
Introdução
Domínio de um atributo: tipo da característica,
ex: string (texto), int (número inteiro), float
(número real)
ID Nome Estilo Ano_Formacao Pais
1 The Beatles Rock 1960 Inglaterra
2 Led Zeppelin Rock 1968 Inglaterra
3 The Who Rock 1964 Inglaterra

string int
SQL Básico
Introdução
Tabelas (ou relações): conjunto que representa
um conceito do mundo real (ex: bandas, álbuns,
alunos, matérias, professores, municípios)
ID Nome Estilo Ano_Formacao Pais
1 The Beatles Rock 1960 Inglaterra
2 Led Zeppelin Rock 1968 Inglaterra
3 The Who Rock 1964 Inglaterra
SQL Básico
Construção de Consultas
01 – em que tabelas estão os dados necessários?

02 – você precisa de todas as linhas ou precisa de um filtro?

03 – você precisa de todas as colunas ou somente de


algumas?
SQL Básico
Construção de Consultas
01 – em que tabelas estão os dados necessários?

SELECT banda, nome


FROM albuns
WHERE ano = 1969
SQL Básico
Construção de Consultas
02 – você precisa de todas as linhas ou precisa de um filtro?

SELECT banda, nome


FROM albuns
WHERE ano = 1969
SQL Básico
Construção de Consultas
03 – você precisa de todas as colunas ou somente de algumas?

SELECT banda, nome


FROM albuns
WHERE ano = 1969
SQL Básico
Construção de Consultas
“Uai, tá tudo trocado, por último você escolhe as
colunas?”

Sim, padawan! Aprendendo a lógica desse jeito, suas


consultas serão um sucesso! Vai por mim ;)
SQL Básico
Construção de Consultas - Dica
“E se minha tabela tem 19283106 colunas? Tenho que
colocar uma a uma no SELECT?”

Esse padawan tá prestando atenção! Pra escolher todas as


colunas da tabela na consulta, basta usar um asterisco (*)

SELECT *
FROM albuns
WHERE ano = 1969
SQL Básico
Construção de Consultas
SQL Básico
Construção de Consultas
Recapitulando:
1º onde estão os dados? FROM tabela
2º quais filtros? WHERE filtro
3º quais colunas estarão no resultado final? SELECT lista
de colunas (ou *)
SQL Básico
Mão na massa
Tá achando que vai ficar fazendo curso o dia
inteiro sem botar em prática??

O melhor cientista de dados é aquele que


implementa, que experimenta, então todos pro
ambiente do w3schools

Esse ambiente tem um banco de dados de teste


legal pra gente treinar as primeiras consultas
SQL Básico
Link da descrição

https://www.w3schools.com/sql/trysql.asp?filename
=trysql_select_wildcard_charlist&ss=-1
SQL Básico
Mão na massa
SQL Básico
Mão na massa
W3Schools já traz uma base de dados pronta pra
gente

Tabelas: clientes, produtos, ordens,


fornecedores, transportadores...
SQL Básico
Mão na massa
Acabamos de fazer nossas primeiras consultas!

O mais interessante é que fizemos somente


comandos SQL ANSI/ISO, ou seja vai funcionar
em qualquer bando de dados relacional
SQL Básico
Ordenação
Depois da consulta finalizada, podemos querer que seja
ordenada por valores de uma ou mais colunas

O comando para realizar a ordenação é o ORDER BY (tá de


brincation, izi pá nóis?)

SELECT *
FROM bandas
WHERE Ano_Formacao = 1969
ORDER BY Ano_Formacao
SQL Básico
Mão na massa
Exercícios de ordenação
SQL Básico
Agregação
Um conceito muito importante! Agregar várias linhas por
algumas colunas (ex: bandas por estilo) é algo extremamente útil
para entender melhor os dados

O conceito muda um pouco, porque até então trabalhamos com


linhas sem agrupamento.

Utilizamos a agregação quanto queremos conhecer alguns


dados de estatística descritiva dos dados: contagem, média,
desvio padrão, mínimo, máximo, etc
SQL Básico
Agregação
SQL Básico
Agregação
Calma, padawan!

Estatística descritiva é somente uma forma de ter um conhecimento


geral dos dados. Nesse curso vamos só ver algumas agregações de
contagem, média. É o famoso “big picture”.

Mesmo sendo simples, é um passo importante para ter um bom


conhecimento dos dados que estão sendo trabalhados. Lembramos
sempre que o foco da ciência de dados é a SOLUÇÃO DE PROBLEMAS
REAIS
SQL Básico
Agregação
Exemplo de tabela de bandas

ID Nome Estilo Ano Formação Álbuns País


1 The Beatles Rock 1960 12 Inglaterra
2 Led Zeppelin Rock 1968 8 Inglaterra
3 The Who Rock 1964 12 Inglaterra
4 Cia do Pagode Pagode 1990 7 Bréziu
5 Só pra contrariar Pagode 1989 9 Bréziu
6 Pearl Jam Grunge 1990 11 Estados Unidos
7 Green Day Punk 1987 13 Estados Unidos
SQL Básico
Agregação
Exemplos de análises a partir dos dados podemos fazer com
agregações:

Quantas bandas por estilo?


Qual a média de álbuns por estilo?
Quais estilos possuem média de álbuns acima de 10?
Quais estilos possuem mais de 1 banda com ano de formação
antes de 1970?

Pense em perguntas de negócio a serem respondidas


no seu dia a dia, quantos clientes por estado,
média de vendas por colaborador, etc...
SQL Básico
Agregação
Em SQL, para agregar linhas utilizamos o comando GROUP BY

SELECT estilo, count(nome)


FROM bandas
GROUP BY estilo
SQL Básico
Agregação
Quantas bandas por estilo? (agregar por estilo)

ID Nome Estilo Ano_Formacao Albuns Pais


1 The Beatles Rock 1960 12 Inglaterra
2 Led Zeppelin Rock 1968 8 Inglaterra
3 The Who Rock 1964 12 Inglaterra
4 Cia do Pagode Pagode 1990 7 Bréziu
5 Só pra contrariar Pagode 1989 9 Bréziu
6 Pearl Jam Grunge 1990 11 Estados Unidos
7 Green Day Punk 1987 13 Estados Unidos
SQL Básico
Agregação
A agregação vai COLAPSAR as linhas por estilo

ID Nome Estilo Ano_Formacao Albuns Pais


1 The Beatles Rock 1960 12 Inglaterra
2 Led Zeppelin Rock 1968 8 Inglaterra
3 The Who Rock 1964 12 Inglaterra
4 Cia do Pagode Pagode 1990 7 Bréziu
5 Só pra contrariar Pagode 1989 9 Bréziu
6 Pearl Jam Grunge 1990 11 Estados Unidos
7 Green Day Punk 1987 13 Estados Unidos
SQL Básico
Agregação
Como fazer para contar?? Vamos usar a função COUNT

ID Nome Estilo Ano_Formacao Albuns Pais


1 The Beatles Rock 1960 12 Inglaterra
2 Led Zeppelin Rock 1968 8 Inglaterra
3 The Who Rock 1964 12 Inglaterra
4 Cia do Pagode Pagode 1990 7 Bréziu
5 Só pra contrariar Pagode 1989 9 Bréziu
6 Pearl Jam Grunge 1990 11 Estados Unidos
7 Green Day Punk 1987 13 Estados Unidos
SQL Básico
Agregação
Quantas bandas por estilo?

Estilo count(nome)
SELECT estilo, COUNT(nome)
Rock 3
FROM bandas Pagode 2
GROUP BY estilo Grunge 1
Punk 1
SQL Básico
Agregação
Qual a média de álbuns por estilo? (de novo, agregar por estilo)

ID Nome Estilo Ano_Formacao Albuns Pais


1 The Beatles Rock 1960 12 Inglaterra
2 Led Zeppelin Rock 1968 8 Inglaterra
3 The Who Rock 1964 12 Inglaterra
4 Cia do Pagode Pagode 1990 7 Bréziu
5 Só pra contrariar Pagode 1989 9 Bréziu
6 Pearl Jam Grunge 1990 11 Estados Unidos
7 Green Day Punk 1987 13 Estados Unidos
SQL Básico
Agregação
E para fazer a média?? Vamos usar a função AVG

ID Nome Estilo Ano_Formacao Albuns Pais


1 The Beatles Rock 1960 12 Inglaterra
2 Led Zeppelin Rock 1968 8 Inglaterra
3 The Who Rock 1964 12 Inglaterra
4 Cia do Pagode Pagode 1990 7 Bréziu
5 Só pra contrariar Pagode 1989 9 Bréziu
6 Pearl Jam Grunge 1990 11 Estados Unidos
7 Green Day Punk 1987 13 Estados Unidos
SQL Básico
Agregação
Qual a média de álbuns por estilo?

Estilo avg(Albuns)
SELECT estilo, AVG(Albuns) Rock 10,66
FROM bandas Pagode 8
GROUP BY estilo Grunge 11
Punk 13
SQL Básico
Agregação
Filtros de linha já aprendemos! Usamos o WHERE

Mas quando precisamos filtrar linhas por


resultados de funções de agregação (count, avg,
max, min...) utilizamos outro comando, o HAVING
SQL Básico
Agregação
Quais estilos possuem média de álbuns acima de 10? (agregar por
estilo, calcular a média e filtrar com HAVING)
ID Nome Estilo Ano_Formacao Albuns Pais
1 The Beatles Rock 1960 12 Inglaterra
2 Led Zeppelin Rock 1968 8 Inglaterra
3 The Who Rock 1964 12 Inglaterra
4 Cia do Pagode Pagode 1990 7 Bréziu
5 Só pra contrariar Pagode 1989 9 Bréziu
6 Pearl Jam Grunge 1990 11 Estados Unidos
7 Green Day Punk 1987 13 Estados Unidos
SQL Básico
Agregação
Quais estilos possuem média de álbuns acima de 10?

SELECT estilo, AVG(Albuns) Estilo avg(Albuns)


FROM bandas Rock 10,66

GROUP BY estilo Grunge 11


Punk 13
HAVING AVG(Albuns) > 10
SQL Básico
Agregação
Maneiro! Então quando tem filtro por valor de
agregação, uso HAVING!

“Mas, o WHERE também não filtra, não entendi?”

Podemos usar o WHERE e o HAVING numa mesma


consulta! Enquanto o WHERE filtra por valores não
agregados, o HAVING filtra por valores agregados
SQL Básico
Agregação
Quais estilos possuem mais de 1 banda com ano de formação antes de
1970? (agregar por estilo, contar as bandas por estilo, filtrar linhas por ano
de formação e finalmente filtrar pela quantidade de bandas)
ID Nome Estilo Ano_Formacao Albuns Pais
1 The Beatles Rock 1960 12 Inglaterra
2 Led Zeppelin Rock 1968 8 Inglaterra
3 The Who Rock 1964 12 Inglaterra
4 Cia do Pagode Pagode 1990 7 Bréziu
5 Só pra contrariar Pagode 1989 9 Bréziu
6 Pearl Jam Grunge 1990 11 Estados Unidos
7 Green Day Punk 1987 13 Estados Unidos
SQL Básico
Agregação
Quais estilos possuem mais de 1 banda com ano de
formação antes de 1970?

SELECT estilo, COUNT(nome) Estilo COUNT(nome)

FROM bandas Rock 3

WHERE Ano_Formacao < 1970


GROUP BY estilo
HAVING COUNT(nome) >1
SQL Básico
Acabou!
Mas já?!

Bom começo, padawan, já sabe fazer consultas pra responder


bastante perguntas de negócio!

Você já pode tentar responder:


Qual a média de idade dos seus clientes?
Quais as principais estatísticas demográficas dos seus alunos?
Quais os municípios onde você tem mais pacientes?

Faça essas perguntas, procure onde estão as informações na


sua empresa/instituição, e mão na massa!!
Referências
Ambiente SQL
• https://www.w3schools.com/

SQL ANSI/ISO
• Lista de documentos:
https://docs.oracle.com/database/121/SQLRF/ap_standard_sql001.htm#SQLRF55514
• ANSI: https://www.ansi.org/resource-center (Família ANSI/ISO/IEC 9075)

Você também pode gostar