コース一覧
SQL実践:JOIN・サブクエリ・データ更新
CREATE DATABASE と CREATE TABLE

SQL実践:JOIN・サブクエリ・データ更新

JOIN、集合演算、サブクエリ、CTE、DDL・DMLを学び、複数テーブルを組み合わせてデータベースを作成・更新する無料コースです。

1
テーブル結合
01. なぜ結合が必要か5分
02. INNER JOINの基本5分
03. LEFT/RIGHT OUTER JOIN5分
04. 複数テーブルの結合5分
05. 自己結合5分
06. 集合演算 UNION/INTERSECT/EXCEPT5分
07. 結合の実践演習5分
08. テーブル結合クイズ5分
2
サブクエリ活用
01. サブクエリとは5分
02. WHERE句のサブクエリ5分
03. FROM句のサブクエリ5分
04. SELECT句のサブクエリ5分
05. WITH句(CTE)の活用5分
06. サブクエリ実践クイズ5分
3
テーブル作成とデータ操作
01. CREATE DATABASE と CREATE TABLE5分
02. データ型の選び方5分
03. INSERT 文でデータを追加する5分
04. UPDATE 文でデータを更新する5分
05. DELETE 文でデータを削除する5分
06. 物理削除と論理削除5分
07. ALTER TABLE で構造を変更する5分
08. 制約 (NOT NULL / UNIQUE / DEFAULT)5分
09. TRUNCATE と DROP5分
10. DDL / DML 実践クイズ5分

CREATE DATABASE と CREATE TABLE

入れ物が無いと、1 行も入らない

ここまでは、誰かが用意したテーブルを読む側に立ってきました。自分でアプリを作る側に回ると、最初にやることは「どんな列を持つ表を用意するか」を決めて、その形をデータベースに伝えることです。表が無ければ、1 行も保存できません。

SQL の命令は、この 2 つに分かれます。表の形を作る側が DDL (CREATE や ALTER)、中身を出し入れする側が DML (SELECT や INSERT) です。ここからは前者の話になります。

まず、テーブルを置く入れ物を用意します。この演習環境は PostgreSQL 互換なので、入れ物は CREATE SCHEMA で作り、SET search_path で今どこを触るかを切り替えます。

SQL クエリ

CREATE SCHEMA shop_db;
SET search_path TO shop_db;

MySQL や TiDB では CREATE DATABASE と USE が同じ役割です。この切り替えを忘れると、意図しない場所に表ができてしまい、後から探しても見つからない、ということが起きます。

「列名 型 制約」を、カンマで並べる

テーブルの定義は、列を 1 行ずつ並べるだけです。左から順に、列の名前、入る値の型、その列に課すルールを書きます。

SQL クエリ

CREATE TABLE staff (
  id        INT PRIMARY KEY,
  full_name VARCHAR(60) NOT NULL,
  hired_on  DATE
);

PRIMARY KEY は「この列の値で 1 行を特定できる」という宣言、NOT NULL は「空のままでは保存させない」という宣言です。hired_on のように何も付けなければ、空のままでも保存できます。入社日がまだ決まっていない人も登録できる、という意味になります。

つまずきやすいのは、最後の列の後ろにカンマを残してしまうことです。列をコピーして貼り、いらない行を消したときに起きます。

作った直後のテーブルは 0 行です。列の形だけが決まっていて、中身はまだ何もありません。

2 回流すと、そこで落ちる

同じ名前のテーブルが既にあると、CREATE TABLE は失敗します。手で 1 回打つだけなら気になりませんが、初期データを流すスクリプトや CI では、同じファイルを何度も実行することになります。

SQL クエリ

CREATE TABLE IF NOT EXISTS staff (
  id        INT PRIMARY KEY,
  full_name VARCHAR(60) NOT NULL
);

IF NOT EXISTS を付けておくと、既にある場合は何もせずに次へ進みます。

解説

現場の話 テーブル名は複数形、列名は小文字のスネークケース (full_name のような書き方) にそろえるチームが多いです。MySQL は動く OS によって大文字と小文字を区別したりしなかったりするので、最初に決めて全員でそろえておくと、後から余計な事故を拾わずに済みます。

テーブル構造

-- 既にデータベースが用意されている状態を想定。
-- 空のスキーマ。あなたが CREATE TABLE で 2 つのテーブルを作ります。
SELECT 1;

期待される出力

table_namecolumn_count
categories2
products4

ヒント

CREATE TABLE は 列名 型 制約 をカンマ区切りで並べる

PRIMARY KEY は列定義の右側に書ける

確認用 SELECT は変更不要。CREATE TABLE を 2 つ書き足すだけで完成する

このレッスンに出てくる用語

意味があいまいなまま進んだ語は、ここから読み直せます。

  • テーブルDB の表 (Excel のシートみたいなもの)
  • データベースデータを構造化して保存する仕組み
  • SQLデータベースを操作するための共通言語
  • PostgreSQL機能が豊富なオープンソースのRDBMS
  • MySQL広く使われるオープンソースのRDBMS
  • スネークケースmy_project 形式。Python ファイル向け
query.sql
学習モード
エディタを読み込んでいます
コードの実行結果
データベースを初期化中...