Você está na página 1de 13

SQL (Structured Query Language)

- Linguagem de programação utilizada para realizar consultas em base de dados

- Gerenciar os dados = Criar, remover, atualizar, deletar. O famoso CRUD

- Softwares que auxiliam na gestão dos dados (...) SQL Server ??

O Console do Google Cloud fornece uma interface gráfica que pode ser usada para criar e
gerenciar recursos do Big Query (Pesquisas) executar consultas SQL.

A maioria de sistema de gerenciamento de dados SQL (Mysql, Postsql) utilizam o padrão


(SQL UNCE)

Tem como salvar as consultas SQL

Comandos

CTRL+ENTER = Executar comando

SELEC * <atributos>

SELECT DISTINCT = Selecionar sem repetir informações,

FROM = <tabelas> Base de dados

WHERE = [Condicionais] (Colunas desejadas)

IN =

LIMIT = Quantas linhas vou usar

ORDER BY = Ordenar alfabética

SELECT imdb_rating AS 'IMDb'= Renomear Coluna

Obs Usar ; no final para executar o comando

https://basedosdados.org/dataset/br-poder360-pesquisas?bdm_table=microdados (Site com dados


para praticar consultas)

 Criar uma tabela com os dados dos institutos Data Folha e ibope do ano 2014: (IN)
(OR)

SELECT *
FROM `basedosdados.br_poder360_pesquisas.microdados`
WHERE  (instituto = 'Ibope' or instituto = 'Datafolha') AND ano = 2014

Obs: Usar ‘ ‘ para textos, String = coluna, Puxar mais de uma informação da mesma coluna (or), Sempre separar as
condicionais se não da erro ( )

Ou
SELECT  *
FROM `basedosdados.br_poder360_pesquisas.microdados` 
WHERE instituto IN ('DataFolha', 'Ibope') AND ano = 2014

 Descobrir as siglas dos partidos que apareceram nas consultas de 2014 até agora

SELECT DISTINCT sigla_partido
FROM `basedosdados.br_poder360_pesquisas.microdados`
WHERE  ano >= 2014 AND sigla_partido != 'N/A' AND sigla_partido != 'sem partido'

Obs: SELECT DISTINCT = Selecionar sem repetir informações,


Usar >= para considerar 2014
!= ‘N/A’ (Puxar apenas informações diferentes de ‘N/A’)
Pode usar tbm AND NOT = ‘N/A’

 Dados de 2014 até 2020 (Pesquisar entre duas datas)

SELECT *
FROM `basedosdados.br_poder360_pesquisas.microdados` 
WHERE ano >= 2014 AND ano <=2020

Ou

SELECT *
FROM `basedosdados.br_poder360_pesquisas.microdados` 
WHERE ano BETWEEN 2014 AND 2020

Obs: Segunda opção mais simples e puxa os anos de 2014 e 2020 tbm

 Ordem Alfabética

SELECT DISTINCT sigla_partido
FROM `basedosdados.br_poder360_pesquisas.microdados`
WHERE  ano >= 2014 AND sigla_partido != 'N/A' AND sigla_partido != 'sem partido'
ORDER BY sigla_partido DESC

Obs: Informar o nome da coluna que deseja classificar, DESC = Ordem decrescente

 Pesquisas de 2018, para o cargo de presidente, no estado de SP ordenado por turno

SELECT DISTINCT id_pesquisa, ano, cargo, turno, data_referencia, instituto
FROM `basedosdados.br_poder360_pesquisas.microdados` 
WHERE cargo = 'presidente' AND ano = 2018 
ORDER BY turno

Obs: Selecionar informações relevantes sem repetir dados


 Descobrir na base de dados (Nome e CPF dos candidatos que participaram das
eleições para Governador em 2018)

SELECT DISTINCT nome_candidato, cpf_candidato 
FROM `basedosdados.br_tse_eleicoes.receitas_candidato` 
WHERE ano = 2018 AND sigla_uf='BA' AND cargo='governador'

Obs: Selecionando o código é possível executar isoladamente

 Funções de agregação máximo, mínimo, média e soma (MAX, MIN, AVG e SUM)
Descobrir doações nas eleições de 2018 no estado da Bahia para o cargo de
Governador

SELECT MAX(valor_receita) AS max_valor_receita,
       MIN(valor_receita) AS min_valor_receita,
       AVG(valor_receita) AS media_valor_receita,
       SUM(valor_receita) AS soma_valor_receita, 
FROM `basedosdados.br_tse_eleicoes.receitas_candidato` 
WHERE ano = 2018 AND sigla_uf='BA' AND cargo='governador'

 Descobrir as doações de um candidato específico

SELECT DISTINCT nome_candidato, cpf_candidato 
FROM `basedosdados.br_tse_eleicoes.receitas_candidato` 
WHERE ano = 2018 AND sigla_uf='BA' AND cargo='governador'

Obs: Pesquisar o CPF do candidato “Rui Costa dos Santos”

 Condiciona em WHERE o CPF para puxar as informações desejadas

SELECT MAX(valor_receita) AS max_valor_receita,
       MIN(valor_receita) AS min_valor_receita,
       AVG(valor_receita) AS media_valor_receita,
       SUM(valor_receita) AS soma_valor_receita, 
FROM `basedosdados.br_tse_eleicoes.receitas_candidato` 
WHERE ano = 2018 AND sigla_uf='BA' AND cpf_candidato = '23790997587'

 Contar quantidade de doadores para o candidato Rui Costa (COUNT)


Obs: Olhar na aba de colunas para identificar qual informação é útil

SELECT COUNT (DISTINCT cpf_cnpj_doador) AS qtd_doadores

FROM `basedosdados.br_tse_eleicoes.receitas_candidato` 

WHERE ano = 2018 AND sigla_uf='BA' AND cpf_candidato = '23790997587'

 Arredondar casas decimais (ROUND)

SELECT ROUND (AVG (valor_receita), 2) AS media_valor_receita
FROM `basedosdados.br_tse_eleicoes.receitas_candidato` 
WHERE ano = 2018 AND sigla_uf='SP' 

Obs: Arredodar para 2 casas decimais o valor da média das receitas

 Quantos fornecedores o governador Rui Costa teve em 2018, qual foi o Total, valor
