3
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【0から始めるDB入門 Part2】SQL初級編 WHERE文

Last updated at Posted at 2025-02-02

はじめに

今回もSQLabさんの問題を解いていきながら、ステップバイステップでSQLについて学んでいこうと思います。
前回のSELECT文に続いて、今回はWHERE文についてまとめていきたいと思います!

初級編

SELECT文

WHERE文

今回はSQLの基礎中の基礎であるWHERE文について学びます!
SELECTで出力するものの条件を指定します。


問題1(検索)

発行年が2020年の書籍一覧を取得してください。

解答・解説
SELECT * FROM books
WHERE release_year = 2020;

解説

booksテーブルからrelease_yearが2020の書籍を全て取得します。WHERE句を使用して特定の条件(この場合は発行年が2020年)に一致するレコードをフィルタリングしています。

ポイント

  • 同じかどうかは=、違うかどうかは!=を使います。
  • WHERE句は、テーブルから特定の条件に一致するデータを抽出するために使用します。

問題2(文字の検索)

書籍名が「宇宙の歴史」のデータを取得してください。

解答・解説
SELECT * FROM books
WHERE name = '宇宙の歴史';

解説

booksテーブルからnameが「宇宙の歴史」である書籍を取得します。文字列を比較する際には、シングルクォーテーション ' ' で囲む必要があります。

ポイント

  • 文字列を検索する際には、値をシングルクォーテーション ' ' で囲みます。

問題3(キーワード)

「マンガ」というキーワードを含む書籍一覧を取得してください。

解答・解説
SELECT * FROM books
WHERE name LIKE '%マンガ%';

解説

このクエリは、name列に「マンガ」という文字列が含まれる書籍を取得します。LIKE演算子とワイルドカード文字 % を使用して部分一致検索を行います。

ポイント

  • LIKE演算子は部分一致検索を行う際に使用します。
  • % は任意の文字列(0文字以上)を表すワイルドカードです。
  • _は任意の1文字を表すワイルドカードです。
  • '%キーワード%' の形式で、文字列のどの位置にキーワードがあっても一致します。

問題4(数量指定)

男性の著者を先頭から3名取得してください。

解答・解説
SELECT * FROM authors
WHERE gender = '男性'
LIMIT 3;

解説

genderが「男性」である著者を3名取得します。LIMIT句を使用して取得するレコード数を制限しています。

※データの順序を指定したい場合は、ORDER BY句を使用する必要があります。

ポイント

  • LIMIT句は、結果セットの行数を制限します。
  • データベースによっては FETCH FIRST 3 ROWS ONLY を使用することもあります。
  • 特定の順序でデータを取得したい場合は、ORDER BY句と組み合わせて使用します。

問題5(NULL or NOT NULL)

発行年が明記されている書籍一覧を取得してください。

解答・解説
SELECT *
FROM books
WHERE release_year IS NOT NULL;

解説

release_yearがNULLでない(つまり、値が明記されている)書籍を取得します。IS NOT NULLを使用してNULLでない値を検索します。

ポイント

  • NULLは「値が存在しない」ことを表します。
  • =!=でNULLを比較することはできません。代わりに、IS NULLIS NOT NULLを使用します。

問題6(範囲)

総ページ数が300~400ページの書籍一覧を取得してください。

解答・解説
SELECT *
FROM books
WHERE total_page BETWEEN 300 AND 400;

解説

total_pageが300以上400以下の書籍を取得します。BETWEEN演算子は指定した範囲内の値を検索します。

ポイント

  • BETWEEN A AND B は、値がA以上B以下の範囲を含みます。
  • 範囲指定には、>=<=を使用しても同じ結果が得られます。
    WHERE total_page >= 300 AND total_page <= 400;
    

問題7(複数条件1)

発行年が2004, 2008, 2018年の書籍一覧を取得してください。

解答・解説
SELECT *
FROM books
WHERE release_year IN (2004, 2008, 2018);

または

SELECT *
FROM books
WHERE release_year = 2004 OR release_year = 2008 OR release_year = 2018;

解説

このクエリは、release_yearが2004、2008、または2018である書籍を取得します。IN演算子を使用すると、複数の値を簡潔に指定できます。

