Comment faire

Comment utiliser l’instruction MySQL IF dans une requête sélectionnée

Ce didacticiel explique l’utilisation des instructions MySQL IF et IF ELSE dans les requêtes Select avec des exemples de syntaxe et de programmation pratiques :

MySQL fournit une fonction IF() qui est une fonction de contrôle de flux et selon la condition spécifiée et son évaluation à vrai ou faux, le reste de l’instruction s’exécute.

Nous discuterons de divers exemples et applications de la fonction SI.

Nous apprendrons également à utiliser la construction conditionnelle IF-ELSE via MySQL STORED PROCEDURES et FUNCTIONS et comment les fonctions créées peuvent être utilisées avec des requêtes SELECT.

=> Cliquez ici pour la série complète de tutoriels MySQL

Instruction MySQL IF

Syntaxe:

SELECTIONNER SI (condition, valeur_vrai, valeur_faux) AS [column_name]

Essayons de comprendre la syntaxe en détail (ici nous utilisons la requête SELECT avec la fonction SI)

  • état: C’est l’énoncé conditionnel que nous voulons évaluer. Il peut impliquer une ou plusieurs colonnes. Par example: Vérifier si la valeur par rapport à la colonne est > 100. Ici, nous pouvons écrire une condition si nom_colonne > 100
  • value_true : Il s’agit de la valeur de chaîne que nous aimerions afficher par rapport à la condition si elle est évaluée à true.
  • value_false : Il s’agit de la valeur de chaîne qui serait affichée lorsque la condition est évaluée à faux.
  • EXEMPLE DE DONNÉES :

    Nous utiliserons une table Orders comme exemple de données pour écrire des exemples liés aux fonctions IF ELSE dans MySQL

    Tableau des COMMANDES

  • order_id – INT
  • nom_client – ​​VARCHAR
  • ville – VARCHAR
  • order_total – DECIMAL
  • date – DATEHEURE
  • //Script de création de table CREATE TABLE `Orders` ( ​​`order_id` INT NOT NULL, `customer_name` VARCHAR(255), `city` VARCHAR(255), `order_total` DECIMAL(5,2), `order_date` VARCHAR(255 ), PRIMARY KEY (order_id) ) // Script d’insertion de données factices INSERT INTO `Orders` (`order_id`,`customer_name`,`city`,`order_total`,`order_date`) VALUES (1080, »Nell L. Aguirre » , »Hanam », »109.31″, »2020-04-11 11:32:51″),(1081, »Dustin Love », »Minucciano », »29.57″, »2020-06-28 06:39:49 « ),(1082, »Judah Frazier », »Monte San Savino », »28.57″, »2020-05-24 18:44:27″),(1083, »Macey Ingram », »Rouen », »68.68″ , »2020-07-24 17:09:53″),(1084, »Jayme H. Blackburn », »San Giorgio Albanese », »45.98″, »2020-08-29 02:21:02″),( 1085, »Xavier Gould », »Eluru », »92.44″, »2020-06-25 08:43:08″),(1086, »Desiree Buckley », »Rotem », »37.64″, »2020-11- 11 21:28:12″),(1087, »Elvis Contreras », »Montluçon », »28.15″, »2020-04-10 05:56:04″),(1088, »Felix Q. Whitaker », » Bristol », »40.79″, »2020-03-21 03:13:03″),(1089, »Katell Willis », »Quarona », »101.34″, »2020-02-03 02:05:00″) ; INSÉRER DANS `orders` (`order_id`,`customer_name`,`city`,`order_total`,`order_date`) VALEURS (1090, »Austin T. Casey », »Cardiff », »108.22″, »2020-05- 06 11:55:54″),(1091, »Dalton Q. Sims », »Cefalà Diana », »104.04″, »2020-06-08 01:50:00″),(1092, »Althea C. Townsend « , »Ruda », »44.65″, »2020-10-12 07:46:17″),(1093, »Ruby Rivas », »Colico », »108.03″, »2020-07-09 18:34: 27″), (1094, »Fletcher H. Moses », »Leugnies », »69.27″, »2020-01-16 22:59:23″),(1095, »Britanney D. Pitts », »Minneapolis », « 86.91 », « 2020-09-23 01:17:49″), (1096, »Ginger A. Roth », »Beho », »106.51″, »2020-11-08 16:54:30″), (1097, »Merritt A. Humphrey », »Pomarolo », »50.84″, »2020-07-25 01:10:52″),(1098, »Ina Rush », »Herne », »84.31″, »2020 -08-17 23:27:09″),(1099, »Dana Rasmussen », »Gary », »57.83″, »2020-09-06 12:48:52″);

    Veuillez vous référer aux images des tableaux avec les données de test créées ci-dessus.

    Tableau des COMMANDES

    commandes_table

    Exemples de SI MySQL

    Fonction SI() simple

    Supposons que nous voulions avoir une colonne d’affichage supplémentaire, comme – is_high_value customer, sur la base de la valeur order_total > 100

    Ainsi, l’énoncé du problème peut être : afficher les détails du client à valeur élevée pour toutes les commandes après le 1er septembre 2020.

    La requête SELECT utilisant la fonction SI est ci-dessous :

    SELECT customer_name, IF(order_total>100, »yes », »no ») AS is_high_value FROM commandes où order_date>’2020-09-01′ ;

    Supposons que nous voulions filtrer uniquement les high_value_customers. Nous pouvons ajouter l’instruction IF à la clause WHERE dans la requête ci-dessus.

    SELECT customer_name FROM commandes WHERE IF(order_total>100, »yes », »no ») = « yes » AND order_date>’2020-09-01′ ;

    Sortir:

    Fonction SI () avec fonction d’agrégat

    Voyons un exemple où nous utilisons IF avec des fonctions d’agrégation telles que SUM, COUNT, etc. Supposons que nous voulions trouver la somme de toutes les commandes avec des noms de ville commençant par « H ».

    SELECT SUM(IF(city LIKE ‘H%’, order_total, 0)) AS total FROM commandes

    Sortir:

    Utilisation de COUNT avec IF pour grouper par rapport aux plages

    Supposons que nous voulions regrouper les commandes par order_range avec une seule requête. Par example, le total de la commande entre 1-50 est compté comme low_value_customers, 50-100 sont comptés comme high_value_customers et plus de 100 sont comptés comme premium_customers.

    En utilisant la fonction IF(), nous pouvons obtenir tous ces détails avec une seule requête.

    SELECTIONNER COUNT(IF(order_total<50,1,NULL)) comme low_value_customer, COUNT(IF(order_total>50 et order_total < 100,1,NULL)) comme high_value_customer, COUNT(IF(order_total>100,1,NULL)) en tant que premium_customer DES commandes

    Dans la requête ci-dessus, vous pouvez voir que nous avons combiné la fonction IF() avec COUNT, ce qui ajouterait des utilisateurs au COUNT en fonction du segment dans lequel ils se trouvent.

    Sortir:

    MySQL IF ELSE

    La fonction IF() peut être utilisée indépendamment avec les requêtes MySQL directement, cependant, MySQL IF ELSE est utilisé comme instruction dans le cadre des procédures ou fonctions stockées.

    Voyons l’utilisation de IF-ELSE avec la fonction MySQL.

    Nous allons créer une fonction pour calculer le niveau client en fonction du order_total

  • Si order_total < 50 -> customer_tier => bas
  • Si order_total > 50 et customer_tier < 100 -> customer_tier => high
  • Si order_total > 150 -> customer_tier => premium
  • Une telle fonction est créée comme suit :

    UTILISEZ mysql_ifelse ; DELIMITER // CRÉER UNE FONCTION CalculateCustomerTier(order_total FLOAT) RETURNS VARCHAR(20) BEGIN DECLARE customer_type VARCHAR(20); SI order_total < 50 ALORS SET customer_type="low" ; ELSEIF order_total > 50 AND order_total<100 THEN SET customer_type="high" ; ELSEIF order_total > 100 ALORS SET customer_type= »premium » ; ELSE SET customer_type= »unknown<" ; FIN SI; RETOUR type_client; FIN // DELIMITER ;

    Ici, mysql_ifelse est le nom de la base de données que nous utilisons pour stocker cette fonction.

    >> Cliquez ici pour plus de détails sur la création de fonctions sur MySQL.

    Voyons maintenant comment nous pouvons appeler cette fonction à l’aide d’une requête SELECT sur la table Orders

    SELECT customer_name, order_total, CalculateCustomerTier(order_total) AS niveau FROM commandes ORDER BY niveau ;

    Sortir:

    Comme vous pouvez le voir ci-dessus, le ‘étage’ la colonne obtient une valeur calculée à partir de la fonction ‘Calculer le niveau du client`

    Un point important à noter ici est puisque les fonctions ou les procédures stockées sont stockées de manière statique dans la base de données – par conséquent, si la fonction réside dans une base de données différente, alors tout en faisant référence à la fonction dans une requête, vous devrez utiliser le nom complet de la fonction.

    Noter: À propos de l’instruction IF par rapport à la fonction IF dans MySQL

    IF() La fonction fournie par MySQL est utilisée dans les requêtes MySQL génériques. Par example: Sélection d’une valeur basée sur une condition, etc. alors que les instructions IF/IF ELSE sont utilisées en conjonction avec les PROCÉDURES STOCKÉES dans MySQL pour programmer des constructions conditionnelles dans des fonctions plus importantes.

    Questions fréquemment posées

    Q #1) Comment écrivez-vous une instruction IF ELSE dans MySQL ?

    Réponse: La fonction MySQL IF() peut être utilisée dans une requête, tandis que la construction d’instruction conditionnelle IF-ELSE est prise en charge pour être utilisée via FUNCTIONS ou PROCÉDURES STOCKÉES.

    Créez une FONCTION pour calculer le niveau de la ville à partir d’une liste donnée de villes :

  • Si ville -> NEW YORK, CHICAGO -> niveau1
  • Si ville -> BOSTON, SAN_FRANCISCO -> niveau2
  • Si ville -> DETROIT, CLEVELAND -> tier3
  • Sinon -> niveau4
  • DELIMITER // CRÉER UNE FONCTION CalculateCityTier(nom_ville VARCHAR(100)) RETOURNE VARCHAR(20) COMMENCER À DÉCLARER le niveau VARCHAR(20); SI city_name= »NEW YORK » OU city_name= »CHICAGO » ALORS SET tier= »tier1″ ; ELSEIF city_name= »BOSTON » OU city_name= »SAN FRANCISCO » ALORS SET tier= »tier2″ ; ELSEIF city_name= »DETROIT » OU city_name= »CLEVELAND » ALORS SET tier= »tier3″ ; AUTREMENT SET tier= »tier4″ ; FIN SI; niveau RETOUR ; FIN // DELIMITER ;

    Q #2) Comment utiliser la condition if dans la requête d’insertion dans MySQL ?

    Réponse: SI la fonction ne peut pas être utilisée directement pour effectuer une insertion conditionnelle, cependant, pour obtenir un effet similaire, vous pouvez utiliser la clause WHERE tout en utilisant INSERT avec MySQL pour effectuer une INSERT conditionnelle.

    Q #3) Comment utiliser la fonction IF avec MySQL UPDATE ?

    Réponse: Voyons comment nous pouvons utiliser IF pour la mise à jour conditionnelle d’une colonne en fonction de l’évaluation de la fonction IF.

    Exemple: Ajoutez une nouvelle colonne – customer_tier à la table Orders.

    ALTER TABLE commande ADD COLUMN customer_tier VARCHAR(20);

    METTRE À JOUR la valeur de customer_tier à « high » pour toutes les lignes où order_total est compris entre 50 et 100

    Nous utiliserons la condition IF pour effectuer une mise à jour conditionnelle comme ci-dessous :

    UPDATE ORDERS SET customer_tier = IF(order_total >50 et order_total<100, 'high', NULL)

    Dans la requête ci-dessus, nous pouvons voir que customer_tier est défini sur la valeur qui est évaluée par la fonction IF et est défini sur « high » lorsque order_total >50 et order_total<100.

    Conclusion

    Dans ce didacticiel, nous avons examiné différentes manières d’utiliser la fonction IF dans le cadre des requêtes MySQL. Nous avons également appris à utiliser plusieurs fonctions SI dans une seule requête en combinaison avec des fonctions d’agrégation telles que COUNT, qui pourraient renvoyer une sortie en fonction de la condition spécifiée dans la fonction SI.

    Dans la dernière partie du didacticiel, nous avons discuté de la création d’une fonction MySQL à l’aide de la construction conditionnelle IF-ELSE qui pourrait ensuite être utilisée dans le cadre de la requête MySQL et agir sur la valeur d’entrée fournie.

    La fonction IF() et IF-ELSE est une construction puissante et est extrêmement utile pour interroger et regrouper des données, ce qui est la première étape vers l’analyse de grands ensembles de données dans des bases de données et des tables.

    Lectures recommandées =>> Comment utiliser MySQL CASE Statement

    Back to top button