Back to blog

Linguagem SQL - 3 Comandos DQL

4 min de leitura
1103 palavras

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

  1. TO_CHAR(valor, formato): Converte para string
  2. TO_NUMBER(valor): Converte para número.
  3. TO_DATE(valor, formato): Converte para data.
  4. 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;