Maison > base de données > tutoriel mysql > Comment puis-je utiliser la logique conditionnelle (IF/CASE) dans la clause WHERE de SQL ?

Comment puis-je utiliser la logique conditionnelle (IF/CASE) dans la clause WHERE de SQL ?

Susan Sarandon
Libérer: 2025-01-11 05:59:52
original
940 Les gens l'ont consulté

How Can I Use Conditional Logic (IF/CASE) in SQL's WHERE Clause?

Filtrage dynamique des données dans les clauses SQL WHERE

SQL ne prend pas directement en charge les instructions IF dans les clauses WHERE, mais vous pouvez réaliser un filtrage conditionnel à l'aide de méthodes alternatives. Cela permet une récupération de données flexible en fonction de conditions spécifiques.

L'approche de la déclaration CASE :

L'instruction CASE fournit un moyen puissant de filtrer les données de manière conditionnelle. Il évalue une condition et renvoie une valeur basée sur le résultat. Dans une clause WHERE, cela ressemble à :

<code class="language-sql">WHERE field LIKE CASE
  WHEN condition THEN result
  ELSE result
END</code>
Copier après la connexion

Par exemple, disons que vous souhaitez filtrer selon que @OrderNumber est numérique. S'il s'agit d'un nombre numérique, utilisez une correspondance exacte ; sinon, utilisez une recherche générique :

<code class="language-sql">WHERE OrderNumber LIKE
  CASE WHEN IsNumeric(@OrderNumber) = 1 THEN 
    @OrderNumber 
  ELSE
    '%' + @OrderNumber + '%'
  END</code>
Copier après la connexion

Affectation conditionnelle avec IF (approche procédurale) :

Une autre méthode consiste à utiliser une affectation conditionnelle en dehors de la clause WHERE pour préparer la valeur de filtrage. Il s'agit d'une approche plus procédurale :

<code class="language-sql">IF condition
  SET field = value;
ELSE
  SET field = value;</code>
Copier après la connexion

Appliquer ceci à l'exemple @OrderNumber :

<code class="language-sql">IF IsNumeric(@OrderNumber) = 1
  SET @OrderNumber_Filtered = @OrderNumber;
ELSE
  SET @OrderNumber_Filtered = '%' + @OrderNumber + '%';</code>
Copier après la connexion

Ensuite, utilisez @OrderNumber_Filtered dans votre clause WHERE :

<code class="language-sql">WHERE OrderNumber LIKE @OrderNumber_Filtered;</code>
Copier après la connexion

Les deux CASE dans la clause WHERE et l'affectation conditionnelle avant la clause WHERE fournissent des moyens efficaces d'implémenter une logique conditionnelle pour le filtrage des données, améliorant ainsi la puissance et l'adaptabilité de vos requêtes SQL.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal