Comando DQL - SELECT
O comando SELECT
é usado para consultar os dados armazenados em tabelas. Ele permite a projeção de campos específicos e a seleção de registros com base em condições.
Selecionando Todos os Dados de Uma Tabela
SELECT * FROM tabela;
Exemplo:
SELECT * FROM emp;
Projetando Campos Específicos
SELECT coluna1, coluna2 FROM tabela
Exemplo:
SELECT nome, salario FROM funcionarios;
Filtrando Dados
Usando a Cláusula WHERE
SELECT coluna1, coluna2 FROM tabela WHERE condição;
Exemplo:
SELECT nome, cargo FROM funcionarios WHERE salario > 3000;
Operadores de Comparação
=
: Igual.<>
: Diferente.>
: Maior.<
: Menor.BETWEEN
: Intervalo inclusivo.LIKE
: Padrões com%
e_
.IN
: Lista de valores.IS NULL
: Verifica valores nulos.
Exemplos:
-- BETWEEN SELECT nome, salario FROM funcionarios WHERE salario BETWEEN 2000 AND 4000; -- LIKE SELECT nome FROM funcionarios WHERE nome LIKE 'A%'; -- IN SELECT nome FROM funcionarios WHERE cargo IN ('ANALYST', 'MANAGER'); -- IS NULL SELECT nome FROM funcionarios WHERE comissao IS NULL;
Operadores Lógicos
AND
: Combina condições.OR
: Alterna condições.NOT
: Inverte condições.
Exemplos:
SELECT nome, salario FROM funcionarios WHERE salario > 3000 AND cargo = 'MANAGER'; SELECT nome, salario FROM funcionarios WHERE salario > 3000 OR comissao > 500; SELECT nome, cargo FROM funcionarios WHERE NOT cargo = 'CLERK';
Operações Aritméticas
Realizando Cálculos com Campos
SELECT coluna1, coluna2 + 100 AS resultado FROM tabela
Exemplo:
SELECT nome, salario, salario * 12 AS salario_anual FROM funcionarios;
Trabalhando com Funções
Funções de Manipulação de Texto
UPPER(coluna)
: Converte para maiúsculas.LOWER(coluna)
: Converte para minúsculas.SUBSTR(coluna, início, comprimento)
: Retorna uma substring.LENGTH(coluna)
: Retorna o tamanho do texto.
Exemplos:
SELECT UPPER(nome) AS nome_maiusculo FROM funcionarios; SELECT SUBSTR(nome, 1, 3) AS iniciais FROM funcionarios; SELECT LENGTH(nome) AS tamanho_nome FROM funcionarios;
Funções Numéricas
ROUND(valor, casas_decimais)
: Arredonda um número.TRUNC(valor, casas_decimais)
: Trunca um número.MOD(valor1, valor2)
: Retorna o resto da divisão.
Exemplo:
SELECT ROUND(salario, 2) AS salario_arredondado, MOD(salario, 3) AS resto FROM funcionarios;
Funções de Datas
SYSDATE
: Data e hora atual.MONTHS_BETWEEN(data1, data2)
: Meses entre duas datas.ADD_MONTHS(data, n)
: Adiciona meses.
Exemplos:
SELECT SYSDATE AS data_atual FROM dual; SELECT MONTHS_BETWEEN(SYSDATE, data_admissao) AS meses_trabalhados FROM funcionarios; SELECT ADD_MONTHS(data_admissao, 6) AS nova_data FROM funcionarios;
Ordenação e Agrupamento
Ordenando Resultados com ORDER BY
SELECT coluna1, coluna2 FROM tabela ORDER BY coluna1 [ASC|DESC];
Exemplo:
SELECT nome, salario FROM funcionarios ORDER BY salario DESC;
Agrupando Dados com GROUP BY
SELECT coluna1, SUM(coluna2) FROM tabela GROUP BY coluna1;
Exemplo:
SELECT cargo, AVG(salario) AS salario_medio FROM funcionarios GROUP BY cargo;
Filtrando Grupos com HAVING
SELECT coluna1, SUM(coluna2) FROM tabela GROUP BY coluna1 HAVING SUM(coluna2) > valor;
Exemplo:
SELECT cargo, COUNT(*) AS total FROM funcionarios GROUP BY cargo HAVING COUNT(*) > 5;
Operadores Avançados
Uso de DISTINCT
SELECT DISTINCT coluna FROM tabela;
Exemplo:
SELECT DISTINCT cargo FROM funcionarios;
Operador de Concatenação (||
)
SELECT coluna1 || ' texto ' || coluna2 AS novo_campo FROM tabela;
Exemplo:
SELECT nome || ' trabalha como ' || cargo AS descricao FROM funcionarios;
Subconsultas
- Subconsulta em
WHERE
SELECT coluna1 FROM tabela WHERE coluna2 = (SELECT valor FROM outra_tabela);
Exemplo:
SELECT nome FROM funcionarios WHERE salario = (SELECT MAX(salario) FROM funcionarios);
- Subconsulta em
FROM
SELECT coluna1 FROM (SELECT coluna2 FROM tabela) alias;
Exemplo:
SELECT nome, salario_anual FROM (SELECT nome, salario * 12 AS salario_anual FROM funcionarios) subquery WHERE salario_anual > 50000;
Funções Condicionais
- Função
CASE
SELECT coluna1, CASE WHEN condição1 THEN resultado1 WHEN condição2 THEN resultado2 ELSE resultado_default END AS alias FROM tabela;
Exemplo:
SELECT nome, salario, CASE WHEN salario > 3000 THEN 'Alto' WHEN salario > 2000 THEN 'Médio' ELSE 'Baixo' END AS categoria_salario FROM funcionarios;
- Função
DECODE
SELECT coluna1, DECODE(coluna2, valor1, resultado1, valor2, resultado2, valor_default) AS alias FROM tabela;
Exemplo:
SELECT cargo, DECODE(cargo, 'MANAGER', 'Gestor', 'CLERK', 'Assistente', 'Outro') AS descricao
Fuções de conversão
TO_CHAR(valor, formato)
: Converte para stringTO_NUMBER(valor)
: Converte para número.TO_DATE(valor, formato)
: Converte para data.NVL(valor, substituto)
: Substitui valores nulos.
Função TO_CHAR
-
Formatar salário como moeda, exibindo valores com separadores de milhares e decimais:
SELECT salario, TO_CHAR(salario, 'L99,999.99') AS salario_formatado FROM funcionarios;
-
Exibir a data e a hora em diferentes formatos:
SELECT TO_CHAR(SYSDATE, 'DD-MM-YYYY HH24:MI:SS') AS data_hora_formatada FROM dual;
-
Exibir mês por extenso com ano:
SELECT TO_CHAR(SYSDATE, 'MONTH YYYY') AS mes_ano FROM dual;
Função TO_NUMBER
-
Converter string para número e realizar cálculos:
SELECT TO_NUMBER('150') + 350 AS resultado FROM dual;
-
Extrair valores numéricos de strings:
SELECT TO_NUMBER(SUBSTR('Produto123', 8)) AS codigo FROM dual;
Função TO_DATE
-
Converter strings em datas:
SELECT TO_DATE('2024-12-25', 'YYYY-MM-DD') AS data_formatada FROM dual;
-
Calcular diferença entre datas:
SELECT TO_DATE('01-01-2025', 'DD-MM-YYYY') - TO_DATE('01-01-2024', 'DD-MM-YYYY') AS dias_entre_datas FROM dual;
-
Criar datas específicas:
SELECT TO_DATE('20251225', 'YYYYMMDD') AS natal FROM dual;
Função NVL
-
Substituir valores nulos em colunas numéricas:
SELECT nome, NVL(comissao, 0) AS comissao_ajustada FROM funcionarios;
-
Substituir valores nulos com texto padrão:
SELECT nome, NVL(email, 'Email não cadastrado') AS email_ajustado FROM funcionarios;
Função CAST
-
Converter texto para número e realizar cálculos:
SELECT CAST('200' AS NUMBER) * 5 AS resultado FROM dual;
-
Converter número para texto e concatenar:
SELECT CAST(12345 AS VARCHAR2(10)) || ' é o número' AS texto FROM dual;
-
Converter data para string e formatar:
SELECT CAST(SYSDATE AS VARCHAR2(20)) AS data_em_texto FROM dual;
Função COALESCE
-
Retornar o primeiro valor não nulo:
SELECT COALESCE(comissao, bonus, 0) AS valor_final FROM funcionarios;
-
Uso em textos com várias opções de substituição:
SELECT nome, COALESCE(apelido, sobrenome, 'Sem informações') AS nome_exibido FROM funcionarios;
Exibir Data em Diferentes Formatos
- Formato padrão brasileiro (DD/MM/YYYY):
SELECT nome, TO_CHAR(data_admissao, 'DD/MM/YYYY') AS data_formatada FROM funcionarios;
- Formato extenso (Dia de Mês, Ano):
SELECT nome, TO_CHAR(data_admissao, 'DD "de" MONTH "de" YYYY') AS data_extensa FROM funcionarios;
- Formato americano (MM-DD-YYYY):
SELECT nome, TO_CHAR(data_admissao, 'MM-DD-YYYY') AS data_americana FROM funcionarios;
- Somente o mês e o ano:
SELECT nome, TO_CHAR(data_admissao, 'MONTH YYYY') AS mes_ano FROM funcionarios;
- Data e hora completas:
SELECT nome, TO_CHAR(data_admissao, 'DD/MM/YYYY HH24:MI:SS') AS data_hora_completa FROM funcionarios;