【SQL】CREATEの使い方|SSMSでデータベースとテーブルを作成する方法を初心者向けに解説
SQLを学ぶうえで、データを登録・更新する前に理解しておきたいのがCREATE文です。
CREATE文を使用すると、データベースやテーブルなど、データを保存するための入れ物を作成できます。
しかし、SQL初心者の場合は「CREATE TABLEの書き方がわからない」「データ型をどのように指定すればよいかわからない」「実行したのにテーブルが表示されない」といった部分でつまずきやすいです。
この記事では、SQL Server LocalDBとSQL Server Management Studioを使用し、CREATE文でデータベースとテーブルを作成する方法を手順に沿って解説します。
実際にSQLを実行し、作成したテーブルへデータを登録して確認するところまで進めるため、CREATE文の基本的な使い方を手を動かしながら学べます。
この記事でわかること
この記事では、SQL ServerにおけるCREATE文の基本から、SSMSを使った実行方法まで確認します。
- CREATE文の役割
- SSMSからSQL Server LocalDBへ接続する方法
- CREATE DATABASEでデータベースを作成する方法
- CREATE TABLEでテーブルを作成する方法
- INTやNVARCHARなどの基本的なデータ型
- PRIMARY KEYやNOT NULLなどの制約
- 作成したテーブルへデータを登録して確認する方法
動作環境
この記事では、Windows環境でSQL Server LocalDBとSSMSを使う前提で進めます。
バージョンは一例です。環境によって画面表示や細かい操作が異なる場合があります。
| 項目 | 内容 |
|---|---|
| OS | Windows 11 |
| SQL Server | SQL Server LocalDB |
| 管理ツール | SQL Server Management Studio(SSMS) |
| 接続先 | (LocalDB)\MSSQLLocalDB |
| 使用言語 | SQL |
環境構築ができていない場合は、以下を参考にしてください。
また、C#.NETで実行したい方は本記事と以下の記事を見ながら試行してみてください。
完成イメージ
この記事では、「Products」という商品管理用のテーブルを作成します。
Productsテーブルには、次の情報を保存します。
| カラム名 | 保存する内容 | データ型 |
|---|---|---|
| ProductId | 商品を識別する番号 | INT |
| ProductName | 商品名 | NVARCHAR(100) |
| Price | 商品価格 | INT |
| Stock | 在庫数 | INT |
| CreatedAt | 登録日時 | DATETIME2 |
最終的には、CREATE TABLEで作成したProductsテーブルへサンプルデータを登録し、SELECT文で内容を確認します。
作成後は、次のようなデータを確認できる状態を目指します。
| ProductId | ProductName | Price | Stock |
|---|---|---|---|
| 1 | ノートパソコン | 120000 | 5 |
| 2 | マウス | 3000 | 20 |
| 3 | キーボード | 8000 | 10 |
CREATEの実践
ここからは、SSMSを使用してデータベースとテーブルを順番に作成します。
作業は次の流れで進めます。
- 新しいクエリを開く
- データベースを作成する
- 使用するデータベースを切り替える
- テーブルを作成する
- テーブルの作成結果を確認する
- サンプルデータを登録する
- SELECT文でデータを確認する
新しいクエリを開く
まずは、SQLを入力するためのクエリエディターを開きます。
SSMS上部にある「新しいクエリ」をクリックしてください。
画面中央にSQLを入力できるエディターが表示されます。

クエリ画面の上部には、現在選択されているデータベース名が表示されます。接続直後は、masterデータベースが選択されている場合があります。
今回は新しいデータベースを作成するため、masterが選択された状態でも問題ありません。
CREATE DATABASEでデータベースを作成する
クエリに、次のSQLを入力します。
CREATE DATABASE CreateDB;入力後、SSMS上部の「実行」をクリックするか、F5キーを押してください。

「コマンドは正常に完了しました。」と表示されれば、CreateDBデータベースの作成は成功です。
SQLで確認する場合は、次の命令も使用できます。
SELECT name
FROM sys.databases
WHERE name = 'CreateDB';以下のようになっていれば、確認は完了です。

