MySQLでデータ取得する時などの検索条件を指定するWHERE句について説明します。
検索条件を指定する「WHERE」句
WHERE句は、SELECT文やDELETE文など様々なクエリで使います。SELECT文でWHERE句を使う時の基本となる書式は以下の通りです。
1 |
SELECT カラム FROM テーブル WHERE 条件1 |
条件を複数指定する
検索条件を複数指定するには、「AND」または「OR」を使います。
AND:条件1と条件2のどちらにも合致
1 |
SELECT カラム FROM テーブル WHERE 条件1 AND 条件2 |
OR:条件1または条件2のどちらかに合致
1 |
SELECT カラム FROM テーブル WHERE 条件1 OR 条件3 |
条件は、ANDとORでつなげることで任意の数だけ設定できます。
より複雑な複数条件
ANDとORを使い3つ以上の条件を指定する場合は、括弧()で囲むことで条件指定します。
条件1または条件2に合致し、なおかつ条件3に合致するデータを全カラム取得する場合は以下のようなクエリになります。
1 |
SELECT * FROM テーブル WHERE (条件1 OR 条件2) AND 条件3 |
条件に使う演算子
条件の指定には、「=」や「BETWEEN」などの演算子と呼ばれるものを使います。
例として、以下のようなID, Name, Class, Scoreで構成されるUserテーブルがあるとします。
Userテーブル
1 2 3 4 5 6 7 8 |
+----+------+-------+-------+-----------------+ | ID | Name | Class | Score | Mail | +----+------+-------+-------+-----------------+ | 1 | John | A | 23 | john@sample.com | | 2 | Nick | B | 45 | nick@sample.net | | 3 | Micl | B | 67 | nick@exaple.jp | | 4 | Paul | C | 89 | paul@paul.com | +----+------+-------+-------+-----------------+ |
値との完全一致「=」「IN」「NOT IN」
指定した値との一致を条件とする場合、「=」演算子を使います。
NameがJohnのカラムを取得する
1 |
SELECT * FROM User WHERE Name = "John"; |
複数の指定した値との一致を条件とする場合、「IN」を使います。「カラム IN (値1, 値2, ...)」のように、カンマ区切りで値を複数指定します。
ClassがAとCのカラムを取得する
1 |
SELECT * FROM User WHERE Class IN (A, C); |
数値の比較「>」「<」「BETWEEN」
数値が指定した値より大きいか小さいかを条件とする場合は、「>」「<」演算子を使います。
Scoreが40以上のカラムを取得
1 |
SELECT * FROM User WHERE Score > 40; |
Scoreが40以下のカラムを取得
1 |
SELECT * FROM User WHERE Score < 40; |
「値A~値B」の間にある数値を指定するには「BETWEEN」を使います。
Scoreが40~70のカラムを取得する
1 |
SELECT * FROM User WHERE Score BETWEEN 40 AND 70; |
また、「NOT BETWEEN」とすることで「値A~値B」に間にない数値を指定できます。
値との曖昧な一致「LIKE」
指定した値と一部だけ一致するカラムを取得するには、「LIKE」を使います。ワイルドカードとして「%」と「_」が使えます。
「%」任意の0文字以上の文字列
「_」任意の1文字
Mailの末尾がcomのカラムを取得
1 |
SELECT * FROM User WHERE Mail LIKE "%com"; |
このほかにも、正規表現を使った演算子である 「REGEXP」や「RLIKE」などもあります。
また、サブクエリや結合を使うことでより複雑な条件を指定することができます。