SQL ServerのCREATE文徹底解説:基本構文と実践演習

CREATE文は、SQL Serverにおいて新しいデータベースオブジェクトを作成するためのSQLコマンドです。これには以下のようなオブジェクトが含まれます:

  • データベース
  • テーブル
  • インデックス
  • ビュー
  • ストアドプロシージャ

SQL Serverを使うプロジェクトでは、まずテーブルやデータベースを作成し、その上にデータを操作するクエリを組み立てていきます。この記事では、CREATE文の基本的な使い方と注意点を詳しく解説します。


CREATE文の基本構文

CREATE文の一般的な構文は以下のようになります:

CREATE オブジェクトタイプ オブジェクト名 (定義);

例えば、テーブルを作成する場合は以下のような形式です:

CREATE TABLE テーブル名 (
    カラム名1 データ型 [制約],
    カラム名2 データ型 [制約],
    ...
);

CREATE TABLEの具体例

CREATE TABLE文は、テーブル(データの格納先)を作成します。例えば、顧客情報を管理するCustomersテーブルを作るには以下のSQLを使用します。

CREATE TABLE Customers (
    CustomerID INT PRIMARY KEY,
    FirstName NVARCHAR(50) NOT NULL,
    LastName NVARCHAR(50) NOT NULL,
    Email NVARCHAR(100),
    PhoneNumber NVARCHAR(15),
    CreatedAt DATETIME DEFAULT GETDATE()
);

コードの説明

  • CustomerID: 整数型の主キー(重複不可)
  • FirstName, LastName: それぞれ50文字までの文字列
  • Email, PhoneNumber: 連絡先情報(必須ではない)
  • CreatedAt: 作成日時を自動的に取得

その他のCREATE文の使い方

CREATE DATABASE

新しいデータベースを作成する場合:

CREATE DATABASE ShopDB;

CREATE VIEW

既存テーブルから特定のデータを簡単に参照するビューを作成:

CREATE VIEW ActiveCustomers AS
SELECT CustomerID, FirstName, LastName
FROM Customers
WHERE Active = 1;

CREATE INDEX

検索のパフォーマンス向上のためにインデックスを作成:

CREATE INDEX idx_email ON Customers (Email);

CREATE PROCEDURE

よく使うSQLをプロシージャとして定義:

CREATE PROCEDURE GetCustomerByID @CustomerID INT AS
BEGIN
    SELECT * FROM Customers WHERE CustomerID = @CustomerID;
END;

エラーの原因と解決策

CREATE文を使用する際に発生するよくあるエラーの原因とその解決策を紹介します。

エラー内容原因解決策
Table already exists同名のテーブルが既に存在するテーブル名を変更、または削除してから作成
Syntax error near ‘CREATE’文法のミスSQL構文を確認
Invalid column typeデータ型の指定が間違っている正しいデータ型(INTやVARCHARなど)を使用
Primary key violation主キーの重複が発生重複しないデータを挿入

演習問題

以下の演習を通じて、SQL ServerでのCREATE文の理解を深めましょう。

演習1: データベースの作成

SchoolDBという名前の新しいデータベースを作成してください。

演習2: テーブルの作成

以下の仕様を持つStudentsテーブルを作成してください。

  • StudentID: 整数型、主キー
  • FirstName: 50文字までの文字列、必須
  • LastName: 50文字までの文字列、必須
  • BirthDate: 日付型
  • EnrollmentDate: 日時型、デフォルトで現在日時

演習3: ビューの作成

Studentsテーブルから「2020年以降に入学した学生」を表示するRecentStudentsビューを作成してください。

演習4: インデックスの作成

LastNameカラムにインデックスを作成してください。

演習5: ストアドプロシージャの作成

StudentIDを引数にとり、その学生の情報を取得するストアドプロシージャGetStudentByIDを作成してください。


解答例

解答1: データベースの作成

CREATE DATABASE SchoolDB;

解答2: テーブルの作成

CREATE TABLE Students (
    StudentID INT PRIMARY KEY,
    FirstName NVARCHAR(50) NOT NULL,
    LastName NVARCHAR(50) NOT NULL,
    BirthDate DATE,
    EnrollmentDate DATETIME DEFAULT GETDATE()
);

解答3: ビューの作成

CREATE VIEW RecentStudents AS
SELECT StudentID, FirstName, LastName, EnrollmentDate
FROM Students
WHERE EnrollmentDate >= '2020-01-01';

解答4: インデックスの作成

CREATE INDEX idx_lastname ON Students (LastName);

解答5: ストアドプロシージャの作成

CREATE PROCEDURE GetStudentByID @StudentID INT AS
BEGIN
    SELECT * FROM Students WHERE StudentID = @StudentID;
END;

まとめ

本記事では、SQL ServerにおけるCREATE文の使い方について解説しました。CREATE文は、データベースやテーブルの設計段階で必須のコマンドです。特に、テーブルの設計ではカラムのデータ型や制約を正しく設定することが重要です。

今回紹介した内容を理解し、自分のプロジェクトで実際に試してみることで、SQL Serverでのデータ管理がよりスムーズになるでしょう。演習問題を解いて、CREATE文の理解をさらに深めてください。


以上で「SQL ServerのCREATE文」の記事を終了します。質問や不明点があれば、ぜひコメントしてください!