0% acharam este documento útil (0 voto)
4 visualizações

SQL Study

Enviado por

Danilo Freitas
Direitos autorais
© © All Rights Reserved
Formatos disponíveis
Baixe no formato PDF, TXT ou leia on-line no Scribd
0% acharam este documento útil (0 voto)
4 visualizações

SQL Study

Enviado por

Danilo Freitas
Direitos autorais
© © All Rights Reserved
Formatos disponíveis
Baixe no formato PDF, TXT ou leia on-line no Scribd
Você está na página 1/ 12

Imersão SQL – Fernanda Santos

O SQL (Structured Query Language) é uma linguagem de consulta, não uma linguagem de
programação completa. Ela foi projetada principalmente para manipular e consultar dados em
bancos de dados relacionais. As operações no SQL são geralmente voltadas para recuperar, inserir,
atualizar e excluir dados em tabelas.

Principais operações:

• Consulta (SELECT): Utilizada para recuperar dados de uma ou mais tabelas.


• Inserção (INSERT): Adiciona novos registros a uma tabela.
• Atualização (UPDATE): Modifica registros existentes em uma tabela.
• Exclusão (DELETE): Remove registros de uma tabela.
• Definição (CREATE, ALTER, DROP): Utilizada para definir a estrutura do banco de dados,
tabelas, índices, etc.

SELECT

Uma das tarefas mais solicitadas no trabalho com bancos de dados e SQL, é extrair informações
específicas das tabelas, filtrar dados e personalizar consultas.

SELECT * FROM CUSTOMERS;

Ao colocar o * estamos dizendo: selecione todas as colunas da tabela customers.

O ponto e vírgula no final é um delimitador de um código SQL, significa que acabou a sua instrução
SQL.

Selecionando apenas 2 colunas:

SELECT ORDER_ID, ORDER_STATUS FROM ORDERS;

Trabalhando com Alias:

SELECT ORDER_ID AS “IDENTIFICACAO_PEDIDO”

,ORDER_STATUS AS “STATUS_PEDIDO”

FROM ORDERS;
Criando uma coluna calculada:

SELECT ORDER_ID
,PAYMENT_TYPE
, PAYMENT_VALUE
, PAYMENT_VALUE * 1.05 AS TAXED_VALUE
FROM ORDER_PAYMENTS;

No exemplo acima, foi criada uma coluna calculada que calcula uma taxa de 5% em cima do valor da
coluna PAYMENT_VALUE.

Arredondando a coluna TAXED_VALUE:

SELECT ORDER_ID
,PAYMENT_TYPE
, PAYMENT_VALUE
, ROUND(PAYMENT_VALUE * 1.05, 2) AS TAXED_VALUE
FROM ORDER_PAYMENTS;

Operadores matemáticos que podem ser usados em SQL:


Operador Descrição Exemplo
+ Soma dois número PAYMENT_VALUE +
PAYMENT_INSTALLMENTS
- Subtrai dois números PAYMENT_VALUE -
PAYMENT_INSTALLMENTS
* Multiplica dois números PAYMENT_VALUE * 1.05
/ Divide dois números PAYMENT_VALUE /
PAYMENT_INSTALLMENTS
% Divide dois números, mas PAYMENT_VALUE %
retorna o resto PAYMENT_INSTALLMENTS

Concatenação de Texto:

SELECT GEOLOCATION_CITY
,GEOLOCATION_ZIP_CODE_PREFIX || ',' || GEOLOCATION_STATE AS
ZIP_CODE_CITY
FROM GEOLOCATION;
A concatenação deve funcionar com qualquer tipo de dados(números, datas, etc...), mas, ao
realizar a concatenação o resultado é convertido em texto.
OBS: Muitos RDBMS usam pipes duplos (||) em concatenação, com exceção do MySQL e
alguns outros que requerem o uso de uma função, a CONCAT().
Selecionando linhas únicas
SELECT DISTINCT ORDER_ID AS ID_PEDIDO
,ORDER_STATUS AS STATUS_PEDIDO
,CUSTOMER_ID AS ID_CLIENTE
FROM ORDERS;

Contagem da quantidade de registros:


SELECT COUNT(*)
FROM ORDERS;

SELECT COUNT(ORDER_ID)
FROM ORDERS;
É preciso tomar cuidado com esse tipo de consulta, pois, pode impactar ma performance, já
que o Count vai percorrer por toda a tabela.

Filtrando Registros
SELECT * FROM ORDERS
WHERE ORDER_STATUS == 'delivered';
Retornando todos os registros com o status diferente de delivered
SELECT * FROM ORDERS
WHERE ORDER_STATUS != 'delivered'; OU
SELECT * FROM ORDERS
WHERE ORDER_STATUS <> 'delivered';
Contagem de todos os pedidos com o status diferente de delivered
SELECT COUNT(*) AS QUANTIDADE_ENTREGAS
FROM ORDERS
WHERE ORDER_STATUS != 'delivered';
Retornando todos os pedidos com o status diferente de delivered e com data de
aprovação nula
SELECT * FROM ORDERS
WHERE ORDER_STATUS != 'delivered'
AND ORDER_APPROVED_AT IS NULL;
Retornando todos os pedidos com o status diferente de delivered ou com data de
aprovação nula
SELECT * FROM ORDERS
WHERE ORDER_STATUS != 'delivered'
OR ORDER_APPROVED_AT IS NULL;
Selecionando todos os pedidos com status invoiced ou shipped
SELECT * FROM ORDERS
WHERE ORDER_STATUS == 'invoiced'
OR ORDER_STATUS == 'shipped';
Utilizando o IN
SELECT * FROM ORDERS
WHERE ORDER_STATUS IN ('invoiced','shipped');

Selecionando todos os pedidos que não estejam com o status invoiced e shipped com o
NOT IN
SELECT * FROM ORDERS
WHERE ORDER_STATUS NOT IN ('invoiced','shipped');
Função Length():
A função length() conta o número de caracteres de um valor específico.
Retornando todos os registros onde ORDER_ID tem o total de caracteres diferente de 32
SELECT * FROM ORDERS
WHERE LENGTH(ORDER_ID) != 32;

LIKE:
Retornando todos os clientes onde a cidade começa com sao
SELECT *
FROM CUSTOMERS
WHERE CUSTOMER_CITY LIKE 'sao%';

Retornando todos os clients onde a cidade começa com sao ou tem a palavra sao
SELECT *
FROM CUSTOMERS
WHERE CUSTOMER_CITY LIKE '%sao%';
Retornando apenas os valores únicos encontrados na coluna CUSTOMER_CITY
SELECT DISTINCT CUSTOMER_CITY
FROM CUSTOMERS
WHERE CUSTOMER_CITY LIKE '%sao%';
Retornando todos os clientes onde a cidade começa com sao e logo em seguida tem
bernardo
SELECT *
FROM CUSTOMERS
WHERE CUSTOMER_CITY LIKE 'sao_bernardo%';

GROUP BY

ID_PRODUTO NOME_DO_PRODUTO QUANTIDADE


3003 F3LOC 2
3006 SQL 1
3004 STREAMLIT 4
3006 SQL 3
3006 SQL 2
3004 STREAMLIT 1
3003 F3LOC 6

GROUPBY

SELECT NOME_DO_PRODUTO, SUM(QUANTIDADE)


FROM ORDER_ITEMS
GROUP BY NOME_DO_PRODUTO;

NOME_DO_PRODUTO SUM(QUANTIDADE)
F3LOC 8
SQL 6
STREAMLIT 5

Total pedidos por cliente


SELECT COUNT(*) AS CONTAGEM
FROM ORDERS
GROUP BY CUSTOMER_ID;
Exibindo o ID do cliente
SELECT CUSTOMER_ID, COUNT(*) AS CONTAGEM
FROM ORDERS
GROUP BY CUSTOMER_ID;
Valor gasto por tipo de pagamento
SELECT PAYMENT_TYPE
,SUM(PAYMENT_VALUE)
FROM ORDER_PAYMENTS
GROUP BY PAYMENT_TYPE;

Arredondamento da soma
SELECT PAYMENT_TYPE
,ROUND(SUM(PAYMENT_VALUE),2)
FROM ORDER_PAYMENTS
GROUP BY PAYMENT_TYPE;

Média valor gasto por tipo de pagamento


