2025年10月7日火曜日

SQL Server WHERE句の基本構文と条件指定

SQL Serverで条件を指定してデータを抽出する「WHERE句」の基本構文

WHERE句は、SQL Serverでデータを取得する際に「どの行を取り出すか」を指定する構文です。
不要な行を除外し、条件に合致する行のみを抽出できます。
この記事では、WHERE句の基本構文から実務でよく使われる条件指定の方法までを整理して解説します。

目次

WHERE句とは

WHERE句は、テーブルの中から条件に一致する行だけを抽出するための命令です。
SELECT文と組み合わせることで、特定の条件を満たすデータのみを取得できます。
SQL Serverで分析や業務アプリケーションを作る上で、最も頻繁に利用される構文のひとつです。

基本構文と書き方

WHERE句の基本形は次の通りです。


SELECT Column1, Column2
FROM dbo.TableName
WHERE 条件式;

たとえば、特定の部署に所属する社員だけを取得する場合は次のように書きます。


SELECT *
FROM dbo.Employees
WHERE DepartmentId = 10;

この例では「DepartmentIdが10の社員」だけが抽出されます。

比較演算子の利用

WHERE句では、次のような比較演算子を使って条件を指定します。

  • =(等しい)
  • >(より大きい)
  • <(より小さい)
  • >= / <=(以上/以下)
  • <>(等しくない)

たとえば、金額が5万円以上の注文を取得する場合は次のように書けます。


SELECT *
FROM dbo.Orders
WHERE Amount >= 50000;

AND・OR・NOTの利用

複数の条件を組み合わせたい場合は、論理演算子を使用します。


SELECT *
FROM dbo.Orders
WHERE Amount >= 50000 AND CustomerId = 1001;

この場合、「CustomerIdが1001かつ金額が5万円以上」の注文を抽出します。
ORを使えば「いずれかの条件を満たす場合」、NOTを使えば「条件を満たさない場合」を指定できます。

IN・BETWEEN・LIKEの利用

WHERE句では、複数候補や範囲、部分一致などの便利な検索方法も用意されています。

IN:複数の候補値の中から一致するものを抽出します。


SELECT *
FROM dbo.Products
WHERE CategoryName IN ('Foods', 'Drinks', 'Books');

BETWEEN:指定した範囲内のデータを抽出します。


SELECT *
FROM dbo.Orders
WHERE OrderDate BETWEEN '2025-01-01' AND '2025-01-31';

LIKE:部分一致で検索します。ワイルドカード(%や_)を使用します。


SELECT *
FROM dbo.Customers
WHERE FullName LIKE 'Sato%';

この例では「氏名が 'Sato' で始まる顧客」を取得します。

EXISTSと副問い合わせ

EXISTSは、サブクエリ(副問い合わせ)の結果が1件以上存在するかどうかを判定します。
NOT EXISTSを使うと「存在しない場合」を判定できます。


-- 注文が存在する顧客を取得
SELECT CustomerId, FullName
FROM dbo.Customers AS c
WHERE EXISTS (
  SELECT 1
  FROM dbo.Orders AS o
  WHERE c.CustomerId = o.CustomerId
);

-- 注文が存在しない顧客を取得
SELECT CustomerId, FullName
FROM dbo.Customers AS c
WHERE NOT EXISTS (
  SELECT 1
  FROM dbo.Orders AS o
  WHERE c.CustomerId = o.CustomerId
);

副問い合わせを利用することで、「他のテーブルと関連する条件」を柔軟に指定できます。

実務での活用例

WHERE句は、業務アプリや分析クエリなど、あらゆる場面で登場します。
ここでは実務でよくある条件指定の例を紹介します。

🔹 例1:部署IDが3か4の社員を取得


SELECT EmployeeId, FullName, DepartmentId
FROM dbo.Employees
WHERE DepartmentId IN (3, 4);

🔹 例2:2025年1月に注文されたデータを取得


SELECT OrderId, OrderDate, CustomerId
FROM dbo.Orders
WHERE OrderDate BETWEEN '2025-01-01' AND '2025-01-31';

🔹 例3:名前が「Suzuki」で始まる顧客を取得


SELECT CustomerId, FullName
FROM dbo.Customers
WHERE FullName LIKE 'Suzuki%';

🔹 例4:注文が1件でも存在する顧客を取得(EXISTS利用)


SELECT CustomerId, FullName
FROM dbo.Customers AS c
WHERE EXISTS (
  SELECT 1
  FROM dbo.Orders AS o
  WHERE c.CustomerId = o.CustomerId
);

🔹 例5:過去30日以内に注文を行った顧客を取得


SELECT CustomerId, FullName
FROM dbo.Customers AS c
WHERE EXISTS (
  SELECT 1
  FROM dbo.Orders AS o
  WHERE c.CustomerId = o.CustomerId
    AND o.OrderDate >= DATEADD(DAY, -30, GETDATE())
);

まとめ

WHERE句を使いこなすことで、必要なデータだけを効率的に抽出できます。
- 比較演算子で条件を指定
- AND/OR/NOTで複数条件を組み合わせ
- IN・BETWEEN・LIKEで柔軟な検索
- EXISTSや副問い合わせで関連データの有無を判定
条件指定を適切に使い分けることで、SQL Serverのデータ抽出力を最大限に活かせます。

参考リンク

SQL Server 解説用イメージ

補足: 本記事の構文は、主要なSQL Serverバージョンで共通して利用できます。

※2025/10/28 更新

0 件のコメント:

コメントを投稿