青の統計学-DS Playground-

SELECTとFROM: テーブルから列を取り出す

Stage 1 — 第1章 | データ分析基礎カリキュラム 推定学習時間:25〜35分 | 難易度:★☆☆☆☆


この章で学ぶこと

SQLは、データベースに対して「どのデータを見たいか」を伝えるための言語です。 データ分析の現場では、いきなり複雑な集計や機械学習に進む前に、まず必要な列を正しく取り出せることが出発点になります。

この章では、SQLの最も基本となる SELECTFROM を学びます。

この章を終えると、こんなことができるようになります:

  • テーブルから必要な列だけを取り出せる
  • 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_idprefecture が重要になるかもしれません。


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;
          

customerscustomer_email という列がなければエラーになります。 まずはテーブル定義や SELECT * で列名を確認しましょう。

どのテーブルから取るかを書き忘れる

SELECT customer_name;
          

SQLでは、基本的に FROM で対象テーブルを指定します。


ミニ演習

次の要件に対応するSQLを考えてみましょう。

  1. customers テーブルから、顧客ID、顧客名、都道府県を取り出してください。
  2. orders テーブルから、注文ID、注文日、注文金額を取り出し、注文金額を sales_amount という名前で表示してください。
  3. products テーブルから、商品名、カテゴリ、価格を取り出してください。

解けたら、関連演習で同じ考え方を短い問題として確認しましょう。


まとめ

構文 意味
SELECT 列名 表示する列を選ぶ SELECT customer_name
FROM テーブル名 対象テーブルを指定する FROM customers
SELECT * すべての列を表示する SELECT * FROM orders
AS 列に別名をつける total_amount AS sales_amount

この章のキーメッセージ: SQLの第一歩は、テーブルから必要な列を取り出すことです。分析では、まず中身を確認し、目的に必要な列だけを選ぶ習慣が重要です。


この章の確認

  1. SELECTFROM はそれぞれ何を指定する句ですか?
  2. SELECT * が便利な場面と、注意が必要な場面を説明してください。
  3. orders テーブルから order_id, order_date, total_amount を取り出すSQLを書いてください。
  4. products テーブルの product_nameitem_name という名前で表示するにはどう書きますか?

関連演習