どうもニコイチです。「データベースから欲しい情報だけをピンポイントで引き出す」──これって、まるで宝探しのようでワクワクしませんか?SQLでは、WHERE句を活用して複雑な条件設定や欠損のチェックが簡単に行えます。今回は、AND・OR・BETWEEN、そしてIS NOT NULLを組み合わせた少し応用的なフィルタリング方法を見ていきましょう。実際のクエリ例を交えながら解説していくので、初めての方でも安心して読み進めてください。
目次
WHERE句とANDの組み合わせ
「複数の条件がすべて当てはまるデータだけ」を取り出したいときに便利です。
AND
でつなぐと、すべての条件を満たす行だけが結果に残ります。- たとえば「価格が25ドルより高く、発行年が2016年以降(2016年を含む)の書籍を探す」といった条件を同時に設定できます。
サンプルクエリ
SELECT *
FROM books
WHERE Price > 25
AND Year >= 2016;
- 「Price > 25」が真(true)
- 「Year >= 2016」が真(true)
- 上記2つを両方満たす書籍だけを取得
WHERE句とORの組み合わせ
「複数の条件のうち、どれか1つでも当てはまるデータだけ」を取り出したいときに使います。
- たとえば「レビュー数が1万未満」または「ジャンルがフィクション(Fiction)」のいずれかに該当する書籍を、まとめて取得したいときに便利です。
サンプルクエリ
SELECT *
FROM books
WHERE Reviews < 10000
OR Genre = 'Fiction'
LIMIT 20;
- 「Reviews < 10000」が真(true)または「Genre = ‘Fiction’」が真(true)
- これらいずれか一方でも当てはまれば、結果に含まれます
- さらに、先頭20件だけ取り出すために
LIMIT 20
を使っています
WHERE句とBETWEENの組み合わせ
指定した範囲(AからBまで)に入る値を持つ行を取り出すための構文です。数字の範囲はもちろん、日付にも応用できます。
BETWEEN A AND B
は「A以上かつB以下」を表します。- たとえば「レビュー数が100以上1万以下」のような範囲指定が可能です。
サンプルクエリ
SELECT *
FROM books
WHERE Reviews BETWEEN 100 AND 10000;
- Reviewsカラムの値が100以上かつ10000以下の行だけ取り出します
WHERE句とINの組み合わせ
複数の「具体的な値の中に含まれているかどうか」でフィルタリングしたいときに使います。
- たとえば「発行年が2010年または2019年」である書籍を探す場合は
IN
が便利です。
サンプルクエリ
SELECT *
FROM books
WHERE Year IN (2010, 2019);
Year
が2010か2019のどちらかに当てはまる書籍だけを表示
WHERE句とIS NOT NULLの組み合わせ
「NULL(値が入っていない状態)」ではない行だけを取り出したいときに使います。
- カラムにデータの欠損がないか確認したいとき、よく利用されます。
サンプルクエリ
SELECT COUNT(*)
FROM books
WHERE Name IS NOT NULL
AND Author IS NOT NULL;
- 書籍名(Name)も著者名(Author)もNULLじゃない行だけを数えます
COUNT(*)
で件数を調べることもできます
応用例:複数条件+欠損チェック+範囲指定
ここまで学んだ「AND」「BETWEEN」「IS NOT NULL」を組み合わせることで、さらに細かい条件設定が可能になります。
課題で挙げられたシチュエーション
- 発行年(Year)が2014年から2018年の間
- 書籍名(Name)と著者名(Author)に欠損値(NULL)がない
- 書籍名・著者名・レビュー数(Reviews)を表示
- 最初の20行だけ取得
実際のSQLクエリ例
SELECT Name, Author, Reviews
FROM books
WHERE Year BETWEEN 2014 AND 2018
AND Name IS NOT NULL
AND Author IS NOT NULL
LIMIT 20;
- Year BETWEEN 2014 AND 2018
発行年2014〜2018(2014と2018を含む)の書籍だけ絞り込みます。 - Name IS NOT NULL
書籍名に欠損値がないものを絞り込みます。 - Author IS NOT NULL
著者名に欠損値がないものを絞り込みます。 - LIMIT 20
その結果のうち、先頭20行だけを取得します。
こうすることで、指定した条件にしっかり合致したデータだけを必要な分だけ取り出せるわけです。
まとめ
- AND:すべての条件を満たす行だけを取得
- OR:複数の条件のうち、どれか1つでも当てはまれば取得
- BETWEEN:範囲指定をするときに便利
- IN:特定の値の候補を複数指定して検索
- IS NOT NULL:NULLではないデータを抽出
- これらを組み合わせることで、高度な絞り込みが可能
SQLのフィルタリング機能は実務でも頻繁に使われます。たとえば「販売日が〇年~〇年の間で、価格が××円以上、在庫数がNULLじゃない商品だけ」といったケースでも一気に条件をまとめられます。どの演算子も頻出なので、ぜひ実際の環境で試してみてくださいね。
コメント