SELECT * from HistoricoEmprego
WHERE datatermino ISNULL
ORDER by salario DESC
LIMIT 5;
SELECT * from HistoricoEmprego
WHERE datatermino NOTNULL
ORDER by salario DESC
LIMIT 5;
SELECT * FROM Treinamento;
SELECT * FROM Treinamento
WHERE curso like '%realizar%';
SELECT * from HistoricoEmprego
WHERE cargo = 'Professor'
and datatermino NOT NULL;
SELECT * from HistoricoEmprego
WHERE cargo = 'Oftalmologista'
OR cargo = 'Dermatologista';
SELECT * from HistoricoEmprego
WHERE cargo IN ('Oftalmologista', 'Dermatologista', 'Professor');
SELECT * from HistoricoEmprego
WHERE cargo not IN ('Oftalmologista', 'Dermatologista', 'Professor');
ELECT COUNT(*) from HistoricoEmprego
WHERE datatermino NOTNULL;
SELECT COUNT(*) from HistoricoEmprego
WHERE datatermino ISNULL;
SELECT * FROM Licencas;
SELECT COUNT(*) FROM Licencas
WHERE Tipolicenca = 'férias';
SELECT parentesco, COUNT(*) as Quantidade from Dependentes
group by parentesco;
select instituicao, COUNT(curso)
from Treinamento
GROUP by instituicao;
select instituicao, COUNT(curso)
from Treinamento
GROUP by instituicao
HAVING COUNT(curso) > 2;
SELECT cargo, COUNT(*) qtd
FROM HistoricoEmprego
GROUP by cargo
HAVING qtd >=2;
SELECT nome, length(cpf) Qtd
FROM Colaboradores
where Qtd = 11;
SELECT COUNT(*), LEngth(cpf) Qtd
FROM Colaboradores
WHERE Qtd = 11;
SELECT ('A pessoa colaboradora '|| nome ||' de CPF ' || cpf || ' possui o seguinte
endereço ' || endereco) as Texto
from Colaboradores;
SELECT upper('A pessoa colaboradora '|| nome ||' de CPF ' || cpf || ' possui o
seguinte endereço ' || endereco) as Texto
from Colaboradores;
SELECT lower('A pessoa colaboradora '|| nome ||' de CPF ' || cpf || ' possui o
seguinte endereço ' || endereco) as Texto
from Colaboradores;
SELECT * from Licencas;
SELECT id_colaborador, STRFTIME('%Y/%M', datainicio) from Licencas;
SELECT id_colaborador, JULIANDAY(datatermino) - JULIANDAY(datacontratacao)
FROM HistoricoEmprego
WHERE datatermino IS NOT NULL;
SELECT id_colaborador, JULIANDAY(datatermino) - JULIANDAY(datacontratacao) as
Qtd
FROM HistoricoEmprego
WHERE datatermino IS NOT NULL
and Qtd < 100;
SELECT AVG(faturamento_bruto), ROUND(AVG(faturamento_bruto),2) from
faturamento;
SELECT CEIL(faturamento_bruto), CEIL(despesas) from faturamento;
SELECT FLOOR(faturamento_bruto), FLOOR(despesas) from faturamento;
__________________________________________________________________________________
_______
SELECT (' O faturamento bruto médio foi ' || CAST
(ROUND(AVG(faturamento_bruto),2) As text))
from faturamento;
Olá! Nesta aula, aprendemos sobre a função CAST em SQLite, que converte um
tipo de dado em outro.
Pontos principais:
O que é: A função CAST permite transformar um tipo de dado (como
número) em outro (como texto) para realizar operações ou comandos
específicos.
Como usar: A sintaxe básica é CAST(valor AS tipo), onde "valor" é o dado
a ser convertido e "tipo" é o tipo de dado desejado.
Exemplo prático: Convertemos o valor médio do faturamento bruto (que
é um número) em texto para concatená-lo com uma frase, exibindo o
resultado como uma única linha de texto.
Ficou alguma dúvida ou gostaria de explorar algum ponto específico com mais
detalhes?
__________________________________________________________________________________
_______
SELECT id_colaborador, cargo, salario,
CASE
WHEN salario < 3000 THEN 'Baixo'
WHEN salario BETWEEN 3000 AND 6000 THEN 'Médio'
ELSE 'Alto'
end as categoria_salário
from HistoricoEmprego;
ALTER TABLE HistoricoEmprego RENAME to CargosColaboradores;
Os operadores lógicos são essenciais para construir consultas que exigem
múltiplas condições. Eles permitem uma combinação flexível de critérios para
filtrar resultados de uma forma que simples comparações não conseguem.
Entender a lógica desses operadores é crucial para manipular de forma eficiente
os dados e realizar análises complexas.
AND
O operador AND é usado quando todas as condições especificadas precisam ser
verdadeiras para que a linha seja incluída no resultado. Ele é útil para estreitar a
pesquisa.
Exemplo:
SELECT * FROM funcionarios WHERE departamento = 'Vendas' AND salario >
5000;
Copiar código
Este comando seleciona funcionários do departamento de vendas que ganham
mais de 5000. Ambas as condições devem ser verdadeiras para que um
funcionário seja incluído nos resultados.
OR
O operador OR é usado quando qualquer uma das condições especificadas
precisa ser verdadeira. Ele é usado para ampliar a pesquisa.
Exemplo:
SELECT * FROM funcionarios WHERE departamento = 'Vendas' OR
departamento = 'Marketing';
Copiar código
Este comando seleciona funcionários que trabalham em vendas ou marketing. Se
qualquer uma das condições for verdadeira, o funcionário será incluído nos
resultados.
NOT
O operador NOT inverte o resultado de uma condição. É frequentemente usado
com AND e OR para excluir linhas específicas.
Exemplo:
SELECT * FROM funcionarios WHERE NOT departamento = 'Recursos
Humanos';
Copiar código
Este comando seleciona todos os funcionários que não estão no departamento de
Recursos Humanos.
Você pode combinar esses operadores de maneiras complexas para criar
consultas que atendam a critérios específicos.
Exemplo:
SELECT * FROM funcionarios WHERE (departamento = 'TI' AND salario > 7000)
OR (departamento = 'Vendas' AND salario < 4000);
Copiar código
Esta consulta seleciona funcionários do departamento de TI que ganham mais de
7000 e funcionários do departamento de vendas que ganham menos de 4000. A
utilização de parênteses é crucial para garantir que as condições agrupadas
sejam avaliadas corretamente.
Considerações Importantes
A ordem das operações é fundamental: AND é avaliado antes de OR, a
menos que parênteses sejam usados para modificar a ordem.
A clareza da lógica é essencial para evitar erros, especialmente em
consultas mais complexas.
Testar as consultas com diferentes conjuntos de dados pode ajudar a
garantir que a lógica aplicada está correta.
Durante essa aula, entendemos como utilizar o comando LIKE e também os
operadores lógicos, além disso, entendemos a lógica por trás da utilização desses
operadores e por fim executamos algumas consultas mais complexas onde foi
possível trabalharmos com várias expressões ao mesmo tempo.
Começamos criando uma consulta para filtrar um treinamento específico para a
Fokus, porém a única informação que nos foi dada era que o nome desse
treinamento tinha como início a expressão “O poder”, então, para conseguir
filtrar esse dado incompleto, utilizamos o comando LIKE da seguinte forma:
SELECT * FROM Treinamento
WHERE curso LIKE 'O poder%';
Copiar código
Depois, filtramos todos os treinamentos que possuíam o termo “realizar” no meio
fazendo a seguinte consulta:
SELECT * from Treinamento
where curso LIKE '%realizar%';
Copiar código
Por fim, usamos o comando LIKE para consultar as informações de uma pessoa
colaboradora chamada Isadora, através da seguinte consulta:
SELECT * from Colaboradores
where nome LIKE 'Isadora%';
Copiar código
Depois, a Fokus solicitou que trouxéssemos o registro de alguma pessoa
colaboradora que tivesse o cargo de professor(a) e estivesse disponível para uma
nova vaga no momento, para isso, trabalhamos com o operador lógico AND, a
fim de trazer registros com mais de uma condição e fizemos a seguinte consulta:
SELECT * FROM HistoricoEmprego
WHERE cargo = 'Professor' AND
datatermino NOT NULL;
Copiar código
Fizemos também uma consulta para trazer os registros de pessoas colaboradora
que possuíssem o cargo de oftalmologista ou dermatologista usando o operador
lógico OR com o seguinte código:
SELECT * FROM HistoricoEmprego
WHERE cargo = 'Oftalmologista' OR
cargo = 'Dermatologista';
Copiar código
Filtramos também todos os registros com os cargos de oftalmologista,
dermatologista e professor utilizando a expressão IN, da seguinte forma:
SELECT * FROM HistoricoEmprego
WHERE cargo IN ('Oftalmologista', 'Dermatologista', 'Professor');
Copiar código
Além disso, também criamos uma consulta para filtrar todos os registros da
tabela HistoricoEmprego excluindo apenas essas mesma três profissões,
utilizando a expressão NOT IN, com a seguinte consulta:
SELECT * FROM HistoricoEmprego
WHERE cargo NOT IN ('Oftalmologista', 'Dermatologista', 'Professor');
Copiar código
Por fim, a Fokus solicitou que trouxéssemos os dados de dois cursos contidos na
tabela Treinamento e eles deveriam ser de uma determinada instituição, porém
a empresa não possuía o nome completo desses dois cursos, então fizemos uma
consulta utilizando algumas expressões que aprendemos até aqui como o LIKE e
os operadores lógicos:
SELECT * FROM Treinamento
WHERE (curso LIKE 'O direito%' AND instituicao = 'da Rocha')
OR (curso LIKE 'O conforto%' AND instituicao = 'das Neves')
A Fokus solicitou que buscássemos na tabela Faturamento algumas informações
como, por exemplo, o mês com o maior faturamento bruto e, para isso, utilizamos
a função de agregação MAX na seguinte consulta:
SELECT mes, MAX(faturamento_bruto) FROM faturamento;
Copiar código
Depois também trouxemos o mês com o menor faturamento bruto, usando a
função de agregação MIN dessa forma:
SELECT mes, MIN(faturamento_bruto) FROM faturamento;
Copiar código
A Fokus também nos pediu a soma do número de novos clientes no último ano,
para isso utilizamos a função de agregação SUM na seguinte consulta:
SELECT SUM(numero_novos_clientes) AS ‘Novos clientes 2023’ FROM
Faturamento
WHERE mes LIKE '%2023'
Copiar código
Além disso foi solicitado a média de despesas da empresa e a média de lucro
líquido e para isso, utilizamos a função de agregação AVG nas seguintes
consultas:
SELECT AVG(despesas) FROM faturamento;
Copiar código
SELECT AVG(lucro_liquido) FROM faturamento;
Copiar código
Depois disso, utilizamos a função de agregação COUNT para encontrar o número
de pessoas colaboradoras que estão desempregadas no momento fazendo o
seguinte comando:
SELECT COUNT(*) FROM HistoricoEmprego
WHERE datatermino NOT NULL;
Copiar código
Também usamos a mesma função para trazer a quantidade de pessoas
colaboradoras que tiraram licença de tipo férias através da seguinte consulta:
SELECT COUNT(*) from Licencas
WHERE tipolicenca = 'férias';
Copiar código
A próxima informação que nos foi solicitada era para trazermos os tipos de
parentesco existentes na tabela de dependentes, trazendo também a quantidade
de cada tipo, para isso, utilizamos a cláusula GROUP BY e fizemos a seguinte
consulta:
SELECT parentesco, COUNT(*) FROM Dependentes
GROUP BY parentesco;
Copiar código
A Fokus também desejava saber quais eram as instituições que possuíam mais
cursos feitos pelas pessoas colaboradoras na tabela de treinamento, para isso,
utilizamos a cláusula HAVING da seguinte forma:
SELECT instituicao, COUNT(curso)
FROM Treinamento
GROUP BY instituicao
HAVING COUNT(curso) > 2;
Copiar código
Por fim, usamos a cláusula HAVING para trazer também os cargos que se
repetiam duas ou mais vezes na tabela HistoricoEmprego, fazendo a seguinte
consulta:
SELECT cargo, COUNT(*) qtd
FROM HistoricoEmprego
GROUP BY cargo
HAVING qtd >=2;
A cláusula HAVING em SQL é utilizada para especificar condições de filtro que se
aplicam a grupos de registros, em contraste com a cláusula WHERE, que se aplica
a registros individuais. No SQLite, assim como em outros sistemas de
gerenciamento de banco de dados, HAVING é frequentemente usada em conjunto
com instruções de agregação (GROUP BY), permitindo filtrar os resultados dessas
agregações.
Funcionalidade da Cláusula HAVING
HAVING especifica uma condição para um grupo criado pela
cláusula GROUP BY.
É útil quando você deseja aplicar um filtro que não pode ser aplicado antes
da agregação dos dados.
Funciona como uma cláusula WHERE pós-agregação.
Exemplo Básico
Considere uma tabela vendas com colunas vendedor_id, valor_venda,
e data_venda. Se você quiser saber quais vendedores tiveram um total de vendas
superior a um determinado valor, você usaria HAVING:
SELECT vendedor_id, SUM(valor_venda) AS total_vendas
FROM vendas
GROUP BY vendedor_id
HAVING total_vendas > 10000;
Copiar código
Neste exemplo, a cláusula GROUP BY agrupa as vendas por vendedor_id,
e HAVING filtra esses grupos, mantendo apenas aqueles onde o total de vendas é
maior que 10.000.
Diferença entre WHERE e HAVING
WHERE é usado para filtrar registros antes de qualquer agrupamento.
HAVING é usado para filtrar grupos criados pela cláusula GROUP BY.
Uso no SQLite
No SQLite, a cláusula HAVING funciona da mesma maneira que em outros SGBDs.
É uma ferramenta poderosa para consultas que envolvem agregação de dados,
especialmente útil em análises onde você precisa filtrar baseado no resultado de
uma função de agregação como SUM, AVG, MAX, MIN, etc.
Importante
Sempre que usar HAVING, geralmente você terá uma cláusula GROUP BY na
sua consulta.
A ordem das cláusulas em uma consulta SQL é importante: SELECT -
> FROM -> WHERE -> GROUP BY -> HAVING -> ORDER BY.
HAVING pode ser usado sem GROUP BY, mas seu uso nesse caso é limitado
e menos comum.
Em resumo, HAVING é uma parte crucial da linguagem SQL para análises e
relatórios complexos, permitindo aos usuários do SQLite e de outros SGBDs filtrar
dados agregados de acordo com critérios específicos.
A Fokus solicitou que buscássemos na tabela Faturamento algumas informações
como, por exemplo, o mês com o maior faturamento bruto e, para isso, utilizamos
a função de agregação MAX na seguinte consulta:
SELECT mes, MAX(faturamento_bruto) FROM faturamento;
Copiar código
Depois também trouxemos o mês com o menor faturamento bruto, usando a
função de agregação MIN dessa forma:
SELECT mes, MIN(faturamento_bruto) FROM faturamento;
Copiar código
A Fokus também nos pediu a soma do número de novos clientes no último ano,
para isso utilizamos a função de agregação SUM na seguinte consulta:
SELECT SUM(numero_novos_clientes) AS ‘Novos clientes 2023’ FROM
Faturamento
WHERE mes LIKE '%2023'
Copiar código
Além disso foi solicitado a média de despesas da empresa e a média de lucro
líquido e para isso, utilizamos a função de agregação AVG nas seguintes
consultas:
SELECT AVG(despesas) FROM faturamento;
Copiar código
SELECT AVG(lucro_liquido) FROM faturamento;
Copiar código
Depois disso, utilizamos a função de agregação COUNT para encontrar o número
de pessoas colaboradoras que estão desempregadas no momento fazendo o
seguinte comando:
SELECT COUNT(*) FROM HistoricoEmprego
WHERE datatermino NOT NULL;
Copiar código
Também usamos a mesma função para trazer a quantidade de pessoas
colaboradoras que tiraram licença de tipo férias através da seguinte consulta:
SELECT COUNT(*) from Licencas
WHERE tipolicenca = 'férias';
Copiar código
A próxima informação que nos foi solicitada era para trazermos os tipos de
parentesco existentes na tabela de dependentes, trazendo também a quantidade
de cada tipo, para isso, utilizamos a cláusula GROUP BY e fizemos a seguinte
consulta:
SELECT parentesco, COUNT(*) FROM Dependentes
GROUP BY parentesco;
Copiar código
A Fokus também desejava saber quais eram as instituições que possuíam mais
cursos feitos pelas pessoas colaboradoras na tabela de treinamento, para isso,
utilizamos a cláusula HAVING da seguinte forma:
SELECT instituicao, COUNT(curso)
FROM Treinamento
GROUP BY instituicao
HAVING COUNT(curso) > 2;
Copiar código
Por fim, usamos a cláusula HAVING para trazer também os cargos que se
repetiam duas ou mais vezes na tabela HistoricoEmprego, fazendo a seguinte
consulta:
SELECT cargo, COUNT(*) qtd
FROM HistoricoEmprego
GROUP BY cargo
HAVING qtd >=2;
No SQLite, assim como em muitos outros sistemas de gerenciamento de banco
de dados, existem várias funções de string que permitem manipular e analisar
dados textuais de maneiras diversas. Vamos explorar como funcionam e como
utilizar algumas dessas funções essenciais:
Função TRIM
Funcionalidade: A função TRIM remove espaços (ou outro conjunto
especificado de caracteres) do início e do fim de uma string.
Sintaxe Básica: TRIM(string, [caractere_para_trimar])
Exemplo de Uso: Para remover espaços do início e do fim da
coluna nome:
SELECT TRIM(nome) FROM tabela;
Copiar código
Função INSTR
Funcionalidade: INSTR retorna a posição de uma substring dentro de uma
string. Equivalente ao CHARINDEX em alguns outros sistemas.
Sintaxe Básica: INSTR(string, substring)
Exemplo de Uso: Para encontrar a posição da substring 'abc' dentro da
coluna descricao:
SELECT INSTR(descricao, 'abc') FROM tabela;
Copiar código
Isso retornará um número indicando a posição inicial de 'abc' em descricao, ou 0
se 'abc' não for encontrado.
Função REPLACE
Funcionalidade: REPLACE substitui todas as ocorrências de uma substring
específica por outra substring dentro de uma string.
Sintaxe Básica: REPLACE(string, substring_a_substituir,
substring_para_substituir)
Exemplo de Uso: Para substituir 'hello' por 'hi' na coluna saudacao:
SELECT REPLACE(saudacao, 'hello', 'hi') FROM tabela;
Copiar código
Função SUBSTR (ou SUBSTRING em alguns sistemas)
Funcionalidade: SUBSTR extrai uma parte de uma string com base em um
ponto de início e um comprimento especificados.
Sintaxe Básica: SUBSTR(string, inicio[, comprimento])
Exemplo de Uso: Para extrair os primeiros 5 caracteres da
coluna comentario:
SELECT SUBSTR(comentario, 1, 5) FROM tabela;
Copiar código
Se comprimento não for especificado, SUBSTR retornará todos os caracteres a
partir da posição inicio até o final da string.
Considerações Importantes
Ao trabalhar com TRIM, se nenhum caractere específico for fornecido para
remoção, ele removerá espaços por padrão.
A função INSTR é particularmente útil para localizar substrings e pode ser
usada em operações mais complexas, como extrações condicionais ou
verificação de presença de padrões.
REPLACE é uma ferramenta poderosa para limpeza e formatação de dados,
sendo capaz de alterar padrões específicos em uma grande quantidade de
texto.
SUBSTR é amplamente utilizada para cortar e analisar partes de strings,
especialmente quando combinada com outras funções como INSTR.
No SQLite Online, essas funções podem ser usadas exatamente como descrito
acima. Elas são essenciais para a manipulação de dados textuais, permitindo
uma variedade de operações de limpeza, formatação, extração e substituição,
facilitando assim a análise e a interpretação dos dados.
O SQLite oferece várias funções integradas para manipular e trabalhar com
valores de data e hora, permitindo que os usuários realizem operações
complexas e obtenham informações valiosas a partir de seus dados temporais.
Vamos conhecer algumas delas e quais os resultados que elas podem gerar em
nossas consultas:
Função DATE
Funcionalidade: A função DATE é usada para extrair a data de um valor
de data e hora ou para obter a data atual. Ela retorna a data no formato
'YYYY-MM-DD'.
Sintaxe Básica: DATE('now', '[modificador]')
Exemplo de Uso: Para obter a data atual:
SELECT DATE('now');
Para obter a data 10 dias atrás:
SELECT DATE('now', '-10 days');
Função TIME
Funcionalidade: A função TIME é usada para extrair a hora de um valor de
data e hora ou para obter a hora atual. Ela retorna a hora no formato
'HH:MM:SS'.
Sintaxe Básica: TIME('now', '[modificador]')
Exemplo de Uso: Para obter a hora atual:
SELECT TIME('now');
Função DATETIME
Funcionalidade: DATETIME é uma função mais abrangente que retorna
tanto a data quanto a hora no formato 'YYYY-MM-DD HH:MM:SS'. Pode ser
usada para obter o momento atual ou converter/modificar valores de data e
hora existentes.
Sintaxe Básica: DATETIME('now', '[modificador]')
Exemplo de Uso: Para obter a data e hora atuais:
SELECT DATETIME('now');
Para obter a data e hora exatas 1 ano no futuro:
SELECT DATETIME('now', '+1 year');
Função CURRENT_TIMESTAMP
Funcionalidade: CURRENT_TIMESTAMP é uma função de conveniência que
retorna a data e hora atuais no formato 'YYYY-MM-DD HH:MM:SS'. É
equivalente a usar DATETIME('now').
Sintaxe Básica: CURRENT_TIMESTAMP
Exemplo de Uso: Para obter o timestamp atual:
SELECT CURRENT_TIMESTAMP;
Considerações Importantes
Os modificadores, como '-10 days' ou '+1 year', são usados para ajustar a
data/hora retornada. Eles podem ser combinados para representar períodos
específicos de tempo.
Essas funções são extremamente úteis para gerar e manipular dados de
data e hora, permitindo cálculos temporais, conversões e a extração de
componentes específicos.
O conhecimento preciso de como as datas e horas são armazenadas e
manipuladas em seu sistema de banco de dados é crucial para utilizar
essas funções efetivamente e evitar erros comuns relacionados a fusos
horários e formatos.
No SQLite Online, você pode usar essas funções diretamente nas suas consultas
SQL para trabalhar com datas e horas, realizar cálculos temporais, e extrair
informações relevantes de seus dados baseados no tempo.
O SQLite fornece várias funções matemáticas que permitem realizar cálculos
complexos e manipulações numéricas diretamente dentro das consultas SQL.
Vamos entender algumas dessas funções e exemplos de como utilizá-las:
Função POWER
Funcionalidade: POWER é usada para elevar um número a uma potência
específica.
Sintaxe Básica: POWER(base, expoente)
Exemplo de Uso: Para elevar 2 à 3ª potência:
SELECT POWER(2, 3);
Copiar código
Isso retornará 8, que é 2^3.
Função SQRT
Funcionalidade: SQRT retorna a raiz quadrada de um número.
Sintaxe Básica: SQRT(numero)
Exemplo de Uso: Para encontrar a raiz quadrada de 16:
SELECT SQRT(16);
Copiar código
Isso retornará 4, que é a raiz quadrada de 16.
Função RANDOM
Funcionalidade: RANDOM gera um número inteiro aleatório entre -
9223372036854775808 e +9223372036854775807.
Sintaxe Básica: RANDOM()
Exemplo de Uso: Para gerar um número aleatório:
SELECT RANDOM();
Copiar código
Cada chamada retornará um número inteiro aleatório diferente.
Função ABS
Funcionalidade: ABS retorna o valor absoluto de um número, que é o
número sem seu sinal.
Sintaxe Básica: ABS(numero)
Exemplo de Uso: Para obter o valor absoluto de -5:
SELECT ABS(-5);
Copiar código
Isso retornará 5.
Função HEX
Funcionalidade: HEX converte um número ou uma string para a sua forma
hexadecimal.
Sintaxe Básica: HEX(string)
Exemplo de Uso: Para converter 255 para hexadecimal:
Isso retornará 'FF'. E para converter a string 'hello':
SELECT HEX('hello');
Copiar código
Isso retornará '68656C6C6F', que é a representação hexadecimal da string 'hello'.
Considerações Importantes
POWER e SQRT são particularmente úteis para cálculos científicos e
financeiros.
RANDOM é útil para situações onde você precisa de dados aleatórios, como
na criação de amostras ou em simulações.
ABS é frequentemente usado em análises matemáticas e estatísticas para
garantir que apenas a magnitude de um número seja considerada.
HEX é útil para trabalhos com sistemas que usam representações
hexadecimais, como trabalhos com cores na web ou com dados binários.
No SQLite Online, você pode usar essas funções diretamente em suas consultas
para realizar uma variedade de cálculos e transformações numéricas, auxiliando
em análises complexas e na manipulação de dados.
As funções de conversão em SQL são usadas para alterar o tipo de dados de uma
expressão ou coluna. Essas funções são fundamentais para manipular e preparar
dados para análise, relatórios e operações de banco de dados. Abaixo, estão
algumas das funções de conversão mais comuns e os sistemas de gerenciamento
de banco de dados (SGBDs) em que elas funcionam normalmente.
1. CAST
Funcionalidade: Converte um tipo de dados de uma expressão para outro
tipo especificado.
SGBDs Compatíveis: Quase todos os SGBDs principais, incluindo MySQL,
PostgreSQL, SQL Server, SQLite e Oracle. Única função de conversão
disponível no SQLite online.
Sintaxe: CAST(expressao AS tipo)
2. CONVERT
Funcionalidade: Semelhante ao CAST, mas com uma sintaxe ligeiramente
diferente e, em alguns SGBDs, recursos adicionais.
SGBDs Compatíveis: Principalmente SQL Server e MySQL. A
função CONVERT no MySQL é usada mais comumente para conversão de
codificação de caracteres, não tipos de dados.
Sintaxe (SQL Server): CONVERT(tipo, expressao [, estilo])
3. TO_NUMBER, TO_CHAR, TO_DATE (Funções específicas do Oracle)
Funcionalidade: Converte strings para números (TO_NUMBER), números
ou datas para strings (TO_CHAR), e strings para datas (TO_DATE).
SGBDs Compatíveis: Oracle.
Sintaxe: TO_NUMBER(string [, formato [, 'nlsparam']]), TO_CHAR(valor [,
formato [, 'nlsparam']]), TO_DATE(string [, formato [, 'nlsparam']])
4. PARSE, TRY_PARSE, TRY_CONVERT (SQL Server)
Funcionalidade: PARSE tenta converter uma string para um tipo de dados
numérico ou de data/hora com um estilo de cultura
opcional. TRY_PARSE e TRY_CONVERT são versões mais seguras que
retornam NULL em vez de um erro se a conversão falhar.
SGBDs Compatíveis: SQL Server.
Sintaxe: PARSE(string AS tipo USING cultura), TRY_PARSE(string AS tipo
USING cultura), TRY_CONVERT(tipo, expressao [, estilo])
5. STR_TO_DATE (MySQL)
Funcionalidade: Converte uma string em um formato de data
especificado para uma data.
SGBDs Compatíveis: MySQL.
Sintaxe: STR_TO_DATE(string, formato)
6. TO_NUMBER, TO_CHAR (PostgreSQL)
Funcionalidade: TO_NUMBER converte uma string para um número,
e TO_CHAR converte um número ou data para uma string, ambos com base
em um formato especificado.
SGBDs Compatíveis: PostgreSQL.
Sintaxe: TO_NUMBER(string, formato), TO_CHAR(valor, formato)
Considerações Importantes:
Compatibilidade: Sempre verifique a documentação específica do seu
SGBD para entender a disponibilidade e o uso exato de cada função, pois
pode haver pequenas variações na sintaxe e no comportamento.
Uso Cuidadoso: A conversão de tipos de dados deve ser feita com
cuidado, especialmente ao converter entre numéricos e strings ou ao lidar
com datas, para evitar erros ou resultados inesperados.
Dependência da Versão: Alguns SGBDs podem adicionar, modificar ou
depreciar funções em diferentes versões, então é importante considerar a
versão específica que você está usando.
A Fokus nos trouxe algumas demandas de informações específicas contidas no
banco de dados, a primeira delas foi conferirmos se todos os registros da
tabela Colaboradores estavam com o número do CPF preenchido corretamente,
ou seja, se todos os CPFs continham 11 dígitos em seu campo. Para isso,
utilizamos a função de string LENGTH, que conta a quantidade de caracteres
presente em um determinado campo de texto da nossa tabela, fizemos a
seguinte consulta:
SELECT COUNT(*), LENGTH(cpf) qtd
FROM Colaboradores
WHERE qtd = 11;
Copiar código
Depois, a Fokus solicitou que trouxéssemos informações como o nome das
pessoas colaboradoras, seus CPFs e seus endereços de forma mais integrada
como em uma frase curta, para isso utilizamos a função de string CONCAT, que
no SQLite Online é representada pelo operador concatenador ||, essa função nos
ajudou a criar uma pequena frase concatenando textos com informações contidas
nas colunas da tabela Colaboradores através da seguinte consulta:
SELECT ('A pessoa colaboradora ' || nome || ' de CPF ' || cpf || ' possui o seguinte
endereço: '
|| endereco) as texto
FROM Colaboradores;
Copiar código
Nessa mesma consulta testamos as funções de string UPPER e LOWER, que
deixam todo o texto todo com letras maiúsculas e minúsculas respectivamente:
SELECT UPPER('A pessoa colaboradora ' || nome || ' de CPF ' || cpf || ' possui o
seguinte endereço: '
|| endereco) as texto
from Colaboradores;
Copiar código
SELECT LOWER('A pessoa colaboradora ' || nome || ' de CPF ' || cpf || ' possui o
seguinte endereço: '
|| endereco) as texto
from Colaboradores;
Copiar código
A Fokus também solicitou algumas informações que demandou a aplicação de
funções específicas para lidar com dados do tipo data, a primeira delas é que a
gente trouxesse a data de início das licenças das pessoas colaboradoras em um
formato diferente do que estava apresentado na tabela Licenças, para isso
utilizamos a função STRFTIME que nos possibilita determinar o formato que
desejamos que os dados do tipo data retornem em nossas consultas.
Nesse caso, a Fokus gostaria que as datas retornassem no formato ano/mês,
então fizemos a seguinte consulta:
SELECT id_colaborador, STRFTIME('%Y/%m', datainicio) FROM Licencas;
Copiar código
Depois a Fokus nos pediu para trazermos a informação de quanto tempo cada
pessoa colaboradora tinha permanecido em seu contrato de trabalho, apenas os
contratos que já haviam finalizado, então usamos a função JULIANDAY que
consegue calcular a diferença em dias entre datas especificadas. Fizemos o
seguinte comando:
SELECT id_colaborador, JULIANDAY (datatermino) - JULIANDAY (datacontratacao)
FROM HistoricoEmprego
WHERE datatermino IS NOT NULL;
Copiar código
Também foi solicitado que trouxéssemos a informação da média do faturamento
bruto arredondada com apenas duas casas decimais, para isso usamos a função
numérica ROUND que um valor com a quantidade de casas decimais que
determinamos em nossa consulta. Fizemos a seguinte sintaxe:
SELECT AVG(faturamento_bruto), ROUND (AVG(faturamento_bruto),2) FROM
faturamento;
Copiar código
Testamos também as funções numéricas CEIL e FLOOR para arredondar o
faturamento bruto e as despesas para o próximo número inteiro e para o número
inteiro anterior, respectivamente usando as seguintes consultas:
SELECT CEIL(faturamento_bruto), CEIL(despesas) FROM faturamento;
Copiar código
SELECT FLOOR(faturamento_bruto), FLOOR(despesas) FROM faturamento;
Copiar código
Por fim, a Fokus gostaria de trazer a informação do faturamento bruto médio
dentro de uma frase, assim como fizemos com as informações das pessoas
colaboradores, porém para concatenar textos com colunas que possuem
informações com outros tipos de dados, nesse caso, dados numéricos, seria
necessário fazer a conversão desses dados para texto, então fizemos isso
utilizando a função de conversão CAST, que converte um dado para o tipo que
determinarmos em nossa consulta.
Fizemos a seguinte sintaxe:
SELECT (' O faturamento bruto médio foi ' || CAST(ROUND
(AVG(faturamento_bruto),2) AS TEXT))
FROM faturamento;
A cláusula CASE em SQL é uma expressão condicional, semelhante às instruções
"if-else" em linguagens de programação. Ela permite que você execute diferentes
cálculos ou operações em seus dados com base em condições específicas. Essa
funcionalidade é extremamente útil para transformar dados, realizar cálculos
condicionais e categorizar informações dentro de suas consultas SQL.
Estrutura Básica
A cláusula CASE tem duas formas principais: a forma simples e a forma
pesquisada.
1. Forma Simples:
2. CASE expressao
3. WHEN valor1 THEN resultado1
4. WHEN valor2 THEN resultado2
5. ...
6. ELSE resultado_padrao
7. END
Copiar código
Aqui, expressao é avaliada e comparada sequencialmente com cada valorN. Se
uma correspondência é encontrada, o resultadoN correspondente é retornado.
8. Forma Pesquisada:
9. CASE
10. WHEN condicao1 THEN resultado1
11. WHEN condicao2 THEN resultado2
12. ...
13. ELSE resultado_padrao
14. END
Copiar código
Nesta forma, cada condicaoN é uma expressão booleana. O resultadoN para a
primeira condição verdadeira é retornado.
Exemplos Práticos
1. Classificar dados em categorias:
o Suponha que você tenha uma tabela de Pedidos com uma
coluna TotalVenda. Você quer classificar cada venda em 'Baixa',
'Média' ou 'Alta':
o SELECT PedidoID,
o CASE
o WHEN TotalVenda < 100 THEN 'Baixa'
o WHEN TotalVenda BETWEEN 100 AND 500 THEN 'Média'
o ELSE 'Alta'
o END AS CategoriaVenda
o FROM Pedidos;
Copiar código
2. Aplicar cálculos condicionais:
o Digamos que você queira dar um desconto de 10% para pedidos
acima de $500 e um desconto de 5% para pedidos entre $100 e
$500:
o SELECT PedidoID, TotalVenda,
o CASE
o WHEN TotalVenda > 500 THEN TotalVenda * 0.9
o WHEN TotalVenda BETWEEN 100 AND 500 THEN TotalVenda *
0.95
o ELSE TotalVenda
o END AS TotalComDesconto
o FROM Pedidos;
Copiar código
Considerações Importantes
Performance: O uso excessivo de instruções CASE pode afetar a
performance da consulta, especialmente em grandes conjuntos de dados.
Legibilidade: Embora a cláusula CASE seja poderosa, consultas muito
complexas podem se tornar difíceis de ler e manter.
Compatibilidade: A cláusula CASE é amplamente suportada pela maioria
dos SGBDs, tornando-a uma ferramenta versátil para análise de dados.
Adotar boas práticas de nomenclatura para tabelas e colunas em um banco de
dados é crucial para manter a consistência, legibilidade e eficiência ao longo do
tempo, especialmente à medida que o banco de dados cresce e mais pessoas
começam a trabalhar com ele. Existem algumas diretrizes gerais e boas práticas
que valem a pena levarmos em consideração como:
1. Clareza e Descritividade:
Nomes Significativos: Escolha nomes que reflitam claramente o
conteúdo e a função da tabela ou coluna. Por exemplo, uma tabela que
armazena informações sobre clientes pode ser chamada
de Clientes ou InformacoesClientes.
Evite Abreviações Obscuras: Abreviações podem tornar os nomes mais
curtos, mas devem ser evitadas a menos que sejam amplamente
compreendidas e consistentes em todo o banco de dados.
2. Consistência:
Convenção de Nomenclatura: Escolha uma convenção de nomenclatura
e seja fiel a ela em todo o banco de dados. Por exemplo, se você usar
nomes no singular para tabelas (Cliente), use isso consistentemente. O
mesmo vale para a capitalização; escolha entre PascalCase, camelCase ou
snake_case e seja consistente.
Padrões de Nomenclatura de Coluna: Mantenha um padrão para nomes
de colunas semelhantes em diferentes tabelas. Por exemplo, se uma coluna
que se refere a um identificador único é nomeada IdCliente em uma tabela,
não a nomeie ClienteID em outra.
3. Evitar Palavras Reservadas:
Palavras do SQL: Evite usar palavras reservadas do SQL como nomes de
tabelas ou colunas, como SELECT, DATE, TABLE, etc. Isso pode causar
conflitos e erros em consultas.
4. Precisão e Escopo:
Especificidade: Nomes de colunas devem ser precisos. Por exemplo, em
vez de chamar uma coluna de Data, nomeie-a
como DataNascimento ou DataContratacao, dependendo do contexto.
Qualificação de Nomes: Em um banco de dados com muitas tabelas
relacionadas, pode ser útil incluir uma referência à tabela pai no nome de
uma coluna de chave estrangeira. Por exemplo, IdCliente em uma tabela de
pedidos.
5. Simplicidade e Tamanho:
Nomes Curtos, Mas Descritivos: Enquanto a descritividade é
importante, nomes excessivamente longos podem ser problemáticos para
digitar e podem não ser totalmente suportados por todos os sistemas de
banco de dados.
6. Utilizar Sublinhados para Espaços:
Sem Espaços: Não use espaços em nomes de tabelas ou colunas. Use
sublinhados (_) se necessário para separar palavras.
7. Documentação:
Mantenha Documentação: Documente as convenções de nomenclatura
e as decisões específicas de nomes para facilitar a compreensão e
manutenção por outros usuários e desenvolvedores.
8. Idioma:
Considere o Idioma Padrão: Use um idioma consistente (geralmente
inglês) para nomes de tabelas e colunas, a menos que haja uma razão
específica para não fazê-lo.
Ao seguir essas práticas recomendadas, você facilitará muito a manutenção, a
compreensão e a colaboração em seu banco de dados. Um sistema de
nomenclatura claro e consistente é um investimento que economiza tempo e
evita confusões à medida que o banco de dados evolui e é utilizado por
diferentes pessoas.
Chegou a hora de se desafiar a desenvolver ainda mais todo o conhecimento
aprendido durante nossa jornada!
Aqui estão algumas atividades que vão te ajudar a praticar e fixar ainda mais
cada conteúdo e caso você precise de ajuda, opções de solução das atividades
estão disponíveis na seção Opinião da pessoa instrutora.
Abaixo estão 10 exercícios de SQL que abrangem uma variedade de tópicos,
desde funções de agregação e string até operadores lógicos e cláusulas de
filtragem. Esses exercícios são projetados para serem aplicados em um
banco de dados genérico e podem precisar de ajustes para se adequarem a
esquemas específicos.
1. Selecione os primeiros 5 registros da tabela clientes, ordenando-os pelo
nome em ordem crescente.
2. Encontre todos os produtos na tabela produtos que não têm uma descrição
associada (suponha que a coluna de descrição possa ser nula).
3. Liste os funcionários cujo nome começa com 'A' e termina com 's' na
tabela funcionarios.
4. Exiba o departamento e a média salarial dos funcionários em cada
departamento na tabela funcionarios, agrupando por departamento,
apenas para os departamentos cuja média salarial é superior a $5000.
5. Selecione todos os clientes da tabela clientes e concatene o primeiro e o
último nome, além de calcular o comprimento total do nome completo.
6. Para cada venda na tabela vendas, exiba o ID da venda, a data da venda e
a diferença em dias entre a data da venda e a data atual.
7. Selecione todos os itens da tabela pedidos e arredonde o preço total para o
número inteiro mais próximo.
8. Converta a coluna data_string da tabela eventos, que está em formato de
texto (YYYY-MM-DD), para o tipo de data e selecione todos os eventos após
'2023-01-01'.
9. Na tabela avaliacoes, classifique cada avaliação como 'Boa', 'Média', ou
'Ruim' com base na pontuação: 1-3 para 'Ruim', 4-7 para 'Média', e 8-10
para 'Boa'.
10. Altere o nome da coluna data_nasc para data_nascimento na
tabela funcionarios e selecione todos os funcionários que nasceram após
'1990-01-01'.
Podem existir diversas formas de solucionar os problemas propostos e algumas
delas são apresentadas a seguir:
Exercício 1
SELECT * FROM clientes ORDER BY nome ASC LIMIT 5;
Copiar código
Exercício 2
SELECT * FROM produtos WHERE descricao IS NULL;
Copiar código
Exercício 3
SELECT * FROM funcionarios WHERE nome LIKE 'A%' AND nome LIKE '%s';
Copiar código
Exercício 4
SELECT departamento, AVG(salario) AS media_salarial
FROM funcionarios
GROUP BY departamento
HAVING AVG(salario) > 5000;
Copiar código
Exercício 5
SELECT nome || ' ' || sobrenome AS nome_completo, LENGTH(nome || ' ' ||
sobrenome) AS comprimento_nome
FROM clientes;
Copiar código
Exercício 6
SELECT id, data_venda, julianday('now') - julianday(data_venda) AS
diferenca_dias
FROM vendas;
Copiar código
Exercício 7
SELECT id, ROUND(preco_total) AS preco_arredondado
FROM pedidos;
Copiar código
Exercício 8
SELECT *
FROM eventos
WHERE CAST(data_string AS DATE) > '2023-01-01';
Copiar código
Exercício 9
SELECT id,
CASE
WHEN pontuacao BETWEEN 1 AND 3 THEN 'Ruim'
WHEN pontuacao BETWEEN 4 AND 7 THEN 'Média'
ELSE 'Boa'
END AS classificacao
FROM avaliacoes;
Copiar código
Exercício 10
-- Renomeando a coluna
ALTER TABLE funcionarios RENAME COLUMN data_nasc TO data_nascimento;
-- Selecionando funcionários
SELECT * FROM funcionarios WHERE CAST(data_nascimento AS DATE) >
'1990-01-01';
Em aula, atendemos às últimas demandas da Fokus, ela nos pediu que
criássemos uma condição de classificação para a coluna de salário e para isso
utilizamos a cláusula CASE da seguinte forma:
SELECT id_colaborador, cargo, salario,
CASE
WHEN salario < 3000 THEN 'Baixo'
when salario between 3000 and 6000 then 'Médio'
else 'Alto'
END AS categoria_salario
from HistoricoEmprego;
Copiar código
Por último a Fokus solicitou que mudássemos o nome de uma das tabelas, então
fizemos isso utilizando a expressão RENAME no seguinte comando:
ALTER TABLE HistoricoEmprego RENAME TO CargosColaboradores;
Agora que você já concluiu os seus estudos no curso SQLite Online:
executando consultas SQL, chegou o momento de continuar a desenvolver o
desafio, onde você pode realizar novas consultas para colocar em prática todos
os conhecimentos adquiridos até o momento.
Para desenvolver esse desafio, você irá utilizar o banco de dados criado no
desafio 1, mas não se preocupe, se você não construiu ou não tem mais o banco
de dados disponível, baixe o banco já estruturado aqui e importe no SQLite
online!
Contexto
Agora que temos nossas tabelas devidamente criadas e populadas com dados de
exemplo, vamos explorar como realizar consultas SQL para extrair informações
úteis dessas tabelas.
Desafio
Vamos considerar algumas consultas típicas que podem ser realizadas em um
sistema de gerenciamento escolar.
Consulta 1: Retornar a média de Notas dos Alunos em história.
Consulta 2: Retornar as informações dos alunos cujo Nome começa com
'A'.
Consulta 3: Buscar apenas os alunos que fazem aniversário em
fevereiro.
Consulta 4: Realizar uma consulta que calcula a idade dos Alunos.
Consulta 5: Retornar se o aluno está ou não aprovado. Aluno é
considerado aprovado se a sua nota foi igual ou maior que 6.
1. Retornar a média de Notas dos Alunos em história.
2. SELECT AVG(nota) média FROM Notas
3. WHERE id_disciplina = 2;
Copiar código
4. Retornar as informações dos alunos cujo Nome começa com 'A'.
5. SELECT * FROM alunos
6. WHERE nome_aluno like ('A%');
Copiar código
7. Buscar apenas os alunos que fazem aniversário em fevereiro.
8. SELECT * FROM Alunos
9. WHERE STRFTIME('%m', data_nascimento) = '02';
Copiar código
10. Realizar uma consulta que calcula a idade dos Alunos.
SELECT nome_aluno,
data_nascimento,
(strftime('%Y', CURRENT_DATE) - strftime('%Y', data_nascimento)) -
(strftime('%m-%d', CURRENT_DATE) < strftime('%m-%d', data_nascimento))
AS idade
FROM Alunos;
Copiar código
1. Retornar se o aluno está ou não aprovado. Aluno é considerado aprovado se
a sua nota foi igual ou maior que 6.
2. SELECT
3. ID_Aluno As aluno,
4. nota,
5. CASE WHEN nota >= 6 THEN 'APROVADO'
6. ELSE 'REPROVADO' END
7. AS Resultado
8. FROM Notas;
Copiar código
Essas são apenas algumas consultas de exemplo que podem ser realizadas em
um banco de dados escolar. Com SQL, você pode explorar e extrair informações
de maneira eficaz e personalizada de acordo com as necessidades do sistema. As
consultas podem ser adaptadas para atender a diferentes cenários e requisitos
específicos. Então, continue a explorar os dados que estão armazenados nas
tabelas.