SELECT PAYMENT_TYPE
,AVG(PAYMENT_VALUE)
FROM ORDER_PAYMENTS
GROUP BY PAYMENT_TYPE;

ORDER BY
Ordenando do menor para o maior
SELECT PAYMENT_TYPE
,ROUND(SUM(PAYMENT_VALUE),2) AS TOTAL
FROM ORDER_PAYMENTS
GROUP BY PAYMENT_TYPE
ORDER BY TOTAL;
Ordenando do maior para o menor
SELECT PAYMENT_TYPE
,ROUND(SUM(PAYMENT_VALUE),2) AS TOTAL
FROM ORDER_PAYMENTS
GROUP BY PAYMENT_TYPE
ORDER BY TOTAL DESC;

Obs: Funções de agregação como COUNT(), SUM(), AVG(), MIN() E MAX() não
incluem valores nulos em seus cálculos, são considerados apenas valores não nulos.

HAVING

A palavra chave WHERE filtra registros individuais, se precisar filtrar agregações é


necessário utilizar a palavra chave HAVING.

Retornando o total gasto por tipo de pagamento com valores maiores que 0

SELECT PAYMENT_TYPE
,ROUND(SUM(PAYMENT_VALUE),2) AS TOTAL
FROM ORDER_PAYMENTS
GROUP BY PAYMENT_TYPE
HAVING TOTAL > 0
ORDER BY TOTAL DESC;

CASE

O comando CASE permite substituir o valor de uma coluna por outro valor, de acordo com
uma ou mais condições.

SELECT
PAYMENT_TYPE,
ROUND(SUM(PAYMENT_VALUE), 2) AS TOTAL,
CASE
WHEN SUM(PAYMENT_VALUE) > 220000 THEN 'Alto'
ELSE 'Baixo'
END AS TOTAL_CATEGORY
FROM ORDER_PAYMENTS
GROUP BY PAYMENT_TYPE
ORDER BY TOTAL DESC;

JOIN
INNER JOIN

SELECT ORDER_ID
,PEDIDO.ORDER_STATUS
,CLIENTE.CUSTOMER_ID
,CLIENTE.CUSTOMER_CITY
,CLIENTE.CUSTOMER_STATE
FROM ORDERS PEDIDO INNER JOIN CUSTOMERS CLIENTE
ON PEDIDO.CUSTOMER_ID = CLIENTE.CUSTOMER_ID;

SELECT PEDIDOS.ORDER_ID AS ID_PEDIDO


,PRODUTOS.PRODUCT_ID AS ID_PRODUTO
,PRODUTOS.PRODUCT_CATEGORY_NAME AS
CATEGORIA_PRODUTO
,PRODUTOS.PRODUCT_PHOTOS_QTY
,ITENS.PRICE AS PRECO
,PAGAMENTOS.PAYMENT_TYPE AS TIPO_PAGAMENTO
,PAGAMENTOS.PAYMENT_VALUE AS VALOR_PAGAMENTO
FROM ORDER_ITEMS ITENS INNER JOIN PRODUCTS PRODUTOS
ON ITENS.PRODUCT_ID = PRODUTOS.PRODUCT_ID

INNER JOIN ORDERS PEDIDOS


ON PEDIDOS.ORDER_ID = ITENS.ORDER_ID

INNER JOIN ORDER_PAYMENTS PAGAMENTOS


ON PAGAMENTOS.ORDER_ID = PEDIDOS.ORDER_ID;

Adicionando uma clausula where


SELECT PEDIDOS.ORDER_ID AS ID_PEDIDO
,PRODUTOS.PRODUCT_ID AS ID_PRODUTO
,PRODUTOS.PRODUCT_CATEGORY_NAME AS
CATEGORIA_PRODUTO
,PRODUTOS.PRODUCT_PHOTOS_QTY
,ITENS.PRICE AS PRECO
,PAGAMENTOS.PAYMENT_TYPE AS TIPO_PAGAMENTO
,PAGAMENTOS.PAYMENT_VALUE AS VALOR_PAGAMENTO
FROM ORDER_ITEMS ITENS INNER JOIN PRODUCTS PRODUTOS
ON ITENS.PRODUCT_ID = PRODUTOS.PRODUCT_ID

INNER JOIN ORDERS PEDIDOS


