Declaração IF do MySQL

Resumo : neste tutorial, você aprenderá como usar a instrução MySQL IF para executar um bloco de código SQL com base em uma condição especificada.

Observe que o MySQL possui uma função IF() que difere da IFinstrução descrita neste tutorial.

A IFinstrução permite avaliar uma ou mais condições e executar o bloco de código correspondente se a condição for verdadeira.

A IFdeclaração tem três formas:

  • IF...THEN instrução: Avalie uma condição e execute um bloco de código se a condição for verdadeira.
  • IF...THEN...ELSEinstrução: Avalie uma condição e execute um bloco de código se a condição for verdadeira; caso contrário, execute outro bloco de código.
  • IF...THEN...ELSEIF...ELSEinstrução: Avalie várias condições e execute um bloco de código se uma condição for verdadeira. Se todas as condições forem falsas, execute o bloco de código na ELSEramificação.

Declaração SE-ENTÃO

A IF...THENinstrução permite executar um conjunto de instruções SQL com base em uma condição especificada.

O seguinte ilustra a sintaxe da IF-THENinstrução:

IF condition THEN 
   statements;
END IF;Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

Nesta sintaxe:

  • Primeiro, defina uma condição para executar o código entre IF...THENe END IF. Se the conditionfor verdadeiro, as instruções entre IF-THENe END IFserão executadas. Caso contrário, o controle é passado para a próxima instrução após o END IF.
  • Segundo, especifique o código que será executado se for conditionavaliado como TRUE.

Usaremos a customerstabela do banco de dados de exemplo para a demonstração:

O seguinte procedimento cria um novo procedimento armazenado nomeado GetCustomerLevel()no banco de dados de exemplo :

DELIMITER $$

CREATE PROCEDURE GetCustomerLevel(
    IN  pCustomerNumber INT, 
    OUT pCustomerLevel  VARCHAR(20))
BEGIN
    DECLARE credit DECIMAL(10,2) DEFAULT 0;

    SELECT creditLimit 
    INTO credit
    FROM customers
    WHERE customerNumber = pCustomerNumber;

    IF credit > 50000 THEN
        SET pCustomerLevel = 'PLATINUM';
    END IF;
END$$

DELIMITER ;Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

O procedimento armazenado GetCustomerLevel()aceita dois parâmetros: pCustomerNumbere pCustomerLevel.

  • Primeiro, selecione creditLimito cliente especificado pela pCustomerNumbertabela customerse armazene-o na variável local credit.
  • Em seguida, defina o valor do OUTparâmetro pCustomerLevelcomo PLATINUMse o limite de crédito do cliente for maior que 50,000.

Esta declaração encontra todos os clientes que possuem um limite de crédito superior a 50,000:

SELECT 
    customerNumber, 
    creditLimit
FROM 
    customers
WHERE 
    creditLimit > 50000
ORDER BY 
    creditLimit DESC;Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

Aqui está a saída parcial:

Estas instruções chamam o GetCustomerLevel()procedimento armazenado para o cliente 141 e mostram o valor do OUTparâmetro pCustomerLevel:

CALL GetCustomerLevel(141, @level);
SELECT @level;Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

Saída:

+----------+
| @level   |
+----------+
| PLATINUM |
+----------+
1 row in set (0.00 sec)Linguagem de código:  JavaScript  ( javascript )

Como o cliente 141 tem um limite de crédito superior a 50,000, o seu nível é definido PLATINUMcomo esperado.

Instrução IF-THEN-ELSE

Caso você queira executar outras instruções quando o conditionna IFramificação não for avaliado como TRUE, você pode usar a IF-THEN-ELSEinstrução da seguinte forma:

IF condition THEN
   statements;
ELSE
   else-statements;
END IF;Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

Nesta sintaxe, se o for conditionavaliado como verdadeiro, o statementsentre IF-THENe ELSEserá executado. Caso contrário, o else-statementsentre o ELSEe END IFexecutar.

Vamos modificar o GetCustomerLevel()procedimento armazenado.

Primeiro, elimine o GetCustomerLevelprocedimento armazenado:

DROP PROCEDURE GetCustomerLevel;Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

Em seguida, crie o GetCustomerLevelprocedimento armazenado com o novo código:

DELIMITER $$

CREATE PROCEDURE GetCustomerLevel(
    IN  pCustomerNumber INT, 
    OUT pCustomerLevel  VARCHAR(20))
