Instruction conditionnelle IF…ELSE dans SQL Server : Exemple de requête SELECT en T-SQL

⚡ Résumé intelligent

IF…ELSE est une instruction de contrôle de flux dans SQL Server qui exécute un bloc de T-SQL lorsqu'une condition booléenne est évaluée à vrai, et un bloc alternatif facultatif lorsque la même condition est évaluée à faux.

  • 🧭 Logique conditionnelle : Les instructions conditionnelles permettent à SQL Server d'exécuter différentes actions T-SQL selon qu'une condition est vraie ou fausse.
  • Branches IF et ELSE : Lorsque la condition booléenne est vraie, le bloc IF s'exécute ; lorsqu'elle est fausse, c'est le bloc ELSE optionnel qui s'exécute à la place.
  • (I.e. Expression booléenne : La condition doit être une expression booléenne qui s'évalue à vrai ou faux, comme (1=1) ou une comparaison de variables.
  • 🧱 blocs DÉBUT…FIN : Une branche qui exécute plusieurs instructions doit encadrer ces instructions par les mots-clés BEGIN et END.
  • SINON est facultatif : Une instruction IF peut être utilisée seule, sans partie ELSE ; une condition fausse ne produit donc aucune action.
  • (I.e. Conditions imbriquées : SQL Server ne possède pas de mot-clé ELSE IF, il faut donc imbriquer un IF…ELSE dans un autre pour tester plusieurs seuils.

Exemple d'instruction conditionnelle IF…ELSE avec requête T-SQL SELECT dans SQL Server

Pourquoi avez-vous besoin d’instructions conditionnelles ?

Les instructions conditionnelles de SQL Server permettent de définir différentes logiques et actions selon les conditions. Elles permettent d'effectuer différentes actions en fonction des conditions définies dans l'instruction. Dans la pratique, de nombreuses actions dépendent du résultat d'une autre activité ou situation.

Voici quelques exemples concrets d'instructions conditionnelles :

  • S'il pleut demain, je prévois un voyage en voiture.
  • Si les billets d'avion coûtent moins de 400 dollars au départ de ma ville, j'irai en vacances en Europe ; sinon, je préférerai un lieu touristique à proximité.

Ici, vous pouvez constater qu'une action, comme le voyage en voiture mentionné plus haut, dépend conditionnellement du résultat d'une autre activité, à savoir « s'il pleuvra ou non demain ». De même, MS SQL Server Il offre également la possibilité d'exécuter une instruction T-SQL de manière conditionnelle.

Instruction IF…ELSE dans SQL Server

Dans MS SQL, IF…ELSE est un type d'instruction conditionnelle. Toute instruction T-SQL peut être exécutée de manière conditionnelle à l'aide de IF…ELSE. La figure ci-dessous explique le fonctionnement des branches IF et ELSE dans SQL Server :

Organigramme de SQL Server IF…ELSE montrant la branche IF vraie et la branche ELSE fausse

  • Si la condition est évaluée à Vrai, alors les instructions T-SQL qui suivent la condition IF dans SQL Server sont exécutées.
  • Si la condition est évaluée à Faux, alors les instructions T-SQL qui suivent le mot-clé ELSE sont exécutées.
  • Une fois que l'une des instructions T-SQL IF ou l'instruction T-SQL ELSE est exécutée, les autres instructions T-SQL inconditionnelles continuent de s'exécuter.

Syntaxe et règles IF…ELSE en SQL

syntaxe:

IF <Condition>
     {Statement | Block_of_statement}   
[ ELSE   
     {Statement | Block_of_statement}]

Règles :

  • La condition doit être une expression booléenne, c'est-à-dire que la condition doit renvoyer une valeur booléenne lorsqu'elle est évaluée.
  • Une instruction IF…ELSE en SQL peut gérer conditionnellement une seule instruction T-SQL ou un bloc d'instructions T-SQL.
  • Un bloc d'instructions doit commencer par le mot-clé BEGIN et se terminer par le mot-clé END.
  • L'utilisation de BEGIN et END aide SQL Server à identifier le bloc d'instructions qui doit être exécuté et à le séparer du reste des instructions T-SQL qui ne font pas partie du bloc T-SQL IF…ELSE.
  • ELSE est facultatif.

IF…ELSE avec uniquement une valeur numérique dans une expression booléenne

Dans ce premier exemple, l'expression booléenne n'utilise que des valeurs numériques. Prenons l'exemple de la condition ci-dessous, qui est toujours vraie car 1 est égal à 1.

Condition : VRAI

IF (1=1)
PRINT 'IF STATEMENT: CONDITION IS TRUE'
ELSE
PRINT 'ELSE STATEMENT: CONDITION IS FALSE'

L'exécution de la requête avec la condition vraie (1=1) affiche le message de la branche IF :

Résultat de la condition numérique IF vraie, affichant le message IF STATEMENT

Condition : FAUX

IF (1=2)
PRINT 'IF STATEMENT: CONDITION IS TRUE'
ELSE
PRINT 'ELSE STATEMENT: CONDITION IS FALSE'

Si la condition est fausse (1=2), la branche ELSE s'exécute à la place :

Résultat de la condition IF numérique fausse, affichant le message ELSE STATEMENT

Supposons que vous ayez une table nommée 'Guru99' avec deux colonnes et quatre lignes, comme indiqué ci-dessous. Nous utiliserons ce 'GuruTableau 99 dans les exemples qui suivent.

Échantillon GuruTableau 99 contenant une colonne Tutorial_ID et quatre lignes de données

IF…ELSE avec une variable dans une expression booléenne

Au lieu de nombres constants, l'expression booléenne peut comparer une valeur. variableL'exemple suivant déclare une variable entière et teste sa valeur.

Condition : VRAI

DECLARE @Course_ID INT = 4

IF (@Course_ID = 4)
Select * from Guru99 where Tutorial_ID = 4
ELSE
Select * from Guru99 where Tutorial_ID != 4

Étant donné que @Course_ID est égal à 4, la branche IF s'exécute et renvoie la ligne où Tutorial_ID est égal à 4 :

Résultat de la requête renvoyant la ligne Tutorial_ID 4 lorsque la condition de la variable est vraie

Condition : FAUX

DECLARE @Course_ID INT = 4

IF (@Course_ID != 4)
Select * from Guru99 where Tutorial_ID = 4
ELSE
Select * from Guru99 where Tutorial_ID != 4

Ici, la condition est fausse, donc la branche ELSE s'exécute et renvoie toutes les lignes où Tutorial_ID n'est pas égal à 4 :

Résultat de la requête de la branche ELSE renvoyant toutes les lignes sauf Tutorial_ID 4

SI…SINON avec DÉBUT…FIN

Lorsqu'une branche doit exécuter plusieurs instructions, placez-les dans un bloc BEGIN…END. L'exemple ci-dessous exécute deux instructions SELECT dans chaque branche.

Condition : VRAI

DECLARE @Course_ID INT = 2

IF (@Course_ID <=2)
	BEGIN
	Select * from Guru99 where Tutorial_ID = 1
	Select * from Guru99 where Tutorial_ID = 2
	END
ELSE
	BEGIN
	Select * from Guru99 where Tutorial_ID = 3
	Select * from Guru99 where Tutorial_ID = 4
	END

Étant donné que @Course_ID est inférieur ou égal à 2, le bloc IF exécute les deux instructions SELECT à l'intérieur de BEGIN…END :

Résultat du bloc IF exécutant deux instructions SELECT pour Tutorial_ID 1 et 2

Condition : FAUX

DECLARE @Course_ID INT = 2

IF (@Course_ID >=3)
	BEGIN
	Select * from Guru99 where Tutorial_ID = 1
	Select * from Guru99 where Tutorial_ID = 2
	END
ELSE
	BEGIN
	Select * from Guru99 where Tutorial_ID = 3
	Select * from Guru99 where Tutorial_ID = 4
	END

Cette fois, la condition est fausse, donc le bloc ELSE exécute ses deux instructions SELECT :

Résultat du bloc ELSE exécutant deux instructions SELECT pour Tutorial_ID 3 et 4

Instruction IF sans ELSE

Vous pouvez utiliser une instruction IF en SQL sans clause ELSE, car cette dernière est facultative. Par exemple :

DECLARE @Course_ID INT = 2

IF (@Course_ID <=2)
	Select * from Guru99 where Tutorial_ID = 1

Il imprime la ligne unique suivante :

Résultat sur une seule ligne affiché par une instruction IF sans partie ELSE

L'exécution de la condition fausse ne produit aucun résultat. Prenons l'exemple de la requête suivante :

DECLARE @Course_ID INT = 2

IF (@Course_ID <=0)
	Select * from Guru99 where Tutorial_ID = 1

Le résultat est vide, comme indiqué ci-dessous :

Un ensemble de résultats vide est produit lorsque la condition IF sans ELSE est fausse.

Instructions IF…ELSE imbriquées

Contrairement à certains autres langages de programmationSQL Server ne propose pas d'instruction ELSE IF à l'intérieur d'une condition IF…ELSE. En revanche, vous pouvez imbriquer une condition IF…ELSE dans une autre, comme illustré ci-dessous :

 DECLARE @age INT;
SET @age = 60;

IF @age < 18
   PRINT 'underage';
ELSE
BEGIN
   IF @age < 50
      PRINT 'You are below 50';
   ELSE
      PRINT 'Senior';
END;

Pour un âge de 60 ans, la structure IF…ELSE imbriquée affiche le résultat suivant :

Résultat de l'instruction IF…ELSE imbriquée : Senior pour un âge de 60 ans

  • Le code affiche « mineur » si la valeur de @age est inférieure à 18.
  • Sinon, la partie ELSE est exécutée. La partie ELSE contient une structure IF…ELSE imbriquée.
  • Si la valeur de @age est inférieure à 50, le message « Vous avez moins de 50 ans » s'affiche. Sinon, le message « Senior » s'affiche.

FAQ

L'instruction IF…ELSE contrôle le flux d'exécution, en choisissant les instructions ou blocs T-SQL à exécuter. L'instruction CASE est une expression qui renvoie une valeur unique au sein d'une requête, comme dans une clause SELECT ou WHERE. Elle ne peut pas exécuter des instructions séparées.

La fonction IIF() est un raccourci pour une expression CASE, et non pour l'instruction de contrôle de flux IF…ELSE. Elle renvoie l'une des deux valeurs possibles selon un test booléen et s'utilise dans les requêtes. Contrairement à IF…ELSE, IIF() ne peut pas exécuter d'instructions ou de blocs T-SQL distincts.

Non. L'instruction IF…ELSE est une instruction de contrôle de flux ; elle ne peut donc pas figurer dans une liste SELECT ni dans une clause WHERE. Pour renvoyer des valeurs conditionnelles dans une requête, utilisez plutôt une expression CASE ou la fonction IIF().

Saisissez IF EXISTS (SELECT 1 FROM table WHERE condition) suivi de l'instruction à exécuter. EXISTS renvoie vrai lorsque la sous-requête trouve au moins une ligne correspondante ; la branche IF s'exécute donc uniquement si les données existent.

Oui. La structure IF…ELSE est utilisée dans les procédures stockées, les déclencheurs, les fonctions et les traitements par lots pour gérer les branchements logiques. Associée aux blocs BEGIN…END, elle permet à une procédure d'exécuter différentes instructions SQL en fonction des paramètres ou des résultats de la requête.

L'instruction IF…ELSE évalue sa condition une seule fois et exécute la branche correspondante une seule fois. Une boucle WHILE répète son bloc d'instructions tant que la condition reste vraie. Utilisez IF…ELSE pour les branchements et WHILE pour l'itération.

Oui. Copilote GitHub Il est possible de rédiger des blocs IF…ELSE, des instructions BEGIN…END et des conditions imbriquées à partir d'une invite en langage naturel. Il est impératif de toujours vérifier les conditions booléennes et la logique de branchement générées avant d'exécuter le script sur votre base de données.

Les assistants d'IA et d'apprentissage automatique traduisent les règles en langage naturel en logique SI…SINON ou CAS, suggèrent les branches manquantes et signalent les conditions impossibles. Le développeur vérifie chaque suggestion avant son déploiement.

Résumez cet article avec :