SQL / LESSON 01 / SQL01

SQL:SQLとは・実行環境を用意する

1学習の目的

2基礎解説

SQLは「データベースに話しかけるための言葉」です。Excelの表がたくさん保存されている倉庫があって、そこから「この条件に合う行だけ持ってきて」と頼むイメージです。

用語Excelでいうと説明
データベースブック(ファイル全体)表の集まり
テーブルシート1枚1種類のデータの表
カラム(列)商品名・価格などの項目
レコード(行)1件ぶんのデータ
✅ 実行環境の用意(インストール不要)
  1. 最も手軽なのはブラウザで動くSQL実行サイト。「SQL オンライン 実行」で検索すると、SQLite や PostgreSQL をその場で試せるサービスが複数見つかる(SQL Fiddle、DB Fiddle、SQLite Online など)。登録もインストールも不要で、この教材はすべてそこで試せる。
  2. 自分のPCに入れるなら SQLite が最も軽い。ファイル1つで完結し、サーバーを立てる必要がない。Pythonが入っていれば追加インストールすら不要(標準で sqlite3 が使える)。
  3. 実務では MySQLPostgreSQLSQL Server などが使われる。方言の違いはあるが、この教材で扱う基本文法はどれでもほぼ共通
  4. この教材では次の products テーブルを使う。実行環境に貼り付けて作っておくこと(コピー用のコードは下にある)。
  5. SQLの命令は大文字小文字を区別しないselect でも SELECT でも動くが、命令は大文字、テーブル名や列名は小文字で書くのが慣習。

この教材で使うテーブル:架空のECサイトの商品データです。

idnamecategorypricestock
1ノートPCPC1280005
2マウス周辺機器320042
3キーボード周辺機器850018
4モニターPC450007
5USBメモリ周辺機器1500120
-- ▼ 実行環境にこれを貼り付けてテーブルを作る(最初に1回だけ)
CREATE TABLE products (
  id       INTEGER PRIMARY KEY,
  name     TEXT NOT NULL,
  category TEXT,
  price    INTEGER,
  stock    INTEGER
);

INSERT INTO products VALUES
 (1, 'ノートPC',   'PC',       128000,   5),
 (2, 'マウス',     '周辺機器',   3200,  42),
 (3, 'キーボード', '周辺機器',   8500,  18),
 (4, 'モニター',   'PC',        45000,   7),
 (5, 'USBメモリ',  '周辺機器',   1500, 120);

-- ▼ 最初のSQL:全部のデータを取り出す
SELECT * FROM products;

-- ▼ 必要な列だけ取り出す
SELECT name, price FROM products;

3基本ドリル(10問)

SQL01-D01 products テーブルのすべての列・すべての行を取り出すSQLを書け。 コーディング★☆☆無料
期待される結果

5行 × 5列すべてが表示される

ヒント

SELECT * FROM テーブル名; の形。* は「すべての列」を意味する。

模範解答
SELECT * FROM products;
解説

SQLの最初の1行* はワイルドカードで「全部の列」を表す。まずこれでテーブルの中身を確認するのが、実務でも最初の一手になる。

SQL01-D02 SQLでデータを取り出す命令はどれか。
A. GET B. SELECT C. FETCH D. READ
選択★☆☆無料
期待される結果

解答 == B

ヒント

「選ぶ」という意味の英単語。

模範解答
B
解説

SELECT はSQLで最も使う命令。データを取り出す操作はすべてこれで始まる。追加は INSERT、変更は UPDATE、削除は DELETE(SQL15で扱う)。

SQL01-D03 products テーブルから name 列だけを取り出すSQLを書け。 コーディング★☆☆無料
期待される結果

name 列に5件(ノートPC〜USBメモリ)

ヒント

* の代わりに列名を書く。

模範解答
SELECT name FROM products;
解説

必要な列だけ指定するのが基本。実務のテーブルは列が30個あることも珍しくなく、* で全部取るとデータ量が無駄に増える。

SQL01-D04 商品名と価格を取り出すSQLを完成させよ。 穴埋め★☆☆無料
コード
SELECT name, price ____ products;
期待される結果

name と price の2列で5行

ヒント

「〜から」を意味するキーワード。どのテーブルから取るかを指定する。

模範解答
FROM
解説

