サイトアイコン ITC Media

【SQL】CREATE TABLE|テーブルの作成方法を一から解説

(最終更新月:2023年5月)

✔以下の疑問をお持ちの方へ向けた記事です

「SQLでテーブルを作るCREATE TABLEとは何で、どのように使うのだろうか?」
「SQLのCREATE TABLEの使い方を学びたい」
「SQLのCREATE TABLEの具体的な使用例を見て理解したい」

✔この記事を読むことで得られる知識

当記事では、SQLのCREATE TABLEの基本的な使い方から、テーブルを作成する際の考慮点まで、具体的な例を交えて詳細に説明します。

初心者の方でも理解しやすいように、難しい概念は簡単に、丁寧に説明しています。

ぜひ最後までお読みください。

✔【約10分】スキマ時間で聞いて、見て学びたい方はこちら

筆者プロフィール

【現職】プロダクトマネージャー

【副業】ブログ(月間20万PV)/YouTube/Web・アプリ制作

「プログラミング × ライティング × 営業」の経験を活かし、30後半からのIT系職へシフト。現在はプロダクトマネージャーとして、さまざまな関係者の間に入り奮闘してます。当サイトでは、実際に手を動かせるWebアプリの開発を通じて、プログラミングはもちろん、IT職に必要な情報を提供していきます。

【当ブログで紹介しているサイト】

当サイトチュートリアルで作成したデモ版日報アプリ

Django × Reactで開発したツール系Webアプリ

✔人に見せても恥ずかしくないコードを書こう

「リーダブルコード」は、わかりやすく良いコードの定義を教えてくれる本です。

  • 見るからにきれいなコードの書き方
  • コードの分割方法
  • 変数や関数の命名規則

エンジニアのスタンダートとすべき基準を一から解説しています。

何回も読むのに値する本なので、ぜひ手にとって読んでみてください。

SQLとは?

ここでは、SQLの基本概念とその重要性についてお伝えします。

SQLの基本概念

SQL(Structured Query Language)は、リレーショナルデータベースのデータを操作するための標準的なプログラミング言語です。

SQLでは、以下のような操作が可能。

SQLの重要性と活用シーン

SQLは、データ駆動型の意思決定が必要とされる現代ビジネスにおいて、極めて重要なスキルとなっています。

以下はビジネスシーンで活用される場面例です。

SQLとテーブル作成の必要性

SQLはデータベースを操作するための言語であり、多岐にわたる用途で使用されます。

データベースにおいて、テーブルはデータを保管する箱です。

適切なテーブルを作成し管理する能力は、効率的なデータ操作を可能にするのです。

SQLのテーブルとは

ここでは、テーブルの基本概念と、テーブルとデータベースの関係について解説します。

テーブルの基本概念

SQLのテーブルは、データを整理し、保存するための構造です。

ひとつのテーブルは多くの行(レコード)と列(フィールド)から成り立ちます。

イメージとしてよく用いられるのは、Microsoftのエクセルです。

テーブルとデータベースの関係

データベースは、ひとつ以上の関連するテーブルの集合です。

テーブル間の関連性(リレーションシップ)は、一つのテーブルから別のテーブルへのリンクを作成することで構築されます。

このようなテーブル間の関連性は、効率的なデータ管理と分析を可能にするのです。

CREATE TABLEとは

ここでは、CREATE TABLEコマンドの概要とその基本的な構文について詳しく説明します。

CREATE TABLEコマンドの概要

CREATE TABLEコマンドは、新しいテーブルをデータベースに作成するコマンドです。

このコマンドはテーブル名、列名、それぞれの列のデータ型といったテーブルの構造を定義します。

CREATE TABLEコマンドの基本的な構文

CREATE TABLEコマンドの基本的な構文は次の通りです。

CREATE TABLE テーブル名 (列名1 データ型, 列名2 データ型, …);

このコマンドを使うことで、任意の名前を持つテーブルを作成し、列名とそれぞれのデータ型を指定することができます。

