ウェブサイトやアプリを使っていると、ユーザー一覧や商品リストなど、いろいろな情報が表示されますよね。
実は、その裏側では「SELECT文」というSQLの命令が動いて、データベースから必要な情報を取り出しているんです。
この記事では、データベース初心者の方でもすぐに使える「SELECT文」の基本的な使い方を、実例をたくさん使ってわかりやすく説明します。
SELECT文とは何か?

データベースとテーブルの基本
まず、SELECT文を理解するために、データベースの基本的な仕組みを説明します。
データベースは、情報を整理して保存する場所です。
その中にテーブルという表があり、そこにデータが行と列で整理されています。
例:usersテーブル
id | name | age | city | |
---|---|---|---|---|
1 | 田中太郎 | 25 | Tokyo | tanaka@test.com |
2 | 佐藤花子 | 30 | Osaka | sato@test.com |
3 | 鈴木一郎 | 35 | Tokyo | suzuki@test.com |
- 行(レコード):1人分のデータ(田中太郎の情報など)
- 列(カラム):データの種類(名前、年齢、都市など)
SELECT文の役割
SELECT文は、このテーブルから「必要な情報だけを取り出す」ための命令です。
まるで図書館で本を探すときのように、条件を指定して欲しいデータを見つけることができます。
最も基本的なSELECT文
一番シンプルなSELECT文の形は以下の通りです:
SELECT カラム名 FROM テーブル名;
実際の例
SELECT name FROM users;
この命令を実行すると:
name
--------
田中太郎
佐藤花子
鈴木一郎
usersテーブルから「name」列だけが取り出されます。
SELECT文の基本ルール
SQLを書くときの基本的なルールを覚えておきましょう:
- 大文字と小文字:SQLの命令(SELECT、FROMなど)は大文字でも小文字でも動作します
- セミコロン:文の最後に「;」をつけます
- スペース:単語の間にはスペースを入れます
-- これらはすべて同じ意味です
SELECT name FROM users;
select name from users;
Select Name From Users;
基本的な仕組みがわかったところで、より実用的な使い方を学んでいきましょう。
複数のカラムを選択する方法
必要なカラムだけを選ぶ
実際の開発では、複数の情報を同時に表示することがよくあります。
カンマで区切ることで、複数のカラムを同時に取得できます。
SELECT name, age FROM users;
結果
name | age
---------|----
田中太郎 | 25
佐藤花子 | 30
鈴木一郎 | 35
もっと多くのカラムを取得
SELECT name, age, city, email FROM users;
結果
name | age | city | email
---------|-----|-------|----------------
田中太郎 | 25 | Tokyo | tanaka@test.com
佐藤花子 | 30 | Osaka | sato@test.com
鈴木一郎 | 35 | Tokyo | suzuki@test.com
すべてのカラムを取得する
すべてのカラムを取得したい場合は、アスタリスク(*)を使います:
SELECT * FROM users;
結果
id | name | age | city | email
---|----------|-----|-------|----------------
1 | 田中太郎 | 25 | Tokyo | tanaka@test.com
2 | 佐藤花子 | 30 | Osaka | sato@test.com
3 | 鈴木一郎 | 35 | Tokyo | suzuki@test.com
カラムの順序を変える
SELECT文では、カラムを書く順番で表示される順序が決まります:
SELECT email, name, age FROM users;
結果
email | name | age
----------------|----------|----
tanaka@test.com | 田中太郎 | 25
sato@test.com | 佐藤花子 | 30
suzuki@test.com | 鈴木一郎 | 35
どのカラムを選ぶべきか?
全てのカラム(*)を使う場合
- テーブルの構造を確認したいとき
- 開発中のテスト用途
- 小さなテーブルの場合
特定のカラムを選ぶ場合
- 実際のアプリケーションで使用するとき
- データ量が多い場合(パフォーマンス向上)
- セキュリティ上、一部の情報を隠したい場合
一般的には、必要なカラムだけを指定する方が効率的です。次は、条件を指定してデータを絞り込む方法を学びましょう。
WHERE句で条件を指定しよう

