SQLにおけるWHERE句の詳細解説
SQLの`WHERE`句は、
データベース操作において非常に重要な役割を担います。これは、データ操作言語(DML)と組み合わせて使用され、`SELECT`、`INSERT`、`UPDATE`、`DELETE`といった命令が操作する行を絞り込むために使われます。`WHERE`句を使用することで、
データベース内の特定の条件を満たすデータだけを操作することが可能になり、効率的なデータ管理が実現します。
WHERE句の基本構文
`WHERE`句は、DMLステートメントの後に記述され、指定した条件に合致する行のみを対象とします。以下が基本的な構文です。
sql
SELECT column1, column2, ...
FROM table_name
WHERE condition;
`condition`部分には、操作対象とする行を決定するための条件式を記述します。この条件式が真(true)である行のみが操作の対象となり、偽(false)または不明(NULL)である行は除外されます。
条件式の記述
条件式では、さまざまな演算子を用いてデータの比較や論理的な結合を行います。
単純な比較演算子
- - `=`:等しい
- - `<>`:等しくない
- - `>`:より大きい
- - `>=`:以上
- - `<`:より小さい
- - `<=`:以下
これらの演算子は、数値や文字列の比較に利用されます。
論理演算子
複数の条件を組み合わせる際には、以下の論理演算子が使用されます。
- - `AND`:両方の条件が真である場合に真
- - `OR`:どちらか一方の条件が真である場合に真
`AND`演算子は`OR`演算子よりも優先順位が高いため、複雑な条件式では括弧`()`を使用して評価順序を明示することが推奨されます。
その他の演算子
- - `IN`:指定した値のリストの中に値が含まれるかを判定します。
sql
SELECT
FROM mytable WHERE ename IN ('Bob', 'Alice', 'John');
上記の例では、`ename`列の値が「Bob」、「Alice」、「John」のいずれかと一致する行が抽出されます。
- - `BETWEEN`:指定した範囲内に値が含まれるかを判定します。
sql
SELECT FROM mytable WHERE income BETWEEN 500000 AND 1000000;
上記の例では、`income`列の値が500000以上1000000以下の行が抽出されます。
- - `LIKE`:文字列のパターンマッチングを行います。
- `%`:0文字以上の任意の文字列と一致
- `_`:任意の1文字と一致
sql
SELECT
FROM mytable WHERE item LIKE 'S%'; -- 'S'で始まる文字列
SELECT FROM mytable WHERE item LIKE '%S'; -- 'S'で終わる文字列
SELECT
FROM mytable WHERE item LIKE '%S%'; -- 'S'を含む文字列
SELECT FROM mytable WHERE item LIKE 'A_E'; -- 'A'と'E'の間に1文字ある文字列
SELECT
FROM mytable WHERE item LIKE '[A-Za-z0-9_]%'; -- 最初の文字がアルファベットか数字か'_'である文字列
- - `IS NULL` / `IS NOT NULL`:値がNULLであるか否かを判定します。
sql
SELECT FROM mytable WHERE mynumber IS NULL; -- mynumberがNULLの行を抽出
SELECT
FROM mytable WHERE mynumber IS NOT NULL; -- mynumberがNULLでない行を抽出
WHERE句使用時の注意点
- - `LIKE`演算子を使用する際は、インデックスが利用されない可能性があるため、パフォーマンスに注意が必要です。可能な限り、`=`や`<>`などの比較演算子を使用することが推奨されます。
- - データベースの種類によって文字列の扱い(大文字小文字の区別など)が異なる場合があります。
実践的な例
以下に、`WHERE`句を使用した具体的なSQLの例を示します。
SELECT文での使用例
`mytable`テーブルから`mynumber`が100より大きい行を抽出する。
sql
SELECT FROM mytable WHERE mynumber > 100;
DELETE文での使用例
`mytable`テーブルから`mynumber`がNULLであるか、100である行を削除する。
sql
DELETE FROM mytable WHERE mynumber IS NULL OR mynumber = 100;
複数の条件の組み合わせ
`mytable`テーブルから`mynumber`が100より大きく、かつ`item`が「ハンマー」である行を削除する。
sql
DELETE FROM mytable WHERE mynumber > 100 AND item = 'ハンマー';
まとめ
`WHERE`句は、
SQLにおいてデータを効率的に操作するための基本であり、非常に強力なツールです。さまざまな演算子や条件式を組み合わせることで、複雑なデータ抽出や更新を柔軟に行うことができます。この記事で解説した内容を参考に、`WHERE`句を使いこなして、より効果的な
データベース操作を目指しましょう。
参照
- - PSOUG Home Puget Sound Oracle Users Group WHERE句を用いたSELECT文の例が提示されています。