初心者向け!SQLのSELECT文の基本とよく使う書き方を徹底解説

データベース・SQL

ウェブサイトやアプリを使っていると、ユーザー一覧や商品リストなど、いろいろな情報が表示されますよね。

実は、その裏側では「SELECT文」というSQLの命令が動いて、データベースから必要な情報を取り出しているんです。

この記事では、データベース初心者の方でもすぐに使える「SELECT文」の基本的な使い方を、実例をたくさん使ってわかりやすく説明します。

スポンサーリンク

SELECT文とは何か?

データベースとテーブルの基本

まず、SELECT文を理解するために、データベースの基本的な仕組みを説明します。

データベースは、情報を整理して保存する場所です。
その中にテーブルという表があり、そこにデータが行と列で整理されています。

例:usersテーブル

idnameagecityemail
1田中太郎25Tokyotanaka@test.com
2佐藤花子30Osakasato@test.com
3鈴木一郎35Tokyosuzuki@test.com
  • 行(レコード):1人分のデータ(田中太郎の情報など)
  • 列(カラム):データの種類(名前、年齢、都市など)

SELECT文の役割

SELECT文は、このテーブルから「必要な情報だけを取り出す」ための命令です。

まるで図書館で本を探すときのように、条件を指定して欲しいデータを見つけることができます。

最も基本的なSELECT文

一番シンプルなSELECT文の形は以下の通りです:

SELECT カラム名 FROM テーブル名;

実際の例

SELECT name FROM users;

この命令を実行すると:

name
--------
田中太郎
佐藤花子
鈴木一郎

usersテーブルから「name」列だけが取り出されます。

SELECT文の基本ルール

SQLを書くときの基本的なルールを覚えておきましょう:

  1. 大文字と小文字:SQLの命令(SELECT、FROMなど)は大文字でも小文字でも動作します
  2. セミコロン:文の最後に「;」をつけます
  3. スペース:単語の間にはスペースを入れます
-- これらはすべて同じ意味です
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;

この例では:

  1. まず都市名でアルファベット順に並び替え
  2. 同じ都市の中では年齢の降順で並び替え

より具体的な例

-- 都市別に分けて、各都市内では年齢順
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;

実行順序

  1. WHERE句でデータを絞り込む(30歳以上)
  2. 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テーブル(商品情報)

idnamepricecategory
1ノートPC80000PC
2マウス2000PC
3キーボード5000PC

人気商品トップ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;

コメント

タイトルとURLをコピーしました