WHERE句の基本
実際のアプリでは、すべてのデータではなく、特定の条件に合うデータだけを表示することがほとんどです。
WHERE句を使えば、条件に合った行だけを取り出すことができます。
SELECT カラム名 FROM テーブル名 WHERE 条件;
基本的な条件指定
年齢が30歳以上の人を取得
SELECT * FROM users WHERE age >= 30;
結果
id | name | age | city | email
---|----------|-----|-------|----------------
2 | 佐藤花子 | 30 | Osaka | sato@test.com
3 | 鈴木一郎 | 35 | Tokyo | suzuki@test.com
特定の都市に住む人を取得
SELECT name, city FROM users WHERE city = 'Tokyo';
結果
name | city
---------|------
田中太郎 | Tokyo
鈴木一郎 | Tokyo
比較演算子の種類
WHERE句では、いろいろな比較演算子が使えます:
演算子 | 意味 | 例 |
---|---|---|
= | 等しい | age = 30 |
!= | 等しくない | city != ‘Tokyo’ |
> | より大きい | age > 25 |
>= | 以上 | age >= 30 |
< | より小さい | age < 35 |
<= | 以下 | age <= 30 |
実例
-- 25歳より上の人
SELECT name, age FROM users WHERE age > 25;
-- 東京以外に住む人
SELECT name, city FROM users WHERE city != 'Tokyo';
-- 30歳以下の人
SELECT name, age FROM users WHERE age <= 30;
複数の条件を組み合わせる
AND演算子:すべての条件を満たす
SELECT * FROM users WHERE age >= 30 AND city = 'Tokyo';
この例では「30歳以上」かつ「東京在住」の人だけが取得されます。
OR演算子:いずれかの条件を満たす
SELECT * FROM users WHERE age < 30 OR city = 'Osaka';
この例では「30歳未満」または「大阪在住」の人が取得されます。
複雑な条件:括弧を使う
SELECT * FROM users WHERE (age >= 30 AND city = 'Tokyo') OR (age < 25 AND city = 'Osaka');
文字列の検索
部分一致検索(LIKE演算子)
-- 名前に「田」が含まれる人
SELECT * FROM users WHERE name LIKE '%田%';
-- 名前が「田」で始まる人
SELECT * FROM users WHERE name LIKE '田%';
-- メールアドレスが「.com」で終わる人
SELECT * FROM users WHERE email LIKE '%.com';
NULL値の検索
-- emailが登録されていない人
SELECT * FROM users WHERE email IS NULL;
-- emailが登録されている人
SELECT * FROM users WHERE email IS NOT NULL;
WHERE句を使えば、必要なデータだけを効率的に取得できます。次は、取得したデータを見やすく並び替える方法を学びましょう。
ORDER BYでデータを並び替えよう
ORDER BYの基本
取得したデータは、見やすい順序で表示したいですよね。ORDER BY句を使えば、特定のカラムを基準にしてデータを並び替えることができます。
SELECT カラム名 FROM テーブル名 ORDER BY 並び替えるカラム名;
昇順と降順
ASC(昇順):小さい値から大きい値へ
SELECT * FROM users ORDER BY age ASC;
結果
id | name | age | city | email
---|----------|-----|-------|----------------
1 | 田中太郎 | 25 | Tokyo | tanaka@test.com
2 | 佐藤花子 | 30 | Osaka | sato@test.com
3 | 鈴木一郎 | 35 | Tokyo | suzuki@test.com
DESC(降順):大きい値から小さい値へ
SELECT * FROM users ORDER BY age DESC;
結果
id | name | age | city | email
---|----------|-----|-------|----------------
3 | 鈴木一郎 | 35 | Tokyo | suzuki@test.com
2 | 佐藤花子 | 30 | Osaka | sato@test.com
1 | 田中太郎 | 25 | Tokyo | tanaka@test.com
ASCは省略可能
-- これらは同じ意味です
SELECT * FROM users ORDER BY age ASC;
SELECT * FROM users ORDER BY age;
文字列での並び替え
名前の五十音順
SELECT * FROM users ORDER BY name;
都市名のアルファベット順
SELECT * FROM users ORDER BY city;
複数のカラムで並び替え
複数の条件で並び替えることもできます:
SELECT * FROM users ORDER BY city, age DESC;
この例では:
- まず都市名でアルファベット順に並び替え
- 同じ都市の中では年齢の降順で並び替え
より具体的な例
-- 都市別に分けて、各都市内では年齢順
SELECT name, age, city FROM users ORDER BY city ASC, age ASC;
WHERE句とORDER BYを組み合わせる
条件指定と並び替えを一緒に使うこともできます:
SELECT * FROM users WHERE age >= 30 ORDER BY age DESC;
実行順序
- WHERE句でデータを絞り込む(30歳以上)
- ORDER BY句で並び替える(年齢の降順)
実用的な並び替え例
最新の登録者を表示
SELECT * FROM users ORDER BY id DESC;
年齢の若い順に表示
SELECT name, age FROM users ORDER BY age ASC;
地域別に整理して表示
SELECT name, city, age FROM users ORDER BY city, name;
並び替えができるようになると、データがとても見やすくなります。
次は、大量のデータから必要な分だけを取り出す方法を学びましょう。
LIMITで表示件数を制限しよう

LIMITの基本
実際のシステムでは、データベースに何千、何万ものデータが入っていることがあります。
すべてを一度に表示すると、とても重くなってしまいます。
LIMIT句を使えば、必要な件数だけを取り出すことができます。
SELECT カラム名 FROM テーブル名 LIMIT 件数;
基本的な使用例
最初の3件だけを取得
SELECT * FROM users LIMIT 3;
年齢順で上位2名を取得
SELECT name, age FROM users ORDER BY age DESC LIMIT 2;
結果
name | age
---------|----
鈴木一郎 | 35
佐藤花子 | 30
ページング機能を作る(OFFSET)
ウェブサイトでよく見る「1ページ目、2ページ目…」のような機能は、LIMITとOFFSETを組み合わせて作ります。
SELECT カラム名 FROM テーブル名 LIMIT 件数 OFFSET スキップする件数;
例:1ページに5件ずつ表示する場合
-- 1ページ目(1〜5件目)
SELECT * FROM users ORDER BY id LIMIT 5 OFFSET 0;
-- 2ページ目(6〜10件目)
SELECT * FROM users ORDER BY id LIMIT 5 OFFSET 5;
-- 3ページ目(11〜15件目)
SELECT * FROM users ORDER BY id LIMIT 5 OFFSET 10;
より大きなテーブルでの例
もう少し大きなテーブルを想像してみましょう:
productsテーブル(商品情報)
id | name | price | category |
---|---|---|---|
1 | ノートPC | 80000 | PC |
2 | マウス | 2000 | PC |
3 | キーボード | 5000 | PC |
… | … | … | … |
人気商品トップ10を表示
SELECT name, price FROM products ORDER BY sales_count DESC LIMIT 10;
安い商品から5件を表示
SELECT name, price FROM products ORDER BY price ASC LIMIT 5;
カテゴリ別の商品を3件ずつ表示
SELECT name, price FROM products WHERE category = 'PC' ORDER BY price LIMIT 3;
実用的なパターン
最新の投稿を5件表示
SELECT title, created_at FROM posts ORDER BY created_at DESC LIMIT 5;
人気記事ランキング
SELECT title, view_count FROM articles ORDER BY view_count DESC LIMIT 10;
検索結果の1ページ目
SELECT * FROM products
WHERE name LIKE '%ノート%'
ORDER BY price
LIMIT 20 OFFSET 0;
データベースによる違い
注意点として、LIMITの書き方はデータベースによって少し違います:
MySQL/PostgreSQL
SELECT * FROM users LIMIT 10 OFFSET 5;
SQL Server
SELECT * FROM users ORDER BY id OFFSET 5 ROWS FETCH NEXT 10 ROWS ONLY;
Oracle
SELECT * FROM (
SELECT * FROM users ORDER BY id
) WHERE ROWNUM <= 10;
一般的なMySQLやPostgreSQLでは、この記事で紹介した書き方で大丈夫です。
LIMITを使いこなせるようになると、パフォーマンスの良いアプリケーションが作れるようになります。
実践的なSELECT文の組み合わせ

基本要素を組み合わせてみよう
ここまで学んだSELECT、WHERE、ORDER BY、LIMITを組み合わせると、とても実用的なクエリが作れます。
基本的な組み合わせパターン
SELECT カラム名
FROM テーブル名
WHERE 条件
ORDER BY 並び替えるカラム
LIMIT 件数;
実用的な例文集
ECサイトの商品検索
-- 「ノート」を含む商品を価格の安い順で10件表示
SELECT name, price, category
FROM products
WHERE name LIKE '%ノート%'
ORDER BY price ASC
LIMIT 10;
ユーザー管理画面
-- 東京在住の30歳以上のユーザーを登録日順で表示
SELECT name, age, city, created_at
FROM users
WHERE city = 'Tokyo' AND age >= 30
ORDER BY created_at DESC
LIMIT 20;
ブログの人気記事ランキング
-- 今年投稿された記事の中で閲覧数トップ5
SELECT title, view_count, published_at
FROM articles
WHERE published_at >= '2025-01-01'
ORDER BY view_count DESC
LIMIT 5;
よくある間違いとその対策
1. WHERE句の位置間違い
-- 間違い:ORDER BYの後にWHEREを書く
SELECT * FROM users ORDER BY age WHERE age > 30;
-- 正しい:WHEREはORDER BYの前
SELECT * FROM users WHERE age > 30 ORDER BY age;
2. 文字列の比較で引用符を忘れる
-- 間違い:文字列に引用符がない
SELECT * FROM users WHERE city = Tokyo;
-- 正しい:文字列はシングルクォートで囲む
SELECT * FROM users WHERE city = 'Tokyo';
3. LIMITなしでの大量データ取得
-- 注意:大きなテーブルでは重くなる
SELECT * FROM products;
-- 推奨:必要な分だけ取得
SELECT * FROM products LIMIT 100;
パフォーマンスを考えた書き方
必要なカラムだけを選択
-- 推奨:必要なカラムのみ
SELECT name, email FROM users WHERE age > 30;
-- 避ける:すべてのカラムを取得
SELECT * FROM users WHERE age > 30;
適切なLIMITの設定
-- 推奨:適切な件数制限
SELECT * FROM products ORDER BY created_at DESC LIMIT 50;
-- 避ける:制限なしの大量データ取得
SELECT * FROM products ORDER BY created_at DESC;
次のステップへ
基本的なSELECT文をマスターしたら、以下のような発展的な機能も学んでみましょう:
- GROUP BY:データをグループ化して集計
- JOIN:複数のテーブルを結合
- サブクエリ:クエリの中にクエリを書く
- 関数:COUNT、SUM、AVGなどの集計関数
これらの機能を覚えると、さらに複雑で便利なデータ取得ができるようになります。
まとめ
SQLのSELECT文は、データベースを扱う上で最も重要で基本的な命令です。この記事で学んだ内容を整理してみましょう。
重要なポイント
- SELECT文は「データベースから必要な情報を取り出す」命令
- カラムを指定することで、必要な情報だけを効率的に取得
- WHERE句で条件を指定して、データを絞り込み
- ORDER BYで見やすい順序に並び替え
- LIMITで適切な件数だけを取得してパフォーマンス向上
基本的な構文(復習)
SELECT カラム名 -- 取得したいカラムを指定
FROM テーブル名 -- データの取得元テーブル
WHERE 条件 -- データを絞り込む条件
ORDER BY 並び替えカラム -- 表示順序を指定
LIMIT 件数; -- 取得件数を制限
よく使う実用例
-- ユーザー一覧(ページング付き)
SELECT name, email, created_at
FROM users
ORDER BY created_at DESC
LIMIT 20 OFFSET 0;
-- 条件付き商品検索
SELECT name, price, category
FROM products
WHERE price <= 10000 AND category = 'Electronics'
ORDER BY price ASC
LIMIT 10;
コメント