ホームページ >データベース >mysql チュートリアル >SQL の WHERE 句で条件付きロジック (IF/CASE) を使用するにはどうすればよいですか?

SQL の WHERE 句で条件付きロジック (IF/CASE) を使用するにはどうすればよいですか?

Susan Sarandon
Susan Sarandonオリジナル
2025-01-11 05:59:52935ブラウズ

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

SQL WHERE 句での動的データ フィルタリング

SQL は、IF 句内の WHERE ステートメントを直接サポートしていませんが、代替方法を使用して条件付きフィルタリングを実現できます。 これにより、特定の条件に基づいた柔軟なデータ取得が可能になります。

CASE ステートメントのアプローチ:

CASE ステートメントは、データを条件付きでフィルターする強力な方法を提供します。条件を評価し、結果に基づいて値を返します。 WHERE 句内では、次のようになります:

<code class="language-sql">WHERE field LIKE CASE
  WHEN condition THEN result
  ELSE result
END</code>

たとえば、@OrderNumber が数値かどうかに基づいてフィルタリングしたいとします。 数値の場合は完全一致を使用します。それ以外の場合は、ワイルドカード検索を使用します:

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

IF による条件代入 (手続き型アプローチ):

もう 1 つの方法では、WHERE 句の外側で条件付き代入を使用してフィルタリング値を準備します。 これはより手続き的なアプローチです:

<code class="language-sql">IF condition
  SET field = value;
ELSE
  SET field = value;</code>

これを @OrderNumber の例に適用すると、次のようになります。

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

次に、@OrderNumber_Filtered 句で WHERE を使用します。

<code class="language-sql">WHERE OrderNumber LIKE @OrderNumber_Filtered;</code>

CASE 句内の WHEREWHERE 句の前の条件付き代入の両方により、データ フィルタリングの条件付きロジックを実装する効果的な方法が提供され、SQL クエリの能力と適応性が強化されます。

以上がSQL の WHERE 句で条件付きロジック (IF/CASE) を使用するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。