SELECTとFROM: テーブルから列を取り出す
Stage 1 — 第1章 | データ分析基礎カリキュラム 推定学習時間:25〜35分 | 難易度:★☆☆☆☆
この章で学ぶこと
SQLは、データベースに対して「どのデータを見たいか」を伝えるための言語です。 データ分析の現場では、いきなり複雑な集計や機械学習に進む前に、まず必要な列を正しく取り出せることが出発点になります。
この章では、SQLの最も基本となる SELECT と FROM を学びます。
この章を終えると、こんなことができるようになります:
- テーブルから必要な列だけを取り出せる
SELECT *と列指定の違いを説明できる- 列名に別名をつけて、分析しやすい出力にできる
- 実務で「まず中身を確認する」ための基本SQLを書ける
1. SQLは「表から必要な情報を取り出す」道具
データ分析で扱うデータは、多くの場合、行と列でできた表として保存されています。 たとえばECサイトのデータなら、次のようなテーブルが考えられます。
| テーブル | 1行が表すもの | 主な列 |
|---|---|---|
customers |
顧客1人 | customer_id, customer_name, prefecture, registered_at |
orders |
注文1件 | order_id, customer_id, order_date, status, total_amount |
order_items |
注文明細1行 | order_id, product_id, quantity, unit_price |
products |
商品1つ | product_id, product_name, category, price |
SQLの基本は、このようなテーブルに対して「どの列を見たいか」を指定することです。
2. 実務シナリオ: 売上分析の準備をする
あなたはECサイトの売上分析を担当することになりました。 最初に知りたいのは、注文データにどのような列があり、売上・注文日・注文ステータスを確認できるかです。
この段階でいきなり「月別売上」や「カテゴリ別売上」を作ろうとすると、列の意味を誤解することがあります。 まずは、分析に使いそうな列だけを取り出して、表の中身を観察します。
SELECT
order_id,
customer_id,
order_date,
status,
total_amount
FROM orders;
このSQLで確認したいのは、答えそのものではありません。 次のような「分析前の前提」を見ることです。
| 観察すること | 確認したい理由 |
|---|---|
status の値 |
完了注文とキャンセル注文を分けられるか |
order_date の意味 |
注文日、決済日、発送日のどれか |
total_amount の意味 |
税込、税抜、送料込みのどれか |
customer_id の入り方 |
顧客単位の分析につなげられるか |
SQLの第一歩は、複雑な構文を覚えることではなく、テーブルの列を見て「このデータで何が言えそうか」を判断することです。
3. SELECTとFROMの基本形
最も基本的なSQLは、次の形です。
SELECT 列名
FROM テーブル名;
たとえば、顧客テーブルから顧客名だけを取り出すなら、次のように書きます。
SELECT customer_name
FROM customers;
読み方はシンプルです。
| 句 | 役割 |
|---|---|
SELECT |
どの列を表示するかを指定する |
FROM |
どのテーブルから取り出すかを指定する |
SQLでは、実行される順番としては FROM でテーブルを決め、その後 SELECT で列を選ぶ、と考えると理解しやすくなります。
4. 複数の列を取り出す
分析では、1列だけでなく複数の列を同時に確認することがほとんどです。 複数列を取り出すときは、列名をカンマで区切ります。
SELECT
customer_id,
customer_name,
prefecture
FROM customers;
このSQLは、customers テーブルから顧客ID、顧客名、都道府県を取り出します。
実務では、最初からすべての列を使うのではなく、分析目的に必要な列だけを選ぶことが大切です。
たとえば「都道府県別の購買傾向を見たい」なら、顧客名よりも customer_id と prefecture が重要になるかもしれません。
5. SELECT * は便利だが、使いどころに注意する
すべての列を取り出すには、アスタリスク * を使います。
SELECT *
FROM orders;
これは orders テーブルの全列を表示するSQLです。
最初にテーブルの中身をざっと確認するときには便利です。
ただし、実務では SELECT * に頼りすぎないようにします。
| 書き方 | 向いている場面 | 注意点 |
|---|---|---|
SELECT * |
テーブルの中身を軽く確認する | 列が多いと見づらい。不要なデータも取得する |
| 列名を指定 | 分析・集計・共有用のSQL | 必要な列が明確になり、再利用しやすい |
本番データや大きなテーブルでは、不要な列まで取得すると処理が重くなることがあります。
学習段階でも「まず * で確認し、次に必要な列だけに絞る」という習慣をつけましょう。
6. 列に別名をつける
列名が英語のままだと、出力結果を見た人に意味が伝わりにくいことがあります。
そのようなときは、AS を使って列に別名をつけます。
SELECT
order_id AS order_number,
total_amount AS sales_amount
FROM orders;
AS は「この列をこの名前で表示する」という意味です。
元のテーブルの列名が変わるわけではなく、SQLの結果上の表示名だけが変わります。
分析レポートに近いSQLでは、別名を使うと読みやすくなります。
SELECT
product_name AS item_name,
category AS product_category,
price AS listed_price
FROM products;
別名は、後の章で集計列を扱うときにも重要になります。
たとえば SUM(total_amount) のような計算結果に sales という名前をつけると、結果が読みやすくなります。
7. まず数行を見る、という分析の入り口
新しいデータに触れるとき、最初から正しい分析SQLを書くのは難しいものです。 まずはテーブルの列名と中身を確認します。
SELECT
order_id,
customer_id,
order_date,
status,
total_amount
FROM orders;
この結果を見ると、次のような問いが生まれます。
statusにはどんな値が入っているのかtotal_amountは税込なのか税抜なのかorder_dateは注文日なのか決済日なのか- 1人の顧客が複数回注文しているのか
SQLは、単に答えを出す道具ではありません。 データを観察し、次に調べるべき問いを作るための道具でもあります。
8. 良いSQLと悪いSQL
実務では、SQLは自分だけでなく、チームの誰かが後から読むことがあります。 「動くSQL」と「読みやすく、意図が伝わるSQL」は少し違います。
たとえば、次のSQLはテーブル確認には便利ですが、分析用として共有するには意図が曖昧です。
SELECT *
FROM orders;
どの列を使って判断したのか、後から読み返した人には分かりません。 分析用に残すSQLなら、必要な列を明示します。
SELECT
order_id,
order_date,
status,
total_amount
FROM orders;
列を明示すると、「注文日・状態・金額を確認したいSQL」だと伝わります。 SQLは結果を出すだけでなく、分析の意図を残すメモでもあります。
9. よくあるミス
カンマを忘れる
SELECT
customer_id
customer_name
FROM customers;
複数列を並べるときは、列と列の間にカンマが必要です。
SELECT
customer_id,
customer_name
FROM customers;
テーブルに存在しない列を指定する
SELECT customer_email
FROM customers;
customers に customer_email という列がなければエラーになります。
まずはテーブル定義や SELECT * で列名を確認しましょう。
どのテーブルから取るかを書き忘れる
SELECT customer_name;
SQLでは、基本的に FROM で対象テーブルを指定します。
ミニ演習
次の要件に対応するSQLを考えてみましょう。
customersテーブルから、顧客ID、顧客名、都道府県を取り出してください。ordersテーブルから、注文ID、注文日、注文金額を取り出し、注文金額をsales_amountという名前で表示してください。productsテーブルから、商品名、カテゴリ、価格を取り出してください。
解けたら、関連演習で同じ考え方を短い問題として確認しましょう。
まとめ
| 構文 | 意味 | 例 |
|---|---|---|
SELECT 列名 |
表示する列を選ぶ | SELECT customer_name |
FROM テーブル名 |
対象テーブルを指定する | FROM customers |
SELECT * |
すべての列を表示する | SELECT * FROM orders |
AS |
列に別名をつける | total_amount AS sales_amount |
この章のキーメッセージ: SQLの第一歩は、テーブルから必要な列を取り出すことです。分析では、まず中身を確認し、目的に必要な列だけを選ぶ習慣が重要です。
この章の確認
SELECTとFROMはそれぞれ何を指定する句ですか?SELECT *が便利な場面と、注意が必要な場面を説明してください。ordersテーブルからorder_id,order_date,total_amountを取り出すSQLを書いてください。productsテーブルのproduct_nameをitem_nameという名前で表示するにはどう書きますか?