複数の条件を満たすデータだけを取得!MySQLのSELECT ... WHERE ... OR
MySQLにおけるSELECT ... WHERE ... OR の解説
SELECT ... WHERE ... OR
は、MySQLデータベースから特定の条件を満たすデータを抽出するSQLクエリです。このクエリは、複数の条件を指定し、そのうちいずれかの条件を満たすデータを取得することができます。
構文
SELECT column_name(s)
FROM table_name
WHERE condition1 OR condition2 OR ...;
各要素の説明
SELECT column_name(s)
: 取得したい列名を指定します。複数の列名をカンマで区切って指定することもできます。FROM table_name
: データを取得したいテーブル名を指定します。WHERE
: 条件を指定します。condition1 OR condition2 OR ...
: 複数の条件をOR
演算子で結合します。
OR
演算子は、条件式のいずれか1つが真であれば、そのレコードが抽出されます。例えば、以下のクエリは、age
が20歳以上またはgender
がmale
であるレコードをすべて抽出します。
SELECT *
FROM users
WHERE age >= 20 OR gender = 'male';
条件式の例
column_name = value
: 列名がvalue
と一致するレコードcolumn_name IN (value1, value2, ...)
: 列名がvalue1
、value2
、... のいずれかと一致するレコード
実践例
以下の例は、products
テーブルから、価格が1000円以上または在庫数が5個以下の商品をすべて抽出するクエリです。
SELECT *
FROM products
WHERE price >= 1000 OR stock <= 5;
注意事項
- 条件式は、論理的に正しいように記述する必要があります。
- 複数の条件式を組み合わせる場合は、
AND
演算子とOR
演算子の優先順位に注意する必要があります。
補足
SELECT ... WHERE ... OR
は、SELECT ... WHERE ... IN
と同様に、複数の条件を指定することができます。SELECT ... WHERE ... OR
は、複雑な条件を指定する場合に便利です。
SELECT *
FROM products
WHERE price >= 1000 OR stock <= 5;
このクエリは、以下の結果を返します。
| product_id | name | price | stock |
|---|---|---|---|
| 1 | 商品1 | 1200 | 3 |
| 2 | 商品2 | 900 | 2 |
| 3 | 商品3 | 1500 | 1 |
- 以下のクエリは、
users
テーブルから、年齢が20歳以上または性別がmale
であるユーザーをすべて抽出します。
SELECT *
FROM users
WHERE age >= 20 OR gender = 'male';
- 以下のクエリは、
products
テーブルから、カテゴリがfood
またはdrink
である商品をすべて抽出します。
SELECT *
FROM products
WHERE category = 'food' OR category = 'drink';
SELECT *
FROM products
WHERE (price >= 1000 OR stock <= 5) AND category = 'food';
SELECT ... WHERE ... OR
は、複数の条件を指定して、条件に合致するデータを抽出する便利なクエリです。サンプルコードを参考に、さまざまな条件でデータ抽出を試してみてください。
SELECT ... WHERE ... OR の代替方法
CASE式は、条件式に応じて異なる値を返す式です。以下の例では、age
が20歳以上であればadult
、それ以外はchild
という値を返します。
SELECT
CASE WHEN age >= 20 THEN 'adult'
ELSE 'child'
END AS age_group,
*
FROM users;
この例では、WHERE
句を使用せずに、age
に基づいてデータを分類しています。
UNIONは、複数のSELECTクエリの結果を結合する演算子です。以下の例では、age
が20歳以上のユーザーと、性別がmale
であるユーザーを抽出します。
SELECT *
FROM users
WHERE age >= 20
UNION
SELECT *
FROM users
WHERE gender = 'male';
この例では、WHERE
句を2回記述する代わりに、UNIONを使用して2つのクエリ結果を結合しています。
JOINは、複数のテーブルを結合する演算子です。以下の例は、products
テーブルとcategories
テーブルを結合し、カテゴリがfood
またはdrink
である商品を抽出します。
SELECT *
FROM products
JOIN categories ON products.category_id = categories.category_id
WHERE categories.name IN ('food', 'drink');
この例では、WHERE
句で条件を指定する代わりに、JOINを使用してcategories
テーブルの情報を参照しています。
サブクエリは、別のSELECTクエリを返すクエリです。以下の例は、products
テーブルから、価格が1000円以上の商品のうち、在庫数が5個以下の商品を抽出します。
SELECT *
FROM products
WHERE price >= 1000
AND stock <= (
SELECT MAX(stock)
FROM products
WHERE price >= 1000
);
この例では、WHERE
句内でサブクエリを使用して、価格が1000円以上の商品の最大在庫数を取得しています。
どの方法を使うべきかは、条件の複雑さやデータの構造によって異なります。以下のような点を考慮して、最適な方法を選びましょう。
- 条件の複雑さ
- データの構造
- 処理速度
- 可読性
SELECT ... WHERE ... OR
は、複数の条件を指定してデータを抽出する便利な方法ですが、他にもいくつかの代替方法があります。それぞれの方法の特徴を理解し、状況に応じて最適な方法を選びましょう。
mysql