CREATEの基本構文を確認する
CREATE DATABASEの基本構文は次のとおりです。
CREATE DATABASE データベース名;今回のSQLでは、次のような指定をしています。
| 記述 | 意味 |
|---|---|
| CREATE | 新しいオブジェクトを作成する |
| DATABASE | 作成する対象がデータベースであることを指定する |
| CreateDB | 作成するデータベース名 |
使用するデータベースをCreateDBへ切り替える
次に、テーブルを作成するデータベースをCreateDBへ切り替えます。
USE CreateDB;USE文はこれからSQLを実行する対象データベースを指定する命令です。
USEを実行せずにCREATE TABLEを実行すると、選択されている別のデータベースにテーブルが作成される可能性があります。
現在選択されているデータベースの確認は左上の項目で確認できます。

SQLで確認することも可能です。
SELECT DB_NAME() AS CurrentDatabase;実行結果にCreateDBと表示されれば、データベースの切り替えは完了です。

CREATE TABLEでテーブルを作成する
CreateDBへ切り替えたら、Productsテーブルを作成します。
次のSQLを入力して実行してください。
CREATE TABLE dbo.Products
(
ProductId INT IDENTITY(1, 1) NOT NULL,
ProductName NVARCHAR(100) NOT NULL,
Price INT NOT NULL,
Stock INT NOT NULL CONSTRAINT DF_Products_Stock DEFAULT 0,
CreatedAt DATETIME2 NOT NULL
CONSTRAINT DF_Products_CreatedAt DEFAULT SYSDATETIME(),
CONSTRAINT PK_Products
PRIMARY KEY (ProductId)
);「コマンドは正常に完了しました。」と表示されれば、Productsテーブルの作成は成功です。

CREATE TABLEの基本構文は次のとおりです。
CREATE TABLE テーブル名
(
カラム名 データ型 制約,
カラム名 データ型 制約
);Productsテーブルでは、商品番号、商品名、価格、在庫数、登録日時を保存できるようにしています。
各カラムはカンマで区切り、最後のカラムまたは制約の後ろにはカンマを付けません。
テーブル名とスキーマを確認する
今回のSQLでは、テーブル名を次のように記述しています。
dbo.Productsdboはスキーマ名、Productsはテーブル名です。
スキーマは、データベース内のテーブルなどを整理するためのグループのようなものです。
| 記述 | 意味 |
|---|---|
| dbo | スキーマ名 |
| Products | テーブル名 |
| dbo.Products | スキーマを含めた正式なテーブル名 |
SQL Serverではテーブル名だけでも実行できる場合がありますが、実務ではスキーマ名を含めて記述する方法が一般的です。
SELECT *
FROM dbo.Products;スキーマ名を明示すると、どのテーブルを使用しているのかが分かりやすくなり、同名テーブルとの混同も防ぎやすくなります。
ProductIdの設定を確認する
ProductIdには、次の設定を指定しています。
ProductId INT IDENTITY(1, 1) NOT NULLそれぞれの意味は次のとおりです。
| 設定 | 意味 |
|---|---|
| INT | 整数を保存する |
| IDENTITY(1, 1) | 1から始まり、1ずつ自動で増加する |
| NOT NULL | NULLを許可しない |
IDENTITYを指定すると、データを登録するたびにProductIdが自動的に採番されます。
たとえば、最初のデータは1、次のデータは2、その次は3になります。
そのため、INSERT文でデータを登録するときは、ProductIdを指定する必要がありません。
ProductNameの設定を確認する
ProductNameには、次の設定を指定しています。
ProductName NVARCHAR(100) NOT NULLNVARCHARは、日本語を含む文字列を保存できるデータ型です。
括弧内の100は、保存できる最大文字数を表します。
NVARCHAR(100)この場合、最大100文字まで保存できます。
商品名には日本語を使用する可能性があるため、今回はNVARCHAR型を使用しています。
また、NOT NULLを指定しているため、商品名を未入力のまま登録することはできません。
PriceとStockの設定を確認する
PriceとStockには、INT型を指定しています。
Price INT NOT NULL,
Stock INT NOT NULL CONSTRAINT DF_Products_Stock DEFAULT 0Priceには商品の価格、Stockには商品の在庫数を保存します。
StockにはDEFAULT 0を設定しているため、INSERT文で在庫数を指定しなかった場合は、自動的に0が登録されます。
DEFAULT制約には、次の名前を付けています。
DF_Products_Stock制約名を付けずに作成することもできますが、SQL Serverが自動生成した名前は分かりにくくなることがあります。
実務では、あとから変更や削除をしやすくするために、制約へ分かりやすい名前を付ける方法がおすすめです。
CreatedAtの設定を確認する
CreatedAtには、データを登録した日時を保存します。
CreatedAt DATETIME2 NOT NULL
CONSTRAINT DF_Products_CreatedAt DEFAULT SYSDATETIME()DATETIME2は、SQL Serverで日付と時刻を保存するためのデータ型です。
DEFAULTにSYSDATETIME関数を指定しているため、INSERT文でCreatedAtを省略すると、SQL Serverが現在日時を自動登録します。
DEFAULT SYSDATETIME()DATETIME型も使用できますが、新しくテーブルを作成する場合は、扱える日付範囲や精度の面からDATETIME2を選択する方法があります。
必要な精度や既存システムとの互換性によって適切な型は異なるため、実際の開発環境に合わせて確認してください。
PRIMARY KEY制約を確認する
Productsテーブルには、ProductIdを主キーとして設定しています。
CONSTRAINT PK_Products
PRIMARY KEY (ProductId)
PRIMARY KEYは、テーブル内のデータを一意に識別するための制約です。
主キーに指定したカラムには、同じ値を重複して登録できません。
また、主キーにはNULLも登録できません。
今回のProductIdはIDENTITYによって自動採番されるため、商品ごとに異なる番号が設定されます。
制約名には、次の名前を付けています。
PK_ProductsPKはPRIMARY KEYを表す接頭辞として使用されています。命名規則はプロジェクトによって異なりますが、制約の種類と対象テーブルが分かる名前にすると管理しやすくなります。
作成したテーブルのカラムをSQLで確認する
テーブルのカラム情報は、次のSQLで確認できます。
SELECT
COLUMN_NAME,
DATA_TYPE,
CHARACTER_MAXIMUM_LENGTH,
IS_NULLABLE,
COLUMN_DEFAULT
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_SCHEMA = 'dbo'
AND TABLE_NAME = 'Products'
ORDER BY ORDINAL_POSITION;このSQLを実行すると、カラム名、データ型、最大文字数、NULLの許可、初期値を一覧で確認できます。

