SQL / LESSON 02 / SQL02

SQL:WHERE で絞り込む

1学習の目的

2基礎解説

前章では常に全件が返ってきました。WHERE を付けると「条件に合う行だけ」に絞り込めます。

やりたいこと書き方意味
一致する行WHERE category = 'PC'文字列はシングルクォート
数値で比較WHERE price >= 10000> < >= <= =
範囲で絞るWHERE price BETWEEN 3000 AND 50000両端を含む
複数の候補WHERE id IN (1, 3, 5)どれかに一致
✅ 覚えるべき重要ポイント
  1. 文字列はシングルクォート ' で囲む。数値は囲まない。ダブルクォートは環境によって意味が変わるので、文字列には必ずシングルを使う。
  2. 命令は大文字小文字を区別しないが、データの中身は区別するSELECT でも select でも動くが、'PC''pc'別物で、後者は0件になる。
  3. 「等しくない」は <> または !=。どちらも同じ意味で、<> のほうが古くからある正式な書き方。
  4. BETWEEN a AND ba も b も含む。「3000円以上5万円以下」がそのまま書ける。
  5. LIKE であいまい検索ができる。%任意の文字列_任意の1文字'%マウス%' で「マウスを含む」。

現場使用例:特定の顧客の注文だけ抽出、今月の売上だけ集計、在庫切れ商品の一覧、キーワードを含む商品の検索。実務のSQLはほぼすべて WHERE が付く

-- 1万円以上の商品だけ
SELECT name, price
FROM products
WHERE price >= 10000;

-- カテゴリが PC のものだけ(文字列はシングルクォート)
SELECT *
FROM products
WHERE category = 'PC';

-- 範囲で絞る(3000円以上 50000円以下)
SELECT name, price
FROM products
WHERE price BETWEEN 3000 AND 50000;

-- 複数の候補から(id が 1 か 3 か 5)
SELECT name
FROM products
WHERE id IN (1, 3, 5);

-- あいまい検索(名前に「ー」を含む)
SELECT name
FROM products
WHERE name LIKE '%ー%';

3基本ドリル(10問)

SQL02-D01 価格が 10000円以上の商品の name と price を取り出すSQLを書け。 コーディング★☆☆無料
期待される結果

name / price の2列。ノートPC と モニター

ヒント

WHERE price >= 10000 を FROM の後ろに付ける。

模範解答
SELECT name, price
FROM products
WHERE price >= 10000;
解説

SELECT(何を)→ FROM(どこから)→ WHERE(どんな条件で)という語順。この3つがSQLの基本構造になる。

SQL02-D02 WHERE category = pc と、クォートを付けずに書くとどうなるか。
A. 正しく動く B. エラーになる C. 全件返る D. 0件返る
選択★☆☆無料
期待される結果

解答 == B

ヒント

クォートが無いと、SQLはそれを何だと解釈するか。

模範解答
B
解説

クォートが無いと「pc という名前の列」だと解釈される。そんな列は存在しないのでエラーになる。文字列は必ずシングルクォートで囲む。

SQL02-D03 category が 'PC' の行を、すべての列で取り出すSQLを書け。 コーディング★☆☆無料
期待される結果

5列。ノートPC と モニターの2行

ヒント

WHERE category = 'PC' と書く。文字列はシングルクォート。

模範解答
SELECT *
FROM products
WHERE category = 'PC';
解説

文字列の一致は = で判定する。プログラミング言語では == と書くことが多いが、SQLは1つでよい。

SQL02-D04 在庫が10個未満の商品名を取り出すSQLを完成させよ。 穴埋め★☆☆無料
コード
SELECT name
FROM products
____ stock < 10;
期待される結果

name に ノートPC と モニター

ヒント

「〜という条件で」を意味するキーワード。

模範解答
WHERE
解説

WHERE は行を絞り込むための句。これが無いと全件が対象になる。

SQL02-D05 WHERE category = 'pc'(小文字)と書いた場合、結果はどうなるか。
A. PC の2件が返る B. 0件になる C. 全件返る D. エラーになる
選択★☆☆無料
期待される結果

