1. SELECT文とは

SELECT文はデータベースからデータを取得するためのSQL文です。基本的な構文は以下の通りです。

SELECT 列名 FROM テーブル名;

すべての列を取得する場合は *を使用できます。

SELECT * FROM users;

2. WHERE句の基本

WHERE句を使用すると、特定の条件に合致するデータのみを取得できます。

SELECT * FROM users WHERE age = 30;

2.1 LIKEを使った部分一致検索

LIKEを使うと、部分一致検索ができます。例えば、ユーザーの名前に特定の文字列が含まれているデータを検索する場合に使用されます。

基本構文

SELECT * FROM users WHERE name LIKE '田中%';

ワイルドカードの説明

使用例

  1. 特定の文字列で始まる名前を検索
   SELECT * FROM users WHERE name LIKE '田中%';
  1. 特定の文字列で終わる名前を検索
   SELECT * FROM users WHERE name LIKE '%一郎';
  1. 特定の文字列を含む名前を検索
   SELECT * FROM users WHERE name LIKE '%田中%';
  1. 特定の文字を含む名前を検索
   SELECT * FROM users WHERE name LIKE '田_%';

使用シーン

LIKEを使うことで、完全一致ではなく柔軟な検索が可能になります。ただし、大量のデータを対象に LIKE '%文字列%'を使用するとパフォーマンスが低下します。あまりにもパフォーマンスが悪くなるようでしたら FULLTEXTインデックスなどを検討しましょう。

2.2 大なり、小なり、AND条件

WHEREでは比較演算子を使うことで条件を指定できます。

SELECT * FROM users WHERE age > 20;
SELECT * FROM users WHERE age < 30;
SELECT * FROM users WHERE age >= 20 AND age <= 30;

AND条件の使用 ANDを使うと複数の条件を組み合わせることができます。

SELECT * FROM users WHERE age > 20 AND gender = 'male';

注意:OR条件はなるべく使わない
条件式が複雑で理解しにくくなる上に、 ORはインデックスが効きにくくなり、パフォーマンスが落ちます。 どうしてもORを使うような場面になったら、UNIONなどを使うことを検討してください。

2.3 日付検索(特定の月のデータを取得)

日付型のカラムに対して WHEREで条件を指定することで、特定の日付や月のデータを検索できます。

SELECT * FROM orders WHERE order_date = '2024-02-01';

特定の月のデータを取得する

SELECT * FROM orders WHERE DATE_FORMAT(order_date, '%Y-%m') = '2024-02';

3. LIMIT句(取得件数の制限)

LIMITを使うと、取得する件数を制限できます。

SELECT * FROM users LIMIT 10;

4. OFFSETとLIMIT(ページネーション)

ページネーション(ページごとのデータ取得)では LIMITOFFSETを組み合わせます。

SELECT * FROM users LIMIT 10 OFFSET 20;

Laravel では offsetを直接使わず、ページネーション機能を利用することが一般的です。

例えばLaravelでは以下のようにページネーションを実装します。offsetはLaravelが内部的に使用するので、エンジニアがoffsetを見ることはありません

$users = DB::table('users')->paginate(10);

5. ORDER BY(並び順の指定)

データを並び替えるには ORDER BYを使います。

SELECT * FROM users ORDER BY age ASC;

降順にする場合は DESCを使います。

SELECT * FROM users ORDER BY age DESC;

複数のカラムで並び替えも可能です。

SELECT * FROM users ORDER BY age ASC, name DESC;

6. まとめ

SELECT文の基本を押さえることで、データの取得を効率よく行えるようになります!