ON PEDIDOS.ORDER_ID = ITENS.ORDER_ID

INNER JOIN ORDER_PAYMENTS PAGAMENTOS


ON PAGAMENTOS.ORDER_ID = PEDIDOS.ORDER_ID
WHERE PRODUTOS.PRODUCT_PHOTOS_QTY > 1;

CAST

A função CAST é utilizada para converter um valor de um tipo de dado para outro. Ela é
comumente usada em consultas SQL para garantir que o tipo de dado de uma expressão ou
coluna seja compatível com o que se espera.

SELECT CAST(PRICE AS INT) AS PRICE


FROM ORDER_ITEMS
WHERE CAST(PRICE AS INT) > 100;

LIMIT

A cláusula LIMIT é utilizada em consultas SQL para restringir o número de linhas retornadas
pelo resultado da consulta. Ela é frequentemente usada para exibir apenas um subconjunto
específico de registros de uma tabela.

SELECT PEDIDOS.ORDER_ID AS ID_PEDIDO


,PRODUTOS.PRODUCT_ID AS ID_PRODUTO
,PRODUTOS.PRODUCT_CATEGORY_NAME AS
CATEGORIA_PRODUTO
,PRODUTOS.PRODUCT_PHOTOS_QTY
,ITENS.PRICE AS PRECO
,PAGAMENTOS.PAYMENT_TYPE AS TIPO_PAGAMENTO
,PAGAMENTOS.PAYMENT_VALUE AS VALOR_PAGAMENTO
FROM ORDER_ITEMS ITENS INNER JOIN PRODUCTS PRODUTOS
ON ITENS.PRODUCT_ID = PRODUTOS.PRODUCT_ID

INNER JOIN ORDERS PEDIDOS


ON PEDIDOS.ORDER_ID = ITENS.ORDER_ID

INNER JOIN ORDER_PAYMENTS PAGAMENTOS


ON PAGAMENTOS.ORDER_ID = PEDIDOS.ORDER_ID
WHERE PRODUTOS.PRODUCT_PHOTOS_QTY > 1
LIMIT 200;

Obs: No SQL Server, a cláusula equivalente ao LIMIT do MySQL ou SQLite é o TOP. A


sintaxe básica é semelhante, mas a forma de uso pode variar um pouco. Aqui está um
exemplo:

-- SQL Server
SELECT TOP 10 coluna1, coluna2
FROM nome_da_tabela;

Criando um novo banco de dados

Para criar um novo banco de dados no SQLite abra seu prompt de comando e digite a linha
abaixo:
sqlite3 seu_novo_banco_de_dados.db
Para verificar se o banco está na lista de banco de dados, ainda no prompt de comando, você
pode passar o comando abaixo:

sqlite> .databases

Para criar uma nova tabela no banco, você pode clicar com o botão direito em tabelas e ir em
Insert

-- Inserindo um único registro


INSERT INTO Produtos (Nome, Marca)
VALUES ('streamlit', 'visualizacao');

-- Inserindo múltiplos registros


INSERT INTO Produtos (Nome, Marca)
VALUES ('sql', 'banco'),
('formacao', 'analise'),
('python', 'linguagem');

Update
A instrução UPDATE é usada para modificar os registros existentes em uma tabela.
-- Atualizar o campo 'Marca' para 'NovaMarca' onde o 'Nome' é 'sql'
UPDATE Produtos
SET Marca = 'banco_dados'
WHERE Nome = 'sql';

-- Colocando todas as marcas em letras maiúsculas


UPDATE PRODUTOS SET MARCA = UPPER(MARCA);

DELETE
A instrução DELETE é usada para remover registros de uma tabela
-- Deletar o registro onde o 'Nome' é 'python'
DELETE FROM Produtos
WHERE Nome = 'python';
Views
Uma view (visão) em um banco de dados é uma consulta salva que pode ser tratada como
uma tabela virtual. Ela não armazena dados fisicamente, mas fornece uma representação
estruturada dos dados presentes nas tabelas subjacentes. As views são úteis para simplificar
consultas complexas, encapsular lógica de negócios e proporcionar uma camada de abstração
sobre as tabelas subjacentes. Para criar uma view no SQLite você pode clicar com o botão
direito em views e em seguida criar uma view:

Você também pode gostar