CREATE TABLE Users (
    ID INT PRIMARY KEY,
    FirstName VARCHAR(50),
    LastName VARCHAR(50),
    Email VARCHAR(100),
    Created_At TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

コードが長い場合は、改行などを入れると見やすくなります。

SQLのデータ型について

ここでは、SQLで使われる主要なデータ型について解説します。具体的には、数値型、文字列型、日付・時刻型について説明します。

数値型

数値型は、整数や浮動小数点数などの数値を格納するためのデータ型です。

整数型(INT)は整数を、小数型(DECIMAL)は小数を格納します。

これらの型は、数値に対する算術演算が可能です。

文字列型

文字列型は、テキストデータを格納するためのデータ型です。

一般的に、以下のような種類があります。

これらの型はテキストの検索や比較が可能です。

日付・時刻型

日付・時刻型は日付や時間を格納するためのデータ型です。

これらの型は日付や時間の計算が可能です。

CREATE TABLEのオプションについて

ここでは、テーブル作成時に使用することができる一部の重要なオプションについて説明します。

NOT NULL

NOT NULLオプションは、その列にNULL値が格納されることを防ぐための制約です。

このオプションを指定した列には、必ず何らかの値が格納されなければなりません。

例えば、「age INT NOT NULL」という列定義では、age列にNULL値を設定することはできません。

PRIMARY KEY

PRIMARY KEYオプションは、その列がテーブルの主キーであることを示します。

主キーはテーブル内の各行を一意に識別するためのもので、同じ値を持つ行が存在することは許されません

また、主キー列にはNULL値が設定されることはできません。

UNIQUE

UNIQUEオプションは、その列の値がテーブル内で一意であることを強制する制約です。

つまり、同じ値を持つ2つの行が存在することは許されません。

ただし、UNIQUE制約のある列にはNULL値が設定できます(ただし、一度に一つのNULL値だけです)。

DEFAULT

DEFAULTオプションは、列に値が明示的に指定されない場合に自動的に設定される値を定義します。

age INT DEFAULT 0;

age列に値が指定されない場合、その値は自動的に0に設定されます。

CREATE TABLEの使用例

こちらでは、「CREATE TABLE」の使用例をいくつかご紹介します。

それぞれの例を通じて、「CREATE TABLE」を用いてどのようなテーブルを作成することができるかを具体的に理解していきましょう。

単純なテーブルの作成

最も基本的な形のCREATE TABLE文は、テーブル名とともに列名とデータ型を指定するだけで、テーブルを作成できます。

以下は、IDと名前を持つ単純なテーブルを作成する例です。

CREATE TABLE Employees (
    EmployeeID INT,
    Name VARCHAR(255)
);

列のデータ型を指定したテーブルの作成

各列のデータ型を具体的に指定することで、より具体的なテーブルを作成できます。

以下は、従業員の情報を保持するテーブルの作成例で、各列のデータ型に適切な型が指定されています。

CREATE TABLE Employees (
    EmployeeID INT,
    FirstName VARCHAR(50),
    LastName VARCHAR(50),
    BirthDate DATE,
    Email VARCHAR(100),
    Salary DECIMAL(8, 2)
);

制約を持つテーブルの作成

CREATE TABLE文に制約を追加することで、テーブルの整合性を保てます。

以下の例では、EmployeeID列にPRIMARY KEY制約が、Email列にUNIQUE制約が追加されています。

CREATE TABLE Employees (
    EmployeeID INT PRIMARY KEY,
    FirstName VARCHAR(50),
    LastName VARCHAR(50),
    BirthDate DATE,
    Email VARCHAR(100) UNIQUE,
    Salary DECIMAL(8, 2)
);

複数のテーブルを同時に作成する

一つのSQLスクリプト内で、複数のCREATE TABLE文を用いることで、一度に複数のテーブルを作成できます。

ただし、各テーブル間に依存関係がある場合(例えば、外部キー制約など)、テーブルを作成する順序に注意する必要があります。

CREATE TABLE Departments (
    DepartmentID INT PRIMARY KEY,
    DepartmentName VARCHAR(50)
);

CREATE TABLE Employees (
    EmployeeID INT PRIMARY KEY,
    FirstName VARCHAR(50),
    LastName VARCHAR(50),
    BirthDate DATE,
    Email VARCHAR(100) UNIQUE,
    Salary DECIMAL(8, 2),
    DepartmentID INT,
    FOREIGN KEY (DepartmentID) REFERENCES Departments(DepartmentID)
);

CREATE TABLEのエラーとその対処法

CREATE TABLE文を用いてテーブルを作成する際には、さまざまなエラーに出会うことがあります。

ここでは、よくあるエラーとその対処法について詳しく見ていきましょう。

エラーの例とその解決策

各エラーは具体的なメッセージとともに出力されます。

これらのエラーメッセージを理解し、適切な対処をおこなうことが重要です。

以下に、よくあるエラーメッセージとその解決策をいくつか示します。

エラーコードエラー概要対処方法
“Table ‘tablename’ already exists”既に同名のテーブルが存在するときに出るエラーテーブル名を変更するか、
既存のテーブルをDROP TABLEコマンドで削除してから再試行する
“Unknown column type ‘typename'”列のデータ型が誤っているときに出るエラー正しいデータ型に修正する
“Incorrect table definition;
there can be only one auto column and it must be defined as a key”
AUTO_INCREMENT属性が複数の列に指定されている
またはキーとして定義されていない場合に出るエラー
AUTO_INCREMENT属性を1つの列にのみ適用し、その列をキーとして定義する

テーブル名や列名のエラー

テーブル名や列名は、各データベースシステムの命名規則に従う必要があります。

以下のような点に注意して命名しましょう。

これらのエラーを解決するには、命名規則を確認し、名前を適切に変更します。

データ型のエラー

列のデータ型が適切に指定されていないと、エラーが発生します。

例えば、VARCHAR型の列でサイズが指定されていない場合や、整数型の列でサイズが適切でない場合などです。

これらのエラーを解決するには、各列のデータ型とサイズを適切に指定します。

制約関連のエラー

SQLの制約関連のエラーはデータベースのテーブルに設定されたルール(制約)に違反した場合に発生します。

以下に一部の制約とそれに関連するエラーについて解説します。

  1. PRIMARY KEY制約違反
    PRIMARY KEYはテーブル内のレコードを一意に特定するためのキーです。これが重複したり、NULL値が入力されるとエラーが発生します。対処方法としては、PRIMARY KEYに一意な値を入力することです。
  2. FOREIGN KEY制約違反
    FOREIGN KEYは他のテーブルとの関連性を示すためのキーです。これが他のテーブルの主キーと一致しない場合や、主キーが存在しない値が入力された場合、エラーが発生します。対処方法としては、FOREIGN KEYに一致する主キーが存在する値を入力することです。
  3. NOT NULL制約違反
    NOT NULL制約は特定の列がNULL値を許容しないことを指定します。この列にNULL値が入力されるとエラーが発生します。対処方法としては、NOT NULL制約が指定された列に非NULL値を入力することです。
  4. UNIQUE制約違反
    UNIQUE制約は特定の列の値がテーブル内で一意であることを指定します。この列に重複した値が入力されるとエラーが発生します。対処方法としては、UNIQUE制約が指定された列に一意(重複しない)な値を入力することです。
  5. CHECK制約違反
    CHECK制約は特定の列に対して特定の条件を満たす値のみを許容します。この列に制約条件を満たさない値が入力されるとエラーが発生します。対処方法としては、CHECK制約の条件を満たす値を入力することです。

これらのエラーは通常、データベースにデータをINSERT、UPDATEする際や、テーブル構造を変更する際に発生します。エラーメッセージを読み解き、適切な対策を講じることで解決できます。

実践編:CREATE TABLE

CREATE TABLEコマンドの理論的な知識を得たところで、実際にそれを使ってテーブルを作成してみましょう。

実業務でのテーブル設計

実業務でのテーブル設計は、単にテーブルを作るだけではありません。

データの整合性を保つための制約設定、パフォーマンスを向上させるためのインデックス設定など、さまざまな要素を考慮しながら設計を進める必要があります。

具体的なテーブル設計の例として、以下3つのテーブルを作ってみました。

顧客情報の管理テーブル例「customers」

CREATE TABLE customers (
    customer_id INT PRIMARY KEY,
    first_name VARCHAR(50),
    last_name VARCHAR(50),
    email VARCHAR(100),
    phone_number VARCHAR(15)
);

--レコードを作成
INSERT INTO customers (customer_id, first_name, last_name, email, phone_number) 
VALUES (1, 'John', 'Doe', 'johndoe@example.com', '123-456-7890');

商品情報の管理テーブル例「products」

CREATE TABLE products (
    product_id INT PRIMARY KEY,
    product_name VARCHAR(50),
    product_price DECIMAL(10, 2)
);

--レコードを作成
INSERT INTO products (product_id, product_name, product_price)
VALUES (1, 'Apple', 0.99);

購入履歴の管理テーブル例「purchase_history」

CREATE TABLE purchase_history (
    purchase_id INT PRIMARY KEY,
    customer_id INT,
    product_id INT,
    purchase_date DATE,
    FOREIGN KEY (customer_id) REFERENCES customers(customer_id),
    FOREIGN KEY (product_id) REFERENCES products(product_id)
);

--レコードを作成
INSERT INTO purchase_history (purchase_id, customer_id, product_id, purchase_date)
VALUES (1, 1, 1, '2023-05-18');

CREATE TABLEの高度な使い方

CREATE TABLEは、基本的なテーブル作成だけでなく、より高度なテーブル操作にも使用できます。

例えば、既存のテーブルから新たなテーブルを作成する「CREATE TABLE … AS SELECT」文や、一時テーブルの作成などが可能です。

これらの高度な使い方を理解することで、SQLスキルの幅を広げることができます。

ほかのテーブル操作命令

CREATE TABLE以外にも、テーブルの操作を行うためのSQLコマンドは多数存在します。

ここでは、ALTER TABLEとDROP TABLEについて簡単に説明します。

ALTER TABLE

ALTER TABLEは、既存のテーブルを変更するためのコマンド。

列の追加、削除、変更など、さまざまな操作が可能です。

ALTER TABLE tablename ADD columnname datatype;

既存のテーブルに新たな列を追加する例になります。

DROP TABLE

DROP TABLEは、テーブルを削除するためのコマンドです。

テーブル名を指定して実行することで、そのテーブルとそのテーブルに含まれる全てのデータが削除されます。

DROP TABLE tablename;

指定したテーブルを削除する例です。

ただし、ほかのテーブルとの関係性(外部キー制約など)によっては、直接削除できない場合もありますので注意が必要です。

SQLのCREATE TABLEをより深く理解する

これまでに学んだCREATE TABLEコマンドの基本から応用までを理解したところで、さらに深い理解を目指してみましょう。

CREATE TABLEとほかのSQLコマンドとの関連性

CREATE TABLEは、データベースにおけるテーブル作成をおこなう基本的なコマンドです。

他のSQLコマンドと連携してデータ操作を行うことが可能です。

これらのコマンドとの関連性を理解し、適切なデータ操作を行うことが重要です。

SQL標準以外のCREATE TABLE

CREATE TABLEの基本的な文法はSQL標準に基づいていますが、各データベースシステムでは独自の拡張を持つことがあります。

例えば、MySQLでは列にAUTO_INCREMENT属性を設定したり、PostgreSQLでは列にSERIAL型を使用して自動増分を行ったりできます。

使用しているデータベースシステムの特性を理解することで、より効率的なデータ操作が可能となります。

まとめ

当記事では以下のことを学びました。

さらなる学習のためには、実際にSQLを書いてみることが最良の方法です。

さまざまなデータ型や制約を設定してテーブルを作成し、実際にデータを挿入、更新、削除してみましょう。

モバイルバージョンを終了