SQLの基本文法を完全解説!SELECT文の書き方と仕組みを初心者向けに整理
生徒
「SELECT文って、プログラミングの授業でよく聞くんですけど、何をする命令なんですか?」
先生
「SELECT文は、データベースに保存されているデータを取り出すための命令です。図書館で本を探すように、たくさんのデータの中から欲しい情報だけを選び出すことができます。」
生徒
「データベースって何ですか?パソコンのエクセルとは違うんですか?」
先生
「データベースは、エクセルの表のようなものが何枚も入った大きな本棚のようなものです。その表をテーブルと呼び、SQLを使って操作します。今日は、その基本となるSELECT文の書き方を、一つずつ丁寧に学んでいきましょう。」
1. SQLとSELECT文の基本
SQLとは、データベースを操作するための専用言語です。エスキューエルと読み、Structured Query Languageの略称になります。このSQLを使えば、データベースに保存された情報を自由に取り出したり、追加したり、変更したりできます。
その中でも、SELECT文はデータベースからデータを検索して取り出すための命令で、最も頻繁に使われる重要な構文です。まるで図書館の検索システムのように、必要な情報だけを素早く見つけることができます。
データベースは、行と列で構成されたテーブル(表)という形でデータを管理しています。行のことをレコード、列のことをカラムやフィールドと呼びます。住所録や名簿のように、縦と横に情報が整理されているイメージです。
2. SELECT文の基本構文
SELECT文の基本的な書き方は、とてもシンプルです。「SELECT(選択する)」「FROM(どこから)」という2つの要素で構成されます。これは日本語で「どのテーブルから、どの列のデータを取り出すか」を指定する命令になります。
基本的な構文は次のようになります。SELECTの後に取り出したい列の名前を書き、FROMの後にテーブルの名前を書きます。この順番は必ず守る必要があります。
- SELECT:取り出したいデータの列名を指定
- FROM:データが入っているテーブル名を指定
- 文末にはセミコロン(;)を付ける
例えば、usersという名前のテーブルから、nameという列のデータを取り出したい場合は、次のように書きます。
SELECT name
FROM users;
この命令を実行すると、usersテーブルに登録されているすべての人の名前が表示されます。
3. すべての列を取得する方法
テーブルにあるすべての列のデータを一度に取り出したい場合は、アスタリスク(*)という記号を使います。これは「すべて」を意味する特別な記号で、列名を一つ一つ書く手間を省くことができます。
実際の業務では、まずテーブルの中身を確認したいときに、この書き方をよく使います。データ全体の構造を把握するのに便利な方法です。
次のusersテーブルがあるとします。
id | name | age | email
---+------------+-----+-------------------
1 | 山田太郎 | 25 | taro@example.com
2 | 佐藤花子 | 19 | hanako@example.com
3 | 鈴木一郎 | 30 | ichiro@example.com
4 | 田中美咲 | 22 | misaki@example.com
5 | 高橋健太 | 28 | kenta@example.com
このテーブルから全データを取得するには、次のように書きます。
SELECT *
FROM users;
実行すると、テーブルのすべての列が表示されます。
id | name | age | email
---+------------+-----+-------------------
1 | 山田太郎 | 25 | taro@example.com
2 | 佐藤花子 | 19 | hanako@example.com
3 | 鈴木一郎 | 30 | ichiro@example.com
4 | 田中美咲 | 22 | misaki@example.com
5 | 高橋健太 | 28 | kenta@example.com
4. 特定の列だけを取得する方法
データベースには多くの列が含まれていることがあります。しかし、必要な情報だけを取り出したい場合も多くあります。そのような場合は、SELECT文の後に取得したい列名をカンマで区切って指定します。
例えば、名前とメールアドレスだけが必要な場合は、その2つの列名だけを書きます。これにより、不要なデータを取得せず、処理速度も向上します。
SELECT name, email
FROM users;
実行結果は、指定した列のみが表示されます。
name | email
-----------+-------------------
山田太郎 | taro@example.com
佐藤花子 | hanako@example.com
鈴木一郎 | ichiro@example.com
田中美咲 | misaki@example.com
高橋健太 | kenta@example.com
このように、必要な列だけを指定することで、見やすく整理された結果を得ることができます。列名の順番も自由に変えられるので、表示したい順序で指定できます。
5. WHERE句で条件を指定する方法
SELECT文に条件を付けて、特定の条件に合うデータだけを取り出すことができます。そのために使うのがWHERE句です。WHEREは「どこで」という意味で、条件を満たす行だけを絞り込むことができます。
例えば、年齢が二十歳未満の人だけを探したい場合や、特定の名前の人だけを抽出したい場合に使います。これは、大量のデータの中から必要な情報だけを効率的に見つけるための機能です。
年齢が二十歳未満の人を検索する場合は、次のように書きます。
SELECT *
FROM users
WHERE age < 20;
実行結果では、条件に合致した行のみが表示されます。
id | name | age | email
---+------------+-----+----------------------
2 | 佐藤花子 | 19 | hanako@example.com
WHERE句では、等号(=)や不等号(<、>)、以上(>=)、以下(<=)など、さまざまな比較演算子を使うことができます。また、文字列を検索する場合は、シングルクォーテーション(')で囲んで指定します。
6. 複数の条件を組み合わせる方法
複数の条件を同時に指定したい場合は、ANDやORという論理演算子を使います。ANDは「かつ」という意味で、すべての条件を満たす必要があります。ORは「または」という意味で、どれか一つの条件を満たせば該当します。
例えば、年齢が二十歳以上、かつ三十歳未満の人を探す場合は、ANDを使って条件を結合します。これにより、より細かい条件でデータを絞り込むことができます。
productsテーブルがあるとします。
id | product_name | price | stock
---+--------------+-------+-------
1 | ノートPC | 80000 | 15
2 | マウス | 1500 | 50
3 | キーボード | 3000 | 30
4 | モニター | 25000 | 10
5 | ヘッドホン | 8000 | 20
6 | Webカメラ | 5000 | 25
価格が五千円以上、かつ在庫が二十個以上の商品を検索します。
SELECT product_name, price, stock
FROM products
WHERE price >= 5000 AND stock >= 20;
実行結果は次のようになります。
product_name | price | stock
-------------+-------+-------
ノートPC | 80000 | 15
モニター | 25000 | 10
ヘッドホン | 8000 | 20
Webカメラ | 5000 | 25
このように、ANDを使うことで複数の条件を満たすデータだけを効率的に取り出すことができます。逆に、ORを使えば、どちらか一方の条件を満たすデータを取得できます。
7. ORDER BYで並び替える方法
取得したデータを特定の順番に並び替えたい場合は、ORDER BY句を使います。ORDER BYの後に並び替えの基準となる列名を指定し、昇順(小さい順)か降順(大きい順)かを選びます。
昇順にする場合はASC、降順にする場合はDESCを付けます。何も指定しない場合は、自動的に昇順になります。価格の安い順に商品を表示したり、年齢の若い順に名簿を並べたりするときに使います。
先ほどのproductsテーブルを価格の安い順に並び替えます。
SELECT product_name, price
FROM products
ORDER BY price ASC;
実行すると、価格の低い商品から順に表示されます。
product_name | price
-------------+-------
マウス | 1500
キーボード | 3000
Webカメラ | 5000
ヘッドホン | 8000
モニター | 25000
ノートPC | 80000
このように、ORDER BYを使うことで、データを見やすく整理して表示することができます。複数の列を指定して、優先順位を付けて並び替えることも可能です。
8. LIMITで取得件数を制限する方法
大量のデータがある場合、すべてを取得すると処理に時間がかかります。そのような場合は、LIMIT句を使って取得する行数を制限できます。例えば、上位五件だけを表示したい場合に便利です。
LIMITの後に取得したい件数を数字で指定します。ランキング表示や、最新のデータだけを確認したい場合によく使われます。ORDER BYと組み合わせることで、特定の条件で並べた上位のデータを取得できます。
SELECT product_name, price
FROM products
ORDER BY price DESC
LIMIT 3;
この命令は、価格の高い商品から順に三件だけ表示します。実行結果は次のようになります。
product_name | price
-------------+-------
ノートPC | 80000
モニター | 25000
ヘッドホン | 8000
LIMITを使うことで、必要な分だけのデータを効率的に取得でき、画面表示やレポート作成の際に非常に役立ちます。
9. SELECT文を書くときの注意点
SELECT文を書くときには、いくつかの重要なルールと注意点があります。まず、SQLの命令は大文字でも小文字でも動作しますが、読みやすさのために、SELECT、FROM、WHEREなどのキーワードは大文字で書くことが推奨されています。
また、列名やテーブル名に日本語を使うこともできますが、一般的には英語の名前を付けることが多いです。これは、システムの互換性や保守性を考慮したものです。セミコロンを付け忘れるとエラーになることがあるので、文末には必ず付けるようにしましょう。
- 列名のスペルミス:存在しない列名を指定するとエラーになります
- カンマの付け忘れ:複数の列を指定するときは、カンマで区切ります
- クォーテーションの使い方:文字列はシングルクォーテーションで囲みます
- WHERE句の位置:FROM句の後に書く必要があります
エラーが出たときは、落ち着いてスペルや記号の付け忘れがないかを確認しましょう。最初は誰でも間違えるものなので、少しずつ慣れていけば大丈夫です。
10. 実践的なSELECT文の活用例
これまで学んだ内容を組み合わせて、実際の業務でよく使われるようなSELECT文を書いてみましょう。複数の機能を組み合わせることで、より高度なデータ検索が可能になります。
例えば、商品管理システムで「在庫が十五個以下の商品を価格の高い順に五件表示する」という要件があったとします。これは、WHERE句、ORDER BY句、LIMIT句を組み合わせて実現できます。
SELECT product_name, price, stock
FROM products
WHERE stock <= 15
ORDER BY price DESC
LIMIT 5;
この命令を実行すると、在庫が少ない商品の中から、価格の高いものが優先的に表示されます。このように、複数の句を組み合わせることで、複雑な条件でのデータ検索が可能になります。
実際の開発現場では、このようなSELECT文を使って、顧客管理、在庫管理、売上分析など、さまざまな業務に必要なデータを取り出しています。基本をしっかり理解すれば、応用も自然とできるようになります。