CREATE TABLEの実行後は、意図したデータ型や制約になっているか確認することが重要です。
特に、文字列の最大文字数やNULLの許可設定を間違えると、データ登録時のエラーにつながります。
SSMSの画面だけでなく、SQLからテーブル定義を確認する方法も覚えておくと便利です。
サンプルデータを登録する
テーブルを作成できたら、動作確認用のデータを登録します。
次のINSERT文を実行してください。
INSERT INTO dbo.Products
(
ProductName,
Price,
Stock
)
VALUES
(N'ノートパソコン', 120000, 5),
(N'マウス', 3000, 20),
(N'キーボード', 8000, 10);ProductIdとCreatedAtは自動的に設定されるため、INSERT文では指定していません。
文字列の前に付いているNは、日本語などのUnicode文字列として扱うための指定です。
N'ノートパソコン'NVARCHAR型へ日本語を登録する場合は、文字列の前にNを付ける方法を覚えておきましょう。
SELECT文で登録結果を確認する
最後に、Productsテーブルへ登録されたデータを確認します。
SELECT
ProductId,
ProductName,
Price,
Stock,
CreatedAt
FROM dbo.Products
ORDER BY ProductId;実行結果に3件の商品が表示されれば、テーブルの作成とデータ登録は完了です。

ProductIdには1から始まる連番が設定され、CreatedAtには登録時の日時が設定されます。実際のCreatedAtの値は、SQLを実行した日時によって異なります。
すべてのSQLをまとめて実行する
ここまでのSQLを最初からまとめて実行する場合は、次のコードを使用できます。
すでにCreateDBやProductsテーブルが存在する環境ではエラーになるため、初回実行用のSQLとして使用してください。
CREATE DATABASE CreateDB;
USE CreateDB;
CREATE TABLE dbo.Products
(
ProductId INT IDENTITY(1, 1) NOT NULL,
ProductName NVARCHAR(100) NOT NULL,
Price INT NOT NULL,
Stock INT NOT NULL CONSTRAINT DF_Products_Stock DEFAULT 0,
CreatedAt DATETIME2 NOT NULL
CONSTRAINT DF_Products_CreatedAt DEFAULT SYSDATETIME(),
CONSTRAINT PK_Products
PRIMARY KEY (ProductId)
);
INSERT INTO dbo.Products
(
ProductName,
Price,
Stock
)
VALUES
(N'ノートパソコン', 120000, 5),
(N'マウス', 3000, 20),
(N'キーボード', 8000, 10);
SELECT
ProductId,
ProductName,
Price,
Stock,
CreatedAt
FROM dbo.Products
ORDER BY ProductId;SQLを一括実行すると、データベース作成、テーブル作成、データ登録、検索結果の確認まで進められます。
ただし、エラーが発生した場所を特定しやすくするため、初心者のうちは手順ごとに分けて実行する方法がおすすめです。
よくあるエラー・注意点
CREATE文では、同名オブジェクトの重複やデータベースの選択間違いがよく発生します。
エラーが出た場合は、エラーメッセージだけでなく、現在選択しているデータベースと既存オブジェクトを確認してください。
| エラー・症状 | 主な原因 | 対処法 |
|---|---|---|
| LocalDBへ接続できない | サーバー名が間違っている | (localdb)\MSSQLLocalDBになっているか確認する |
| 証明書に関するエラーが表示される | SSMSの暗号化設定と証明書が一致していない | 接続オプションで「サーバー証明書を信頼する」を確認する |
| データベースが表示されない | オブジェクトエクスプローラーが更新されていない | 「データベース」を右クリックして最新の情報に更新する |
| データベースがすでに存在すると表示される | CREATE DATABASEを複数回実行した | 既存のSampleDBを使用するか、別名で作成する |
| テーブルがすでに存在すると表示される | CREATE TABLEを複数回実行した | 既存テーブルを使用するか、削除後に再作成する |
| Productsテーブルが見つからない | SampleDB以外を選択している | USE SampleDBを実行する |
| CREATE TABLEで構文エラーになる | カンマや括弧が不足している | 各カラム間のカンマと最後の閉じ括弧を確認する |
| 文字列が文字化けする | VARCHARを使用している、またはNを付けていない | NVARCHARを使用し、文字列をN付きで記述する |
| NULLを挿入できない | NOT NULLのカラムを省略している | 必須カラムに値を指定するかDEFAULTを設定する |
| データベースを作成する権限がない | 接続ユーザーにCREATE DATABASE権限がない | 権限のあるユーザーを使用する。環境管理者への確認が必要 |
| 同じ制約名が存在すると表示される | 同一データベース内で制約名が重複している | テーブル名を含む一意な制約名へ変更する |
「データベースが既に存在します」と表示される
CREATE DATABASEを複数回実行すると、同じ名前のデータベースを再作成しようとしてエラーになります。
Database 'CreateDB' already exists.この場合、CreateDBがすでに作成されている可能性があります。
次のSQLで存在を確認してください。
SELECT name
FROM sys.databases
WHERE name = 'CreateDB';すでに存在する場合は、CREATE DATABASEを再実行せず、そのままUSE文で切り替えます。
USE CreateDB;学習用に作り直す場合はDROP DATABASEで削除できますが、データベース内のテーブルやデータもすべて削除されます。
実際の業務環境では、管理者の許可なく実行しないでください。
「データベースにオブジェクトが既にあります」と表示される
CREATE TABLEを複数回実行すると、次のようなエラーが表示されます。
There is already an object named 'Products' in the database.これは、Productsという名前のオブジェクトがすでに存在していることが原因です。
次のSQLでテーブルの存在を確認できます。
SELECT
OBJECT_ID(N'dbo.Products', N'U') AS ObjectId;NULL以外の値が表示された場合、Productsテーブルは存在しています。
作り直す場合はDROP TABLEを使用できます。
DROP TABLE dbo.Products;ただし、DROP TABLEを実行するとテーブル内のデータも削除されます。必要なデータがないことを確認してから実行してください。
テーブルが別のデータベースに作成された
CREATE TABLEを実行する前にUSE文を実行していない場合、masterなど別のデータベースにテーブルが作成される可能性があります。
現在のデータベースは、次のSQLで確認できます。
SELECT DB_NAME() AS CurrentDatabase;CREATE TABLEを実行する前に、結果がCreateDBになっていることを確認してください。
USE CreateDB;SSMS上部のデータベース選択欄から切り替えることもできますが、SQLファイル単体でも対象が分かるように、USE文を明示する方法が安全です。
特に複数のデータベースを扱う環境では、実行先の確認を習慣化してください。
カンマの位置が原因で構文エラーになる
CREATE TABLEでは、カラムとカラムの間にカンマが必要です。
次のSQLは、ProductNameの後ろにカンマがないためエラーになります。
CREATE TABLE dbo.Products
(
ProductId INT NOT NULL,
ProductName NVARCHAR(100) NOT NULL
Price INT NOT NULL
);正しくは次のとおりです。
CREATE TABLE dbo.Products
(
ProductId INT NOT NULL,
ProductName NVARCHAR(100) NOT NULL,
Price INT NOT NULL
);一方で、最後のカラムの後ろに不要なカンマを付けると、環境や記述によって構文エラーになります。
カラム間にはカンマを付け、最後には付けないと覚えておきましょう。
エラー位置として表示された行と、実際に間違っている行が異なる場合もあるため、エラー行の直前も確認してください。
データ型の選び方に注意する
カラムのデータ型は、保存する値に合わせて選択する必要があります。
| 保存する値 | データ型の例 |
|---|---|
| 整数 | INT |
| 大きな整数 | BIGINT |
| 日本語を含む文字列 | NVARCHAR |
| 日付と時刻 | DATETIME2 |
| 日付のみ | DATE |
| 小数 | DECIMAL |
| 真偽値 | BIT |
金額を保存する場合、整数だけでよければINTを使用できます。
小数を扱う場合は、次のようにDECIMAL型を使用します。
Price DECIMAL(10, 2) NOT NULLFLOATは近似値を扱うデータ型であるため、金額のように正確さが必要な値では注意が必要です。
保存する値の範囲と必要な精度を考えてデータ型を選んでください。
あとからデータ型を変更すると既存データへ影響する可能性があるため、テーブル作成前の設計が重要です。
DROP文の実行には注意する
学習中にテーブルやデータベースを作り直す場合、DROP文を使用することがあります。
DROP TABLE dbo.Products;
DROP DATABASE CreateDB;DROP文を実行すると、対象のテーブルやデータベースが削除されます。
削除されたデータは通常の操作では元に戻せません。
特にDROP DATABASEは、データベース内のテーブル、データ、制約などをまとめて削除します。
学習用環境であっても、実行前に対象名と接続先を確認してください。業務環境では、バックアップや管理者の承認が必要になる場合があります。
まとめ
この記事では、SQL Server LocalDBとSSMSを使用し、CREATE文でデータベースとテーブルを作成しました。
CREATE文は、データを登録する前に必要となるデータベースの構造を定義する命令です。
今回のポイントは次のとおりです。
- CREATE DATABASEでデータベースを作成できる
- USE文でSQLを実行するデータベースを切り替える
- CREATE TABLEでテーブルとカラムを定義できる
- データ型は保存する値に合わせて選択する
- PRIMARY KEYでデータを一意に識別する
- NOT NULLやDEFAULTで登録できる値のルールを決める
- CREATE文を再実行すると、同名オブジェクトの重複エラーになる
- 実行後はSSMSまたはSQLで作成結果を確認する
CREATE TABLEでは、単にカラム名を並べるだけでなく、データ型や制約を適切に設定することが重要です。
特に、主キー、NULLの許可、初期値、文字列の最大長は、テーブル作成時に確認しておきましょう。
CREATE文を理解したあとは、INSERT文でデータを登録し、SELECT文で取得する方法を学ぶと、SQLの基本的な流れを理解しやすくなります。

サイトアイコン-2-150x150.png)