解答 == B

ヒント

命令と、データの中身。どちらが大文字小文字を区別するか。

模範解答
B
解説

命令は区別しないが、データの中身は区別する。エラーにならず静かに0件が返るので、「なぜかヒットしない」の原因になりやすい。

SQL02-D06 価格が 3000円以上 50000円以下の商品の name と price を、BETWEEN を使って取り出すSQLを書け。 コーディング★★☆無料
期待される結果

3行。マウス / キーボード / モニター

ヒント

WHERE price BETWEEN 3000 AND 50000 と書く。両端を含む。

模範解答
SELECT name, price
FROM products
WHERE price BETWEEN 3000 AND 50000;
解説

price >= 3000 AND price <= 50000 と同じ意味だが、BETWEEN のほうが意図が明確で読みやすい。

SQL02-D07 id が 1・3・5 の商品名を取り出すSQLを完成させよ。 穴埋め★★☆無料
コード
SELECT name
FROM products
WHERE id ____ (1, 3, 5);
期待される結果

3行。ノートPC / キーボード / USBメモリ

ヒント

「〜の中に」を意味する2文字のキーワード。

模範解答
IN
解説

id = 1 OR id = 3 OR id = 5 と書くより短い。候補が10個20個になっても IN なら1行で済む。

SQL02-D08 LIKE '%マウス' はどんな文字列にマッチするか。
A. マウスで始まる B. マウスで終わる C. マウスを含む D. マウスと完全一致
選択★★☆無料
期待される結果

解答 == B

ヒント

% は「任意の文字列」。それが前に付いている。

模範解答
B
解説

% の位置で意味が変わる'マウス%' は前方一致、'%マウス' は後方一致、'%マウス%' は部分一致。

SQL02-D09 category が 'PC' ではない商品の name を取り出すSQLを書け。 コーディング★★☆無料
期待される結果

3行。マウス / キーボード / USBメモリ

ヒント

「等しくない」は <> または != を使う。

模範解答
SELECT name
FROM products
WHERE category <> 'PC';
解説

<>!= はどちらも同じ。SQLの正式な書き方は <> だが、実務ではどちらも見かける。

SQL02-D10 商品名に「」(長音記号)を含む商品の name を、LIKE を使って取り出すSQLを書け。 コーディング★★☆無料
期待される結果

3行。ノートPC / キーボード / モニター

ヒント

WHERE name LIKE '%ー%' と書く。前後に % を付けると部分一致。

模範解答
SELECT name
FROM products
WHERE name LIKE '%ー%';
解説

検索機能の実装はこの形。ユーザーが入力したキーワードを % で挟めば、あいまい検索になる。

4実践シナリオ(5問)

SQL02-S01 【発注リスト】在庫が10個未満の商品について、商品名を「商品」、在庫数を「残り」という別名で取り出すSQLを書け。 コーディング★★☆無料
期待される結果

商品 / 残り の2列。ノートPC 5 と モニター 7

ヒント

WHERE で絞り、SELECT で AS を使う(SQL01)。

模範解答
SELECT name AS 商品, stock AS 残り
FROM products
WHERE stock < 10;
解説

絞り込みと別名は組み合わせられる。実務のレポートは「条件に合う行を、読みやすい列名で」というこの形がほとんど。

SQL02-S02 【予算内の商品】予算1万円以内で買える商品を探したい。価格が 10000円以下の商品の name と price を取り出すSQLを書け。 コーディング★★☆無料
期待される結果

3行。マウス / キーボード / USBメモリ

ヒント

「以下」は <= を使う。< だと10000円ちょうどが漏れる。

模範解答
SELECT name, price
FROM products
WHERE price <= 10000;
解説

「以下」と「未満」の取り違えは実務でも起きる<<= の1文字違いで、境界の1件が結果から消える。

