WHEREを使いこなして欲しいレコードだけ取得しよう
前回の記事で、SELECT文(データの取得)、UPDATE文(更新)、DELETE文(削除)を解説しました。
これら全ての命令において、最も重要なパーツがあります。
それが「WHERE(ウェア)」句です。
もしWHEREがなかったらどうなるか。
- 「データをください」→ 全員来る。
- 「更新して」→ 全員書き換わる。
- 「削除して」→ 全員消える。
大惨事です。
WHEREは、データベースという混沌とした人混みの中から特定の人物だけを指名する「フィルター」です。
今日はこのフィルターを自在に操り、情報の海から理想のデータだけを一本釣りする技術を伝授します。
基本:イコールと不等号で足切りする
最も基本的な使い方は「完全一致」です。
「田中」という名前の人だけ欲しい場合。
<strong>SELECT * FROM users WHERE name = '田中';</strong>Code language: HTML, XML (xml)
これで、佐藤も鈴木も門前払いです。
数字の場合は、算数で習った「不等号」が使えます。
「20歳以上(20を含む)」の人だけ通したい場合。
<strong>SELECT * FROM users WHERE age >= 20;</strong>Code language: HTML, XML (xml)
- =: 等しい
- <> または !=:等しくない(以外)
- >:より大きい
- <:より小さい
- >=:以上
- <=:以下
これらは基本中の基本です。
SQLに限らずよく出てきますが、呼吸をするように書けるようになってください。
ANDとOR:高望みと妥協の婚活理論
条件は一つとは限りません。
「20代で、かつ、年収1000万以上の人」を探したい。
そんな時は AND (かつ)を使います。
<strong>SELECT * FROM users WHERE age >= 20 AND income >= 1000;</strong>Code language: HTML, XML (xml)
両方の条件を満たすエリートだけが通過できます。条件を増やせば増やすほど結果は少なくなります。
逆に、「20代、または、年収1000万以上の人」ならどうでしょう。
どちらか片方でも満たせばOK。
そんな時は OR (または)を使います。
<strong>SELECT * FROM users WHERE age >= 20 OR income >= 1000;</strong>Code language: HTML, XML (xml)
こちらは条件を増やすほど結果が多くなります。
「ANDは厳しく絞る」「ORは緩く広げる」。
この感覚を持ってください。
LIKE:うろ覚えでも許される曖昧検索
「名前が『田』で始まる人を探したいけど、田中か田村か忘れた」
そんなうろ覚えな時は、LIKE (ライク)を使います。
ここで登場する魔法の記号が %(パーセント)です。これは「何かの文字(0文字以上)」を意味します。
<strong>-- 「田」で始まる人(田中、田村、田代まさし...)
SELECT * FROM users WHERE name LIKE '田%';</strong>Code language: HTML, XML (xml)
逆に、「田」で終わる人なら'%田'。
どこかに「田」が含まれていればいいなら'%田%'です。
Google検索のような「キーワード検索」は、裏側でこの「%」が必死に働いています。
NULLの罠:イコールでは捕まえられない
SQLには「NULL(ヌル)」という厄介な値があります。
これは「データ未入力」や「無」を意味します。
「年齢が未入力の人」を探したい時、こう書いてはいけません。
筆者は実際にこう書き、NULLなのになぜか取れないと困ったことがあります。
<strong>-- 間違い
SELECT * FROM users WHERE age = NULL;</strong>Code language: HTML, XML (xml)
NULLは「値」ではないため、イコールでは比較できません。
「無」は「等しい」という概念すら持たないのです。
専用の書き方IS NULLを使います。
<strong>-- 正解
SELECT * FROM users WHERE age IS NULL;</strong>Code language: HTML, XML (xml)
逆に「未入力じゃない人」ならIS NOT NULLです。
ここだけ文法が特殊なので初心者は必ずハマります。テストに出ます。
まとめ:条件を制する者はデータを制す
- =, <, >:基本の足切り。
- AND:厳しく絞り込む(かつ)。
- OR:選択肢を広げる(または)。
- LIKE:曖昧な検索(%を使う)。
- IS NULL:無を探す専用の言葉。
WHERE句を使いこなせば、100万件のデータの中からたった一つの真実を一瞬で抜き出せます。
逆に、条件指定をミスれば関係ないデータを巻き込んで事故を起こします。
データベースに対する命令は、常に具体的でなければなりません。
「なんかいい感じのデータちょうだい」は通用しないのです。


コメント