SELECT文の基本構文
このレッスンで分かること
SELECT 列リスト FROM テーブル名;が最小構文です- 別名
ASで結果列の名前を変えられます- 本番では
SELECT *を避け、必要な列だけ明示します
SELECT文の基本構文 とは
データを取り出すSELECT文の基本的な書き方を詳しく解説します。本レッスンでは、SELECT文の基本構文 の基本から実際の使いどころまでを整理し、現場で迷わず使える形に落とし込みます。
なぜ重要か
業務アプリケーションは、データベースに蓄えられた情報を「読み出して画面に出す」ことから始まります。売上一覧、ユーザー一覧、商品検索、レポート生成、ダッシュボードのグラフ、CSV エクスポート、すべての出発点は SELECT 文です。SELECT が書けないと、データ分析もできず、不具合の原因調査もできず、機械学習用のデータ抽出もできません。逆に言えば、SELECT を自由に書けるようになれば、データに触れる仕事の半分はこなせるようになります。本レッスンでは、SELECT 文の最も基本となる構文を、列の指定、別名、定数式、テーブル指定の四つの観点から押さえます。
SELECT は SQL の動詞のなかでもっとも頻繁に書かれる命令です。INSERT や UPDATE は書き換えなのでレビューや慎重な検証が必要ですが、SELECT は読み出しなのでカジュアルに何度でも実行できます。むしろ、適切な SELECT を素早く組み立てる力こそが、現場での生産性に直結します。「いまテーブルにどんなデータが入っているか確認したい」「特定の条件のレコードがあるか確かめたい」「集計の元データを CSV で取り出したい」、こういった日常作業すべてが SELECT で実現できます。
この基本構文を確実に習得すると、WHERE、ORDER BY、JOIN といった応用構文はすべて「列リストと FROM 句の延長」として理解できるようになります。
SELECT は「どの列を」「どのテーブルから」の 2 つさえ決まれば書けます。まずはこの 2 点だけ意識すれば、残りの構文はすべてその上に積み上がっていきます。
構文の全体像
SELECT 文は次の順番で書きます。最低限必要なのは SELECT と FROM の二つだけです。
SQL クエリ
SELECT <列リスト>
FROM <テーブル名>;列リストには * (全列)、列名のカンマ区切り、列名 + 別名、定数や式を並べられます。実務では「必要な列だけ書く」のが鉄則です。SELECT * はテーブル定義が変わった瞬間に挙動が変わるため、本番コードでは原則使いません。
慣れてくると FROM の後ろに WHERE, GROUP BY, HAVING, ORDER BY, LIMIT が続きますが、それらはすべて「行を絞り込む」「並べる」「件数を制限する」ための拡張です。土台はあくまで SELECT と FROM の二つです。
処理の流れ
SELECT 文がどう実行されるかを、論理的な順序で見てみます。物理的な実行計画とは異なりますが、結果を理解するうえではこの順番で考えると分かりやすいです。
図の流れを順序リストで書き直すと、次の通りです。
FROMでテーブルを読み込む- 指定された列だけを射影 (projection) する
ASで別名を付ける- 結果セットを呼び出し元に返す
テーブル読み出しが先で、列を選ぶのが後です。アプリ側でデータを受け取るときも、まず行が来て、そこから必要な列の値を取り出します。SQL の処理順序を意識すると、後で WHERE や GROUP BY を学ぶときも理解が早くなります。
代表例
例 1 は、社員テーブルから氏名と部署だけを取り出すケースです。
SQL クエリ
SELECT name, department
FROM employees;結果として name 列と department 列だけが返ります。テーブルには給与列もありますが、SELECT に書いていないので結果には含まれません。これが「列の射影 (projection)」と呼ばれる操作です。射影は集合論にも登場する用語で、テーブルを一枚の表だと考えたときに、特定の列だけを切り出してくる操作のことを言います。
例 2 は、別名 (AS) で列名を読みやすくするケースです。
SQL クエリ
SELECT name AS 氏名,
department AS 所属
FROM employees;結果セットの列名が「氏名」「所属」になります。アプリ側で表示する際にそのまま使えるため、レポート系のクエリでよく使います。AS は省略できますが、レビューしやすさのために明示する流派が多いです。
例 3 は、定数や計算式を列として並べるケースです。
SQL クエリ
SELECT name,
salary,
salary * 12 AS 年収,
'正社員' AS 雇用形態
FROM employees;salary * 12 のような式や、'正社員' のようなリテラルも SELECT に並べられます。SQL は表 (テーブル) を入力し、表を出力する関数のような言語です。出力する列は計算で作っても構いません。これを使うと、テーブルにない情報を計算で作り出してレポートに含められます。
よくある落とし穴
SELECT *は学習中は便利ですが、本番コードでは避けます。テーブルに列が追加された瞬間にアプリの想定列数が崩れ、CSV やレポートの並びがずれます。レビューでも「この SELECT は何の列が必要なのか」が読み取れず保守性が落ちます。
別名 (AS) に日本語や記号を使うと、JavaScript 側のキーアクセスが
row['氏名']のように冗長になります。集計用のレポート以外では、英小文字スネークケースの別名のほうが扱いやすいです。
ここまでの要点
SELECT 列 FROM テーブル; が骨格。本番は * を避けて列を明示。AS で別名、計算式やリテラルも列として並べられる。
まとめ
- SELECT は「列の射影」を行う命令で、必要な列だけを並べる
ASで列に別名を付けると、レポートや API レスポンスがそのまま読みやすくなる*は学習用、本番は明示列を書く- 計算式やリテラルも列として並べられる。SQL は表を入出力する関数だと考える
- AS の別名は ORDER BY や HAVING でも使えるため、後続のレッスンでも頻繁に登場する
次のレッスン
次は WHERE句で条件絞り込み です。WHERE句を使って、特定の条件に合うデータだけを抽出する方法を学びます。
事前確認 — 進む前に次の 3 つができることを確認しましょう。
- SELECT 基本 の要点を自分の言葉で説明できる
- このレッスンの最小コード (または操作手順) を見ずに書ける
- 練習問題やクイズで間違えた箇所を読み直して理解した
理解度チェック (30 秒)
Q. SELECT 基本 とは何か、1 文で説明してください。
A. 本文の「このレッスンで分かること」または冒頭の説明文を見直し、自分の言葉で要約できれば OK。詰まったら本レッスンの最初の H2 セクションを読み返してみましょう。
関連レッスン
テーブル構造
schema.sql
CREATE TABLE employees (
id INT PRIMARY KEY,
name VARCHAR(50) NOT NULL,
department VARCHAR(50) NOT NULL,
salary INT NOT NULL
);
INSERT INTO employees (id, name, department, salary) VALUES
(1, '田中 一郎', '営業部', 350000),
(2, '佐藤 花子', '開発部', 420000),
(3, '鈴木 次郎', '人事部', 380000),
(4, '高橋 三郎', '開発部', 450000),
(5, '伊藤 四郎', '営業部', 360000);期待される出力
| name | department |
|---|---|
| 田中 一郎 | 営業部 |
| 佐藤 花子 | 開発部 |
| 鈴木 次郎 | 人事部 |
| 高橋 三郎 | 開発部 |
| 伊藤 四郎 | 営業部 |