SELECT(何を)→ FROM(どこから)という語順。日本語と逆なので最初は戸惑うが、「取り出す・〜から」と読むと自然。

SQL01-D05 SQLの文末に付ける記号はどれか。
A. ピリオド(.) B. セミコロン(;) C. カンマ(,) D. 何も付けない
選択★☆☆無料
期待される結果

解答 == B

ヒント

1つの命令の終わりを示す記号。

模範解答
B
解説

複数のSQLを続けて書くときに、どこで区切れるかを示す。1文だけなら省略できる環境も多いが、付ける習慣にしておくと安全。

SQL01-D06 products から name と price と stock の3列を、この順で取り出すSQLを書け。 コーディング★★☆無料
期待される結果

name / price / stock の3列で5行

ヒント

列名をカンマで区切って並べる。書いた順に表示される。

模範解答
SELECT name, price, stock FROM products;
解説

列は書いた順に並ぶ。テーブルの定義順とは関係なく、必要な順序で取り出せる。

SQL01-D07 category 列の重複を除いた一覧を取り出すSQLを完成させよ。 穴埋め★★☆無料
コード
SELECT ____ category FROM products;
期待される結果

category に PC と 周辺機器 の2行

ヒント

「異なる」「別個の」という意味の英単語。重複行をまとめる。

模範解答
DISTINCT
解説

5件のデータでもカテゴリは2種類しかない。「どんな値が入っているか」を調べるときの定番で、データを初めて見るときによく使う。

SQL01-D08 select NAME from PRODUCTS; と書いた場合どうなるか。
A. エラーになる B. 正しく動く C. 空の結果が返る D. 警告が出る
選択★★☆無料
期待される結果

解答 == B

ヒント

SQLは大文字小文字を区別するか。

模範解答
B
解説

SQLは大文字小文字を区別しないので動く。ただし読みやすさのため命令は大文字、名前は小文字で書くのが世界共通の慣習。

SQL01-D09 name 列を「商品名」、price 列を「価格」という別名で表示するSQLを書け。 コーディング★★☆無料
期待される結果

商品名 / 価格 の2列で5行

ヒント

AS を使う。SELECT 列名 AS 別名 の形。

模範解答
SELECT name AS 商品名, price AS 価格 FROM products;
解説

AS は表示名を変えるだけで、テーブル自体は変わらない。レポートとして人に見せるときや、集計結果に分かりやすい名前を付けるときに使う。

SQL01-D10 商品名と、価格を10倍した値を「ten_times」という名前で表示するSQLを書け。 コーディング★★☆無料
期待される結果

name / ten_times の2列。ノートPCは1280000

ヒント

SELECT の中で計算式が書ける。price * 10 のように。

模範解答
SELECT name, price * 10 AS ten_times FROM products;
解説

SELECT の中では計算ができる。税込価格や割引後の金額など、保存されていない値をその場で作り出せるのがSQLの強み。

4実践シナリオ(5問)

SQL01-S01 【在庫確認リスト】倉庫の担当者に渡す一覧を作る。商品名在庫数だけを、それぞれ「商品」「在庫」という別名で取り出すSQLを書け。 コーディング★★☆無料
期待される結果

商品 / 在庫 の2列で5行

ヒント

必要な2列だけを選び、両方に AS で別名を付ける。

模範解答
SELECT name AS 商品, stock AS 在庫 FROM products;
解説

相手が読む前提で列名を付けるのが実務の作法。データベースの列名は英語でも、出力するレポートは日本語のほうが親切なことが多い。

SQL01-S02 【税込価格表】商品名と、税込価格(10%)を「tax_included」という名前で表示するSQLを書け。 コーディング★★☆無料
期待される結果

name / tax_included の2列。ノートPCは140800.0

ヒント

price * 1.1 で税込になる。

模範解答
SELECT name, price * 1.1 AS tax_included FROM products;
解説

税込価格を保存する必要はない。税率が変わったときにデータを全部書き換えるより、取り出すときに計算するほうが安全。この考え方は実務の設計でも重要。

SQL01-S03 【在庫金額の算出】商品名と、価格 × 在庫数で計算した在庫金額を「stock_value」という名前で表示するSQLを書け。 コーディング★★☆無料
期待される結果

name / stock_value の2列。ノートPCは640000

ヒント

price * stock で計算できる。列同士の掛け算も可能。

模範解答
SELECT name, price * stock AS stock_value FROM products;
解説

列同士を計算できるのがポイント。「単価×数量」「売上−原価」など、実務の集計はこの形が土台になる。

SQL01-S04 【商品カードの元データ】次の4つを取り出すSQLを書け。
① 商品名(name)② カテゴリ(category)③ 税込価格を整数にしたもの(CAST(price * 1.1 AS INTEGER) で「tax_price」)④ 在庫金額(price × stock で「stock_value」)
コーディング★★★無料
期待される結果

4列で5行。ノートPCは tax_price 140800、stock_value 640000

ヒント

CAST(値 AS INTEGER) で小数を整数に変換できる。列はカンマで区切って並べる。

模範解答
SELECT name, category, CAST(price * 1.1 AS INTEGER) AS tax_price, price * stock AS stock_value FROM products;
解説

CAST は型を変換する命令price * 1.1 は小数になるので、金額として扱うには整数に直す。SQLでも小数の誤差は起きるため、この処理は実務でよく必要になる。

SQL01-S05 【カテゴリの調査】このテーブルにどんなカテゴリがあるかを調べたい。category 列の重複を除いた一覧を「カテゴリ一覧」という別名で取り出すSQLを書け。 コーディング★★★無料
期待される結果

カテゴリ一覧 の1列に PC と 周辺機器

ヒント

DISTINCT と AS を組み合わせる。DISTINCT は列名の前に置く。

模範解答
SELECT DISTINCT category AS カテゴリ一覧 FROM products;
解説

知らないテーブルを渡されたとき、最初にやるのがこの調査。「この列にはどんな値が入っているのか」を DISTINCT で確認してから、絞り込みの条件を考える。

5仕上げ課題

SQL01-FINAL 【商品マスタ一覧の作成】上司から「商品マスタの一覧を作って」と頼まれた。次の条件を満たすSQLを1本書け。

表示する列(この順序で)
id → 別名「商品ID」
name → 別名「商品名」
category → 別名「分類」
price → 別名「本体価格」
⑤ 税込価格(price × 1.1 を整数に変換)→ 別名「税込価格」
stock → 別名「在庫数」
⑦ 在庫金額(price × stock)→ 別名「在庫金額」

期待される結果(7列 × 5行)
商品ID | 商品名 | 分類 | 本体価格 | 税込価格 | 在庫数 | 在庫金額
1 | ノートPC | PC | 128000 | 140800 | 5 | 640000
2 | マウス | 周辺機器 | 3200 | 3520 | 42 | 134400
3 | キーボード | 周辺機器 | 8500 | 9350 | 18 | 153000
4 | モニター | PC | 45000 | 49500 | 7 | 315000
5 | USBメモリ | 周辺機器 | 1500 | 1650 | 120 | 180000
期待される結果

7列 × 5行が完全一致

ヒント

列をカンマで7つ並べる。税込は CAST(price * 1.1 AS INTEGER)、在庫金額は price * stock。すべてに AS で日本語の別名を付ける。長くなるので、列ごとに改行すると読みやすい。

模範解答
SELECT
  id AS 商品ID,
  name AS 商品名,
  category AS 分類,
  price AS 本体価格,
  CAST(price * 1.1 AS INTEGER) AS 税込価格,
  stock AS 在庫数,
  price * stock AS 在庫金額
FROM products;
解説

SELECT だけで、ここまでの表が作れる。データベースには4つの値しか入っていないのに、税込価格も在庫金額も出力できた。保存されていない情報を、取り出すときに計算して作る——これがSQLの基本的な考え方で、税率が変わってもデータは1行も直さなくてよい。

もうひとつ注目してほしいのがSQLを改行して書いていることだ。1行に詰め込んでも動くが、列が7つもあると読めなくなる。SQLは複雑になるほど長くなるので、最初から改行して書く習慣をつけておくと後が楽になる。

ただし今の状態には大きな制限がある。常に5件すべてが出てくることだ。1万件の商品テーブルなら1万件が出てくる。次章では WHERE を学び、「欲しい行だけ」を取り出せるようになる。ここからSQLが本当の道具になる。