SELECT
文はデータベースからデータを取得するためのSQL文です。基本的な構文は以下の通りです。
SELECT 列名 FROM テーブル名;
すべての列を取得する場合は
*
を使用できます。
SELECT * FROM users;
WHERE
句を使用すると、特定の条件に合致するデータのみを取得できます。
SELECT * FROM users WHERE age = 30;
LIKE
を使うと、部分一致検索ができます。例えば、ユーザーの名前に特定の文字列が含まれているデータを検索する場合に使用されます。
SELECT * FROM users WHERE name LIKE '田中%';
%
は0文字以上の任意の文字列にマッチします。
_
は1文字の任意の文字にマッチします。
SELECT * FROM users WHERE name LIKE '田中%';
SELECT * FROM users WHERE name LIKE '%一郎';
SELECT * FROM users WHERE name LIKE '%田中%';
SELECT * FROM users WHERE name LIKE '田_%';
LIKE
を使うことで、完全一致ではなく柔軟な検索が可能になります。ただし、大量のデータを対象に
LIKE '%文字列%'
を使用するとパフォーマンスが低下します。あまりにもパフォーマンスが悪くなるようでしたら
FULLTEXT
インデックスなどを検討しましょう。
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
などを使うことを検討してください。
日付型のカラムに対して
WHERE
で条件を指定することで、特定の日付や月のデータを検索できます。
SELECT * FROM orders WHERE order_date = '2024-02-01';
特定の月のデータを取得する
SELECT * FROM orders WHERE DATE_FORMAT(order_date, '%Y-%m') = '2024-02';
LIMIT
を使うと、取得する件数を制限できます。
SELECT * FROM users LIMIT 10;
ページネーション(ページごとのデータ取得)では
LIMIT
と
OFFSET
を組み合わせます。
SELECT * FROM users LIMIT 10 OFFSET 20;
OFFSET 20
は20件目から取得(1ページ10件の場合、3ページ目のデータ)
Laravel では
offset
を直接使わず、ページネーション機能を利用することが一般的です。
例えばLaravelでは以下のようにページネーションを実装します。offsetはLaravelが内部的に使用するので、エンジニアがoffsetを見ることはありません
$users = DB::table('users')->paginate(10);
データを並び替えるには
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;
WHERE
で条件指定ができる(
LIKE
,
AND
,
>
などを活用)
WHERE
の
AND
条件が多く使われる(
OR
はなるべく使わない)
DATE_FORMAT
などを活用
LIMIT
と
OFFSET
でページネーション
ORDER BY
でデータの並び順を変更
SELECT
文の基本を押さえることで、データの取得を効率よく行えるようになります!