0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【初心者必見】SQLのWHERE句を使いこなそう:よくあるエラーと解決策

Posted at

SQLを利用するにあたって切っても切れない関係にあるのがWHERE句です。
データベースから特定の条件でデータを取得するために使う非常に重要な構文ですが、初心者がよく躓くポインドでもあります。

この記事では、WHERE句の基本的な使い方から、よくあるエラーとその解決策を解説します。
エラーを解消し、効率的にデータを操作できるようになりましょう。

WHERE句とは?

WHERE句は、SQL文で条件を指定してデータを絞り込むために使用します。
SELECT文やUPDATE文、DELETE文などに指定され、処理対象となる行を絞り込むことができます。
一般化した書き方と具体例を用いて確認しましょう。

基本構文
SELECT 項目1, 項目2
FROM テーブル名
WHERE 条件;

具体例として従業員の年齢が30歳以上いるデータを取得する場合を考えてみましょう。

SELECT *
FROM employees
WHERE age >= 30;

SELECT *ですべてのデータを取得することが出来ます。
次に初心者が陥りやすいWHERE句での誤った使い方とその解決策を確認してみましょう。

WHERE句でよくあるエラーと解決策

1.数値型のカラムに文字列を指定するミス

よくあるミスですが、数値型にも関わらず文字列の値を指定するデータの不一致が原因でこのエラーが起きます。

エラー例
SELECT 項目1, 項目2
FROM テーブル名
WHERE age = "30";  '←ダブルクオーテーションで文字列として扱ってしまっている'

解決策として数値型のカラムにはダブルク、シングルのクオーテーションの使用は避けるようにしましょう。

2.NULL値を扱うミス

NULLは「変数やデータが何も含まれていない状態」のことを表します。
それを踏まえてエラー例のような使い方をしていないか確認してみましょう。

エラー例
SELECT *
FROM employees
WHERE department = NULL;  

SQLでは、=でNULLを比較することが出来ません。
そのためNULL値と比較する場合は、IS NULLもしくはIS NOT NULLを使用します。

正しい使い方
SELECT *
FROM employees
WHERE department IS NULL;  

3.ANDとORの条件を混ぜたミス

データの絞り込む条件が複数ある場合、ANDORがあるのはご存じだと思います。
しかし、このANDORには算数でいう加減乗除のようにルールがあるので、理解していないとほしいデータを取得できない可能性があります。
優先順位は結論こうです。
NOT>AND>OR
二つのSQLを見てみましょう。

例①
SELECT * 
FROM employees  
WHERE age > 30 OR position = 'Manager' AND department = 'Sales';
例②
SELECT * 
FROM employees  
WHERE (age > 30 OR position = 'Manager') AND department = 'Sales';

優先順位の考え方により例①と例②で取得するデータが違うことが分かりますか?
例②のように優先順位を明確にするために、条件を括弧でグループ化しましょう。

4.ワイルドカード(LIKE)の使い方ミス

エラー例
SELECT * 
FROM employees  
WHERE name LIKE '*Smith';

さてどこが間違いか分かりますか?
SQLではワイルドカードを使用するときは*ではなく%を使います。
これを踏まえて正しい使い方を確認してみましょう。

正しい例
SELECT * 
FROM employees  
WHERE name LIKE '%Smith';

5.日付データのフォーマットミス

エラー例
SELECT * 
FROM employees  
WHERE hire_date = '2024-12-05'; 'フォーマットが不適切

使用するRDBMS(MySQL、PostgreSQLなど)によって日付データのフォーマットが異なる場合がありますのでしっかり確認しましょう。
MySQLでは問題なかったけど、PostgreSQLでは無理だったというような事象が起きかねません。
解決策として、使っているRDBMSの日付フォーマットを確認する、または明示的に日付型として指定しましょう。

  • MySQLの場合
SELECT *
FROM employees  
WHERE hire_date = DATE('2024-12-05');
  • PostgreSQLの場合
SELECT * 
FROM employees  
WHERE hire_date = '2024-12-05'::DATE;

3.実務でよく使うWHERE句テクニック

①INで複数条件を指定する

SELECT * 
FROM employees  
WHERE department IN ('Sales', 'Marketing', 'HR');

この条件では所属部署が「営業」、「マーケティング」、「人事」の社員を取得するSQLです。

②BETWEENで範囲を指定する

SELECT * 
FROM employees  
WHERE age BETWEEN 30 AND 40;

この条件では年齢が30歳以上40歳以下の社員を取得するSQLです。
BETWEENはその数字を含むことに注意して使用しましょう。

③NOTで条件を除外する

SELECT * 
FROM employees  
WHERE NOT department = 'HR';

この条件では人事以外の社員を所得するSQLです。

4.まとめ

WHERE句はSQLの中でも非常に重要な部分であり、正しく使えば効率的にデータを操作できます。
しかし、条件指定のミスやデータ型の不一致でエラーが発生することもしばしばあります。

エラーを防ぐポイント

  • データ型(数値、文字列、日付)を正しく指定する
  • NULL値にはIS NULLまたはIS NOT NULLを使用する
  • 条件をグループ化して優先順位を明確にする
  • ワイルドカードやフォーマットはRDBMSに合わせて使用する

これを意識することでエラーをある程度回避できると思うので、ぜひ参考にしてください。
以上です。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?