BEGIN
    DECLARE credit DECIMAL DEFAULT 0;

    SELECT creditLimit 
    INTO credit
    FROM customers
    WHERE customerNumber = pCustomerNumber;

    IF credit > 50000 THEN
        SET pCustomerLevel = 'PLATINUM';
    ELSE
        SET pCustomerLevel = 'NOT PLATINUM';
    END IF;
END$$

DELIMITER ;
Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

No procedimento armazenado atualizado, incluímos a ELSEramificação. Se the creditnão for maior que 50,000, definimos o nível do cliente NOT PLATINUMno bloco entre ELSEe END IF.

Esta consulta encontra clientes com limites de crédito menores ou iguais 50,000:

SELECT 
    customerNumber, 
    creditLimit
FROM 
    customers
WHERE 
    creditLimit <= 50000
ORDER BY 
    creditLimit DESC;Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

Esta imagem mostra a saída parcial:

As instruções a seguir chamam o procedimento armazenado para o número do cliente 447e mostram o valor do OUTparâmetro pCustomerLevel:

CALL GetCustomerLevel(447, @level);
SELECT @level;Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

Saída:

+--------------+
| @level       |
+--------------+
| NOT PLATINUM |
+--------------+
1 row in set (0.00 sec)Linguagem de código:  JavaScript  ( javascript )

O limite de crédito do cliente 447é menor que 50,000, portanto, o extrato na ELSEagência é executado e define o valor do OUTparâmetro pCustomerLevelcomo NOT PLATINUM.

Instrução IF-THEN-ELSEIF-ELSE

A IF-THEN-ELSEIF-ELSEinstrução permite verificar múltiplas condições sequencialmente. Aqui está a sintaxe básica da IF-THEN-ELSEIF-ELSEinstrução:

IF condition THEN
   statements;
ELSEIF elseif-condition THEN
   statements;
...
ELSE
   statements;
END IF;Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

Nesta sintaxe:

  • Se a condição inicial for verdadeira, as instruções associadas serão executadas. Se for falso, o programa verifica a próxima condição ( ELSEIF).
  • Se alguma das ELSEIFcondições for verdadeira, as instruções correspondentes serão executadas.
  • Se nenhuma das condições for verdadeira, as instruções do ELSEbloco serão executadas.

Modificaremos o GetCustomerLevel() procedimento armazenado para usar a IF-THEN-ELSEIF-ELSEinstrução.

Primeiro, elimine o GetCustomerLevel()procedimento armazenado:

DROP PROCEDURE GetCustomerLevel;Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

Em seguida, recrie o novo GetCustomerLevel() procedimento armazenado que usa a IF-THEN-ELSEIF-ELSEinstrução.

DELIMITER $$

CREATE PROCEDURE GetCustomerLevel(
    IN  pCustomerNumber INT, 
    OUT pCustomerLevel  VARCHAR(20))
BEGIN
    DECLARE credit DECIMAL DEFAULT 0;

    SELECT creditLimit 
    INTO credit
    FROM customers
    WHERE customerNumber = pCustomerNumber;

    IF credit > 50000 THEN
        SET pCustomerLevel = 'PLATINUM';
    ELSEIF credit <= 50000 AND credit > 10000 THEN
        SET pCustomerLevel = 'GOLD';
    ELSE
        SET pCustomerLevel = 'SILVER';
    END IF;
END $$

DELIMITER ;Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

Neste procedimento armazenado:

  • Se o crédito for maior que 50,000, o nível do cliente é PLATINUM.
  • Se o crédito for menor ou igual 50,000e maior que 10,000, então o nível do cliente é GOLD.
  • Caso contrário, o nível do cliente é SILVER.

Essas instruções chamam o procedimento armazenado GetCustomerLevel()e mostram o nível do cliente 447:

CALL GetCustomerLevel(447, @level); 
SELECT @level;Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

Saída:

+--------+
| @level |
+--------+
| GOLD   |
+--------+
1 row in set (0.00 sec)Linguagem de código:  JavaScript  ( javascript )

Resumo

  • Use IF...THENinstrução para executar condicionalmente um bloco de instruções com base na avaliação de uma condição especificada.
  • Use IF...THEN...ELSEinstrução para executar um bloco de instruções se uma condição especificada for verdadeira e um bloco alternativo de instruções se a condição for falsa.
  • Use IF...THEN...ELSEIF...ELSEa instrução para avaliar múltiplas condições sequencialmente e executar blocos de instruções correspondentes com base na primeira condição verdadeira, com um bloco opcional de instruções para executar se nenhuma das condições for verdadeira.

Deixe um comentário

O seu endereço de email não será publicado. Campos obrigatórios marcados com *