máximo e valor mínimo das despesas realizadas
Buscar na base de dados basedosdados.br_tse_eleicoes.despesas_candidato` 

SELECT COUNT(DISTINCT cpf_cnpj_fornecedor )  AS qtd_Fornecedores
FROM `basedosdados.br_tse_eleicoes.despesas_candidato` 
WHERE ano = 2018 AND sigla_uf='BA' AND cpf_candidato='23790997587'

SELECT MAX(valor_despesa) AS max_valor_despesa,
       MIN(valor_despesa) AS min_valor_despesa,
       SUM(valor_despesa) AS soma_valor_despesa, 
FROM `basedosdados.br_tse_eleicoes.despesas_candidato` 
WHERE ano = 2018 AND sigla_uf='BA' AND cpf_candidato='23790997587'

 Ordenar por grupos e filtrar candidatos que receberam mais de R$ 3.000.000 em


doação (GROUP BY, HAVING)

SELECT nome_candidato, COUNT(DISTINCT cpf_cnpj_doador) AS qtd_doadores,
   ROUND(SUM(valor_receita), 2) AS receita
FROM `basedosdados.br_tse_eleicoes.receitas_candidato` 
WHERE ano = 2018 AND sigla_uf = 'BA' AND cargo = 'governador'
GROUP BY nome_candidato
HAVING receita > 3000000
ORDER BY receita DESC
Obs: Sempre lembrar de separar as colunas com virgula
 Adicionar coluna de classificação, classificar doações acima de R$1.000.000 como
‘Alta’ menores como ‘Baixa’ (CASE) (WHEN) (THEN) (ELSE) (END AS)

SELECT nome_candidato, COUNT(DISTINCT cpf_cnpj_doador) AS qtd_doadores,
   ROUND(SUM(valor_receita), 2) AS valor_doado,
   CASE WHEN SUM(valor_receita) > 1000000 THEN 'alta'
     ELSE 'baixa' END AS receita
FROM `basedosdados.br_tse_eleicoes.receitas_candidato` 
WHERE ano = 2018 AND sigla_uf = 'BA' AND cargo = 'governador'
GROUP BY nome_candidato
ORDER BY valor_doado DESC

Obs: Sempre lembrar de separar as colunas SELECT com virgula

 Criar uma classificação de acordo com a nota: (<6=Ruim, Entre 6 e 7=+ -, >8 = Ótimo)
(CASE) (WHEN) (THEN) (ELSE) (END AS)

SELECT name,
CASE
WHEN imdb_rating BETWEEN 6 AND 7 THEN '+ -'
WHEN imdb_rating BETWEEN 7 AND 8 THEN 'Bom'
WHEN imdb_rating BETWEEN 8 AND 10 THEN 'Ótimo'
ELSE 'Ruim'
END AS 'Review'
FROM movies;

Obs: WHEN (Condicional) THEN (Classificação)


ELSE = classificação das demais, END AS = Nome da coluna

 Adicionar coluna de classificação, classificar doações acima de R$1.000.000 como


‘Alta’ menores como ‘Baixa’ (CASE) (WHEN) (THEN) (ELSE) (END AS)

SELECT nome_candidato, COUNT(DISTINCT cpf_cnpj_doador) AS qtd_doadores,
   ROUND(SUM(valor_receita), 2) AS valor_doado,
   CASE WHEN SUM(valor_receita) > 1000000 THEN 'alta'
     ELSE 'baixa' END AS receita
FROM `basedosdados.br_tse_eleicoes.receitas_candidato` 
WHERE ano = 2018 AND sigla_uf = 'BA' AND cargo = 'governador'
GROUP BY nome_candidato
ORDER BY valor_doado DESC
 Descobrir quantidade de fornecedores e valor total de despesas dos candidatos a
governador da Bahia em 2018

SELECT nome_candidato, 
  COUNT (DISTINCT(cpf_cnpj_fornecedor)) AS qtd_fornecedores, 
  ROUND (SUM(valor_despesa),2) AS valor_total_despesas
FROM `basedosdados.br_tse_eleicoes.despesas_candidato` 
WHERE ano = 2018 AND sigla_uf = 'BA' AND cargo ='governador'
GROUP BY nome_candidato
ORDER BY valor_total_despesas DESC

OBS: Usar DISTINCT na informação que será contabilizada (CNPJ)

 Trabalhar com múltiplas tabelas, Combinar informações (INNER) (JOIN) (ON)

OBS: as tabelas precisam ter alguma informação em comum (nesse caso id_candidato_bd)

SELECT bens.id_candidato_bd, cand.nome, cand.cpf, cand.cargo,
  SUM(valor_item) AS valor_bens (Sempre separar colunas com virgula)
FROM `basedosdados.br_tse_eleicoes.bens_candidato` AS bens JOIN `basedosdados.br_tse_eleicoes.candidatos` AS 
cand (Renomear tabelas para facilitar)
ON bens.id_candidato_bd = cand.id_candidato_bd (Informar q os dados são =)
WHERE bens.ano = 2018 AND bens.sigla_uf = 'BA' AND cand.ano = 2018 AND cand.cargo='governador'
(Condicionar as infs desejadas por referência)
GROUP BY id_candidato_bd, cand.nome, cand.cpf, cand.cargo (Sempre informar colunas novamente no GROUP
BY)
ORDER BY valor_bens DESC 

Obs: Sempre analisar se o resultado obtido é o esperado

Obs: Mostra apenas as junções ON que existem nas duas tabelas, todas as demais não aparecem

Alter Join

Obs: Mostra as junções ON que existem nas duas tabelas, e mantem as linhas da Tabela A que não tiveram retorno
(Null)
*Pode ser usado o RIGHT tbm

Existe uma outra variação (OUTER JOIN) ??? (Pesquisar mais sobre o assunto

 Chave-Primaria e Estrangeira

 Chave Primaria = Identificador que diferencia unicamente cada linha (ID, CPF) (Nome
Completo + Hora de nascimento)

 Chave Estrangeira = Exemplo [Tab1 = (CNPJ = 1ª) (CPF = Estrangeira)] (Tab2 = CPF
= 1ª)

Quero as informações pessoais do sócio que estão na Tab2:

Utilizo o CPF como referência para trazer as informações da Tab2.


- Criar uma tabela organizada por id, name e age:

CREATE TABLE celebs (id INTERGER, name TEXT, age INTERGER);

- Como visualizar a tabela criada?

SELECT * 
FROM celebs;

- Como visualizar apenas algumas colunas?

SELECT name, age 


FROM celebs;

- Como adicionar uma nova coluna na tabela?

ALTER TABLE celebs


ADD COLUMN twitter_handle TEXT; Obs: informar o nome da coluna nova como TEXT

Obs: As células da coluna nova ficam vazias (N/A)

- Como adicionar Dados na coluna nova?

UPDATE celebs
SET twitter_handle = '@taylorswift13' Obs:Informar a coluna destino = ‘Texto’
WHERE id = 4; Coluna índice: nome da coluna = dado de referência

- Como apagar linhas da tabela?

DELETE FROM celebs


WHERE twitter_handle IS NULL; Obs:WHERE é a coluna de referência

Tipos de dados

 INTEGER, a positive or negative whole number

 TEXT, a text String (Usar ‘____’)

 DATE, the date formatted as YYYY-MM-DD


 REAL, a decimal value
- Condicionais (Where)

 = equal to

 != not equal to

 > greater than

 < less than

 >= greater than or equal to

 <= less than or equal to

- Como selecionar informações parecidas? (‘_’)

SELECT * 
FROM movies
WHERE name LIKE 'Se_en';

- Como selecionar informações que começam, terminam ou possuem


determinado palavra? (‘%’)

 começam ‘A%’

 terminam ‘%a’

 possuem ‘%man% = (man, woman, batman)

 possuem ‘%man % = (man)

 Tem 2 letras ‘__’

 Tem 5 letras e a 2ª é A ‘_A___’

 Procurar (underline) ‘dmc\\_’


Obs: barra, barra = informar que é para puxar o _ (underline) realmente

Obs: Usar espaço no final da palavra “man ‘ para não puxar outras informações parecidas
SELECT * 
FROM movies
WHERE name LIKE 'The %';

- Como selecionar informações de células vazias?

SELECT *
FROM movies
WHERE imdb_rating IS NULL; OBS: IS NULL = Vazias / IS NOT NULL = Ignorar as vazias
- Como selecionar informações entre dois parâmetros (Letras, Datas)

- Selecionar os filmes que comecem com (D, E, F)

SELECT *
FROM movies
WHERE year BETWEEN ‘D’ AND ‘G’; OBS: Para selecionar ‘F’ usar o segundo parâmetro como
‘G’ (Írá puxar apenas as palavras iniciadas em ‘F’)

- Selecionar os filmes dos anos 70

SELECT *
FROM movies
WHERE year BETWEEN 1970 AND 1979; OBS: No caso de números é diferente, Seleciona até o
numero que informado

- Como selecionar informações entre duas condicionais (AND)

- Selecionar filmes de antes de 1985 que sejam do gênero Horror:

SELECT *
FROM movies
WHERE year < 1985
AND genre = 'horror';

- Como selecionar informações de duas ou mais condicionais (OR)


- Selecionar filmes lançados depois de 2014 que sejam do gênero
Comedia e Romance:

SELECT *
FROM movies
WHERE year > 2014
   OR genre = ‘comedy’
OR genre = ‘romance’;

Você também pode gostar