さて、もうSELECTコマンドの使い方は知ってるよね。少なくとも、データベースからデータを取り出したり、必要なカラムを選んだり、生データをちょっと便利な情報に変えるクエリは書けるようになったはず。そろそろ、魔法のパレットに「フィルター」を追加しよう。そう、今日はデータのフィルタリングについて話すよ。使うのは=、>、<、<>みたいな比較演算子だ。
でっかいテーブルを扱うとき、全部のデータを見る必要はないよね(カオスに飛び込みたいなら別だけど)。必要な行だけを抜き出すために、SQLではWHEREキーワードを使うんだ。これで、各行がクエリの結果に入るための条件を指定できる。で、その条件に使うのが比較演算子ってわけ。
WHEREでのフィルタリング構文
SELECT カラム1, カラム2
FROM テーブル
WHERE 条件;
シンプルな構造だよ:FROMでテーブルを指定した後にWHEREを書いて、どんな条件で行を選ぶか書くだけ。
例として、studentsテーブルからデータを取り出してみよう:
SELECT name, age
FROM students
WHERE age > 18;
このクエリは18歳より上の学生(名前と年齢)だけを選ぶよ。簡単でしょ?じゃあ、比較演算子の世界に飛び込もう。
基本の比較演算子
SQLにはいくつかの比較演算子があって、好きなようにデータをフィルタできる。数学で見たことあるやつだけど、ちょっとだけSQL流のルールがあるから確認しよう。よく使うやつはこれ:
=— 等しい。<>— 等しくない(!=も一部のDBで使えるけど、<>がSQL標準だからおすすめ)。>— より大きい。<— より小さい。>=— 以上。<=— 以下。
比較演算子の表
| オペレーター | 意味 | 例 | 結果 |
|---|---|---|---|
= |
等しい | age = 20 |
年齢が20の行を返す |
<> |
等しくない | age <> 20 |
年齢が20じゃない行を返す |
> |
より大きい | age > 18 |
年齢が18より大きい行を返す |
< |
より小さい | age < 18 |
年齢が18より小さい行を返す |
>= |
以上 | age >= 18 |
年齢が18以上の行を返す |
<= |
以下 | age <= 18 |
年齢が18以下の行を返す |
比較演算子の使い方例
例1: 20歳より上の学生を取り出す
これがテーブルだよ:
| id | name | age |
|---|---|---|
| 1 | Alex Lin | 22 |
| 2 | Anna Song | 19 |
| 3 | Otto Art | 21 |
SELECT name, age
FROM students
WHERE age > 20;
ここではage > 20という条件を指定して、20歳を超える学生だけを選んでる。19歳の学生がいても、残念だけど結果には入らない。
この場合の結果はこうなる:
| name | age |
|---|---|
| Alex Lin | 22 |
| Otto Art | 21 |
Anna Songさんは19歳だから選ばれなかったね。
例2: 給料が50,000以上の社員を取り出す
これがemployeesテーブル:
| first_name | last_name | salary |
|---|---|---|
| Julia | Kim | 48000 |
| Marcus | Lee | 52000 |
| Anya | Patel | 50000 |
| Ethan | Zhou | 61000 |
SQLクエリはこれ:
SELECT first_name, last_name, salary
FROM employees
WHERE salary >= 50000;
このクエリは給料が50,000ちょうどかそれ以上の社員を全部返すよ。イコールもちゃんと含まれる!
| first_name | last_name | salary |
|---|---|---|
| Marcus | Lee | 52000 |
| Anya | Patel | 50000 |
| Ethan | Zhou | 61000 |
例3: 価格が100未満の商品を取り出す
| product_name | price |
|---|---|
| USB Cable | 85 |
| Wireless Mouse | 150 |
| Notebook | 60 |
| Mechanical Pencil | 45 |
SELECT product_name, price
FROM products
WHERE price < 100;
ネットショップなら、こんなクエリで100未満の商品だけを選べるよ(たとえば「全部99円!」みたいなキャンペーン用に)。
| product_name | price |
|---|---|
| USB Cable | 85 |
| Notebook | 60 |
| Mechanical Pencil | 45 |
例4: 特定のidを持つユーザーを除外する
SELECT id, username
FROM users
WHERE id <> 1;
このクエリはidが1のユーザー以外を全部選ぶよ。<>は「この値じゃないやつ全部ちょうだい」って意味。
usersテーブル:
| id | username |
|---|---|
| 1 | admin |
| 2 | elena.gray |
| 3 | tom.bishop |
| 4 | aria.noble |
クエリの結果:
| id | username |
|---|---|
| 2 | elena.gray |
| 3 | tom.bishop |
| 4 | aria.noble |
比較演算子でフィルタリングするときのよくあるミス
フィルタ付きクエリを書き始めたばかりだと、ミスはよくある。よくあるパターンをいくつか紹介するね:
問題1: カラム名のミス
クエリでカラム名を間違えると、PostgreSQLはエラーを出す。例えば:
SELECT name, age
FROM students
WHERE ages > 18; -- エラー: カラム "ages" は存在しない
クエリを書く前に、カラム名が正しいか必ずチェックしよう。
問題2: 比較演算子の使い間違い
初心者がよくやるのが、演算子の順番を間違えること。例えば:
SELECT name, age
FROM students
WHERE age => 18; -- エラー: 演算子が間違ってる
正しい構文は>=で、=>じゃないよ。
問題3: 存在しない値でフィルタする
テーブルに存在しない値でフィルタすると、クエリは動くけど結果は空っぽになる。例えば:
SELECT name
FROM students
WHERE age = 999; -- 結果: 0行
これは構文エラーじゃないけど、データが出ると思ってたら混乱するかも。
実践での使いどころ
比較演算子を使ったデータのフィルタリングは、いろんな場面で使えるよ:
- データ分析: 例えば、10,000ルピー以上使ったお客さんだけを選ぶとか。
- レポート: 平均より給料が高い社員を選ぶとか。
- モニタリング: ここ1ヶ月アクティブじゃなかったユーザーを追跡するとか。
SQLなら巨大なテーブルから必要なデータをサクッと取り出せるし、比較演算子はその第一歩だよ。
GO TO FULL VERSION