ポイント

  • IN演算子はリスト内のいずれかの値に一致するレコードを検索します。
  • 複数のOR条件を使用すると同じ結果が得られますが、INを使用する方が読みやすくなります。

問題8(パターンマッチング)

ISBNが「978」で始まる書籍一覧を取得してください。

解答・解説
SELECT *
FROM books
WHERE isbn LIKE '978%';

解説

このクエリは、isbnが「978」で始まる書籍を取得します。LIKE演算子とワイルドカード%を組み合わせて、特定のパターンに一致する文字列を検索しています。

ポイント

  • 文字列の先頭を指定する場合は、'パターン%'とします。
  • %は任意の文字列(0文字以上)を表します。
  • LIKEはパターンマッチングに使用されます。

問題9(四則演算)

書籍の税込価格一覧を取得してください。消費税率は10%です。
出力項目はbook_id(書籍ID)とtax_included_price(税込価格)

解答・解説
SELECT book_id, price * 1.10 AS tax_included_price
FROM book_sales;

解説

このクエリは、priceに1.10を掛けて税込価格を計算し、book_idとともに取得しています。計算結果にASを使用して列名(エイリアス)を付けています。

ポイント

  • 四則演算(+, -, *, /)はSELECT句内で使用できます。
  • ASを使用して計算列にエイリアス(別名)を付けると、結果セットが見やすくなります。

問題10(比較)

総ページ数が100ページ未満の書籍一覧を取得してください。

解答・解説
SELECT *
FROM books
WHERE total_page < 100;

解説

このクエリは、total_pageが100より小さい書籍を取得します。<演算子を使用して指定した値より小さいレコードを検索します。

ポイント

  • 比較演算子:
    • < 未満
    • > 超過
    • <= 以下
    • >= 以上
    • = 等しい
    • <> 等しくない
  • 数値の比較にこれらの演算子を使用します。

問題11(否定)

定休日が月曜日ではない店舗一覧を取得してください。

解答・解説
SELECT *
FROM stores
WHERE NOT holiday = '月曜日';

または

SELECT *
FROM stores
WHERE holiday <> '月曜日';

解説

このクエリは、holidayが「月曜日」ではない店舗を取得します。NOT演算子や<>演算子を使用して条件を否定しています。

ポイント

  • NOT演算子は条件を否定します。
  • <>は「等しくない」を意味します。
  • 文字列の比較でも<>を使用できます。

問題12(論理演算)

発行年が2000年以上で総ページ数が200ページ以下の書籍一覧を取得してください。

解答・解説
SELECT *
FROM books
WHERE release_year >= 2000
  AND total_page <= 200;

解説

このクエリは、release_yearが2000以上かつtotal_pageが200以下の書籍を取得します。AND演算子を使用して複数の条件を組み合わせています。

ポイント

  • AND演算子は、すべての条件がTRUEの場合にレコードを取得します。
  • 複数の条件を組み合わせることで、より細かいデータ抽出が可能です。

さいごに

今回の問題を通して、WHERE句の基本的な使い方を学びました。WHERE句はデータベースから必要な情報を抽出する際に非常に重要な役割を果たします。条件指定や絞り込みを行うことで、膨大なデータから必要なデータだけを効率的に取得することができます。

まとめ

  • WHERE句:特定の条件に一致するレコードを選択するために使用します。
  • 比較演算子=, <>, <, >, <=, >= などを使用して数値や文字列の比較を行います。
  • 論理演算子AND, OR, NOT を使用して複数の条件を組み合わせます。
  • NULLの扱いIS NULLIS NOT NULL を使用してNULL値を検索します。
  • 部分一致検索LIKE キーワードとワイルドカード %_ を使用して文字列のパターンマッチングを行います。
  • 範囲指定BETWEEN A AND B で範囲内の値を検索します。
  • リスト内の値の検索IN を使用して複数の値の中から一致するものを検索します。
  • 結果の制限LIMIT 句を使用して取得するレコード数を制限します。

次回予告

次回は、SQL中級編のデータの集約について学びたいと思います!お楽しみに

3
3
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
3
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?