CodeGym /コース /SQL SELF /SELECT、WHERE、ORDER BYでシンプルなクエリを作る

SELECT、WHERE、ORDER BYでシンプルなクエリを作る

SQL SELF
レベル 3 , レッスン 2
使用可能

じゃあ今までやったことを全部まとめて、SELECTWHEREORDER BYを組み合わせてシンプルだけど便利なクエリを作る方法を覚えよう!このスキルは、ユーザーリストを取得したり、ちょっとしたレポートを作ったり、いろんな場面で役立つよ。

始める前に、シンプルなSQLクエリの構造をもう一度おさらいしよう:

SELECT カラム1, カラム2, カラム3
FROM テーブル
WHERE 条件
ORDER BY カラム ASC
LIMIT 行数
OFFSET 行数;

もしSQLが小説だったら、SELECTは章のタイトル、FROMはその内容、WHEREはストーリーの説明って感じ。で、ORDER BYは順番をつけて、もっと読みやすくしてくれるんだ!

演算子の順番は絶対に決まってるよ。 いくつか省略するのはOKだけど、順番を変えるのはダメ。

例1: 成績が優秀な学生の名前を選ぶ

例えば、こんな構造とデータを持つstudentsテーブルがあるとしよう:

id name age grade
1 Otto 21 A
2 Maria 22 B
3 Alex 20 A
4 Nat 23 C
5 Dan 25 B

成績が優秀(つまりgrade = 'A')な学生全員のリストを、名前順で取得したいときはこうやる:

SELECT name
FROM students
WHERE grade = 'A'
ORDER BY name ASC;

結果:

name
Alex
Otto

解説:

  1. SELECT name — 名前だけを選ぶ。いらないデータを取ってくるのは無駄だしね。
  2. WHERE grade = 'A' — 成績が優秀な人だけフィルタする。
  3. ORDER BY name ASC — 学生の名前をアルファベット順に並べる。

例2: 価格で商品を探す

今度は、productsテーブルに商品情報が入ってるとしよう:

id product_name category price
1 スマートフォン Electronics 30000
2 テレビ Electronics 45000
3 冷蔵庫 Appliances 50000
4 掃除機 Appliances 15000
5 電球 Lighting 500

「Electronics」カテゴリの商品だけを、価格が高い順に並べてリストアップしたい場合はこう:

SELECT product_name, price
FROM products
WHERE category = 'Electronics'
ORDER BY price DESC;

結果:

product_name price
テレビ 45000
スマートフォン 30000

解説:

  1. SELECT product_name, price — 商品名と価格を選ぶ。
  2. WHERE category = 'Electronics' — 「Electronics」カテゴリの商品だけフィルタする。
  3. ORDER BY price DESC — 価格が高い順(高いものが最初)で並べる。

例3: 複雑なフィルターとロジック

さっきと同じstudentsテーブルを使うよ。今度は、21歳より上で、成績がBCの学生を年齢順で探したい。複数の条件を組み合わせる場合はこう:

SELECT name, age, grade
FROM students
WHERE age > 21 AND (grade = 'B' OR grade = 'C')
ORDER BY age ASC;

結果:

name age grade
Maria 22 B
Nat 23 C
Dan 25 B

解説:

  1. WHERE age > 21 — 21歳より上の学生だけ選ぶ。
  2. AND (grade = 'B' OR grade = 'C') — 成績がBCの人だけフィルタ。カッコは条件をまとめるために使うよ。
  3. ORDER BY age ASC — 年齢が若い順に並べる。

例4: ソートとフィルタの組み合わせ

またproductsテーブルに戻るよ。今度は、価格が50,000未満の商品をカテゴリ順に並べて、さらにカテゴリごとに価格が安い順にしたい。

SELECT product_name, category, price
FROM products
WHERE price < 50000
ORDER BY category ASC, price ASC;

結果:

product_name category price
掃除機 Appliances 15000
スマートフォン Electronics 30000
テレビ Electronics 45000
電球 Lighting 500

解説:

  1. WHERE price < 50000 — まず価格が50,000未満の商品だけフィルタする。
  2. ORDER BY category ASC, price ASC — カテゴリ順(アルファベット順)で並べて、さらにカテゴリ内で価格が安い順に並べる。

例5: よくあるミス — 条件の抜け

今度は、どんなミスが起きるか見てみよう。論理演算子を使うときに条件をまとめるのを忘れたらどうなる?

間違ったクエリ:

SELECT name, age, grade
FROM students
WHERE age > 21 AND grade = 'B' OR grade = 'C'
ORDER BY age ASC;

ここではOR grade = 'C'AND age > 21を無視して実行されるから、21歳以下でも成績がCの人が全部出てきちゃう。

だから、いつもカッコを使って分かりやすくしよう:

WHERE age > 21 AND (grade = 'B' OR grade = 'C')
コメント
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION