SQL Study
SQL Study
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:
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.
O ponto e vírgula no final é um delimitador de um código SQL, significa que acabou a sua instrução
SQL.
,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.
SELECT ORDER_ID
,PAYMENT_TYPE
, PAYMENT_VALUE
, ROUND(PAYMENT_VALUE * 1.05, 2) AS TAXED_VALUE
FROM ORDER_PAYMENTS;
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;
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
GROUPBY
NOME_DO_PRODUTO SUM(QUANTIDADE)
F3LOC 8
SQL 6
STREAMLIT 5
Arredondamento da soma
SELECT PAYMENT_TYPE
,ROUND(SUM(PAYMENT_VALUE),2)
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
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;
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.
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.
-- SQL Server
SELECT TOP 10 coluna1, coluna2
FROM nome_da_tabela;
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
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';
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: