SQL:SQLとは・実行環境を用意する
1学習の目的
- SQLが何をする言語なのかを理解し、インストールなしでその場で試せる環境を用意する。今日から手を動かして学べる状態を作る。
- SELECT でデータを取り出す感覚をつかむ。この1行が、以降すべての章の土台になる。
2基礎解説
SQLは「データベースに話しかけるための言葉」です。Excelの表がたくさん保存されている倉庫があって、そこから「この条件に合う行だけ持ってきて」と頼むイメージです。
| 用語 | Excelでいうと | 説明 |
|---|---|---|
| データベース | ブック(ファイル全体) | 表の集まり |
| テーブル | シート1枚 | 1種類のデータの表 |
| カラム(列) | 列 | 商品名・価格などの項目 |
| レコード(行) | 行 | 1件ぶんのデータ |
- 最も手軽なのはブラウザで動くSQL実行サイト。「SQL オンライン 実行」で検索すると、SQLite や PostgreSQL をその場で試せるサービスが複数見つかる(SQL Fiddle、DB Fiddle、SQLite Online など)。登録もインストールも不要で、この教材はすべてそこで試せる。
- 自分のPCに入れるなら SQLite が最も軽い。ファイル1つで完結し、サーバーを立てる必要がない。Pythonが入っていれば追加インストールすら不要(標準で sqlite3 が使える)。
- 実務では MySQL・PostgreSQL・SQL Server などが使われる。方言の違いはあるが、この教材で扱う基本文法はどれでもほぼ共通。
- この教材では次の products テーブルを使う。実行環境に貼り付けて作っておくこと(コピー用のコードは下にある)。
- SQLの命令は大文字小文字を区別しない。select でも SELECT でも動くが、命令は大文字、テーブル名や列名は小文字で書くのが慣習。
この教材で使うテーブル:架空のECサイトの商品データです。
| id | name | category | price | stock |
|---|---|---|---|---|
| 1 | ノートPC | PC | 128000 | 5 |
| 2 | マウス | 周辺機器 | 3200 | 42 |
| 3 | キーボード | 周辺機器 | 8500 | 18 |
| 4 | モニター | PC | 45000 | 7 |
| 5 | USBメモリ | 周辺機器 | 1500 | 120 |
-- ▼ 実行環境にこれを貼り付けてテーブルを作る(最初に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問)
5行 × 5列すべてが表示される
SELECT * FROM テーブル名; の形。* は「すべての列」を意味する。
SELECT * FROM products;
SQLの最初の1行。* はワイルドカードで「全部の列」を表す。まずこれでテーブルの中身を確認するのが、実務でも最初の一手になる。
A. GET B. SELECT C. FETCH D. READ 選択★☆☆無料
解答 == B
「選ぶ」という意味の英単語。
B
SELECT はSQLで最も使う命令。データを取り出す操作はすべてこれで始まる。追加は INSERT、変更は UPDATE、削除は DELETE(SQL15で扱う)。
name 列に5件(ノートPC〜USBメモリ)
* の代わりに列名を書く。
SELECT name FROM products;
必要な列だけ指定するのが基本。実務のテーブルは列が30個あることも珍しくなく、* で全部取るとデータ量が無駄に増える。
SELECT name, price ____ products;
name と price の2列で5行
「〜から」を意味するキーワード。どのテーブルから取るかを指定する。
FROM
SELECT(何を)→ FROM(どこから)という語順。日本語と逆なので最初は戸惑うが、「取り出す・〜から」と読むと自然。
A. ピリオド(.) B. セミコロン(;) C. カンマ(,) D. 何も付けない 選択★☆☆無料
解答 == B
1つの命令の終わりを示す記号。
B
複数のSQLを続けて書くときに、どこで区切れるかを示す。1文だけなら省略できる環境も多いが、付ける習慣にしておくと安全。
name / price / stock の3列で5行
列名をカンマで区切って並べる。書いた順に表示される。
SELECT name, price, stock FROM products;
列は書いた順に並ぶ。テーブルの定義順とは関係なく、必要な順序で取り出せる。
SELECT ____ category FROM products;
category に PC と 周辺機器 の2行
「異なる」「別個の」という意味の英単語。重複行をまとめる。
DISTINCT
5件のデータでもカテゴリは2種類しかない。「どんな値が入っているか」を調べるときの定番で、データを初めて見るときによく使う。
A. エラーになる B. 正しく動く C. 空の結果が返る D. 警告が出る 選択★★☆無料
解答 == B
SQLは大文字小文字を区別するか。
B
SQLは大文字小文字を区別しないので動く。ただし読みやすさのため命令は大文字、名前は小文字で書くのが世界共通の慣習。
商品名 / 価格 の2列で5行
AS を使う。SELECT 列名 AS 別名 の形。
SELECT name AS 商品名, price AS 価格 FROM products;
AS は表示名を変えるだけで、テーブル自体は変わらない。レポートとして人に見せるときや、集計結果に分かりやすい名前を付けるときに使う。
name / ten_times の2列。ノートPCは1280000
SELECT の中で計算式が書ける。price * 10 のように。
SELECT name, price * 10 AS ten_times FROM products;
SELECT の中では計算ができる。税込価格や割引後の金額など、保存されていない値をその場で作り出せるのがSQLの強み。
4実践シナリオ(5問)
商品 / 在庫 の2列で5行
必要な2列だけを選び、両方に AS で別名を付ける。
SELECT name AS 商品, stock AS 在庫 FROM products;
相手が読む前提で列名を付けるのが実務の作法。データベースの列名は英語でも、出力するレポートは日本語のほうが親切なことが多い。
name / tax_included の2列。ノートPCは140800.0
price * 1.1 で税込になる。
SELECT name, price * 1.1 AS tax_included FROM products;
税込価格を保存する必要はない。税率が変わったときにデータを全部書き換えるより、取り出すときに計算するほうが安全。この考え方は実務の設計でも重要。
name / stock_value の2列。ノートPCは640000
price * stock で計算できる。列同士の掛け算も可能。
SELECT name, price * stock AS stock_value FROM products;
列同士を計算できるのがポイント。「単価×数量」「売上−原価」など、実務の集計はこの形が土台になる。
① 商品名(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でも小数の誤差は起きるため、この処理は実務でよく必要になる。
カテゴリ一覧 の1列に PC と 周辺機器
DISTINCT と AS を組み合わせる。DISTINCT は列名の前に置く。
SELECT DISTINCT category AS カテゴリ一覧 FROM products;
知らないテーブルを渡されたとき、最初にやるのがこの調査。「この列にはどんな値が入っているのか」を DISTINCT で確認してから、絞り込みの条件を考える。
5仕上げ課題
表示する列(この順序で)
① 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が本当の道具になる。