SQL02-S03 【在庫金額が高い商品】在庫金額(price × stock)が 20万円以上の商品について、name と在庫金額(別名 stock_value)を取り出すSQLを書け。 コーディング★★☆無料
期待される結果

2行。ノートPC 640000 / モニター 315000

ヒント

WHERE の中でも計算式が使える。WHERE price * stock >= 200000 と書く。

模範解答
SELECT name, price * stock AS stock_value
FROM products
WHERE price * stock >= 200000;
解説

WHERE の中で計算できるのがポイント。保存されていない値でも条件にできるので、「粗利が◯円以上」といった絞り込みが可能になる。

SQL02-S04 【周辺機器の在庫確認】category が '周辺機器' の商品について、商品名(別名「商品名」)・価格(別名「価格」)・在庫(別名「在庫」)を取り出すSQLを書け。 コーディング★★★無料
期待される結果

3列3行。マウス / キーボード / USBメモリ

ヒント

日本語の値も条件に使える。シングルクォートで囲むのは同じ。

模範解答
SELECT name AS 商品名, price AS 価格, stock AS 在庫
FROM products
WHERE category = '周辺機器';
解説

日本語のデータもそのまま条件にできる。ただし全角・半角や表記ゆれ(「周辺機器」と「周辺機器 」)があると一致しないので、実務ではデータの整理が重要になる。

SQL02-S05 【特定商品の照会】id が 2・4 の商品について、name と price と、税込価格(price × 1.1 を整数に変換、別名 tax_price)を取り出すSQLを書け。IN を使うこと。 コーディング★★★無料
期待される結果

3列2行。マウス 3200 3520 / モニター 45000 49500

ヒント

WHERE id IN (2, 4) で絞り、SELECT で CAST を使う(SQL01のS04)。

模範解答
SELECT name, price, CAST(price * 1.1 AS INTEGER) AS tax_price
FROM products
WHERE id IN (2, 4);
解説

IDを指定して複数件を引くのは、システム間の連携でよく使う形。「この注文に含まれる商品を全部取ってきて」という処理はまさにこれ。

5仕上げ課題

SQL02-FINAL 【要注意商品リストの作成】仕入れ担当から「単価が高いのに在庫が少ない商品を洗い出してほしい」と依頼された。

条件
・価格が 10000 円以上
・かつ、在庫が 10 個未満
※ 2つの条件は AND でつなぐ(詳しくは次章で扱うが、ここでは「かつ」の意味で使ってよい)

表示する列
name → 別名「商品名」
price → 別名「単価」
stock → 別名「在庫」
④ 在庫金額(price × stock)→ 別名「在庫金額」

期待される結果(4列 × 2行)
商品名 | 単価 | 在庫 | 在庫金額
ノートPC | 128000 | 5 | 640000
モニター | 45000 | 7 | 315000
期待される結果

4列 × 2行が完全一致

ヒント

WHERE price >= 10000 AND stock < 10 と2つの条件をつなぐ。SELECT では4つの列を AS で別名を付けて並べる。在庫金額は price * stock。

模範解答
SELECT
  name AS 商品名,
  price AS 単価,
  stock AS 在庫,
  price * stock AS 在庫金額
FROM products
WHERE price >= 10000
  AND stock < 10;
解説

5件のテーブルから、条件に合う2件だけを取り出せた。これが1万件でも10万件でも、SQLは同じ1本で済む——ここがExcelのフィルタと決定的に違う点だ。

注目してほしいのはWHERE の書き方だ。条件を改行してインデントすると、「価格が1万円以上」「かつ在庫が10未満」という2つの条件が視覚的に分かれて読める。条件が5個6個と増えていくと、この書き方の差が効いてくる。

そしてこの結果は「発注すべき商品」そのものだ。単価が高い商品の在庫が切れると売上への影響が大きい。SQLはデータを取り出す道具だが、取り出し方を考えることは、そのまま業務の課題を考えることでもある。

次章では AND / OR / NOT を本格的に扱う。「PCカテゴリ、または在庫切れ間近」のような複雑な条件を、正確に組み立てられるようになる。