SQLで「テーブル作成」を行う:「データベーススペシャリスト試験」戦略的学習のススメ(16)(1/3 ページ)
あの“津崎さん”も保有する難関資格「データベーススペシャリスト」。本企画では、データベーススペシャリスト試験 午前/午後試験対策のための「基礎知識」を抜粋してお届けします。今回は、「SQLでのテーブル作成の基礎」を解説します。
書籍の中から有用な技術情報をピックアップして紹介する本シリーズ。今回は、秀和システム発行の書籍ポケットスタディ データベーススペシャリスト [第2版](2015年12月22日発行)』からの抜粋です。
ご注意:本稿は、著者及び出版社の許可を得て、そのまま転載したものです。このため用字用語の統一ルールなどは@ITのそれとは一致しません。あらかじめご了承ください。
※編集部注:前回記事「SQLで「データ追加/更新/削除」を行う」はこちら
SQLによるテーブル作成
出題頻度 午前II:●●- 午後I:●-- 午後II:●--
●--:過去14年間での過去問出題数が1〜9回
●●-:過去14年間での過去問出題数が10〜19回
●●●:過去14年間での過去問出題数が20回以上
Key Word
●CREATE TABLE文、データ型、制約条件、制約条件によるデータ操作の制限、参照制約のオプション、CASCADE、CONSTRAINT、午後演習、DROP TABLE
SQLには、データ定義言語(DDL : Data Definition Language)とデータ操作言語(DML : Data Manipulation Language)の2種類があります。
ここではデータ定義言語について説明します。
CREATE TABLE文によるテーブル作成
以下はCREATE TABLE文の基本使用方法です。必要な列の数だけ「列名 データ型 [列制約]」を「,」で区切りながら繰り返し記述し、テーブルを作成します。同時に、列やテーブルの制約も作成します。
構文 | CREATE TABLE テーブル名 (列名 データ型 (データ長) [列制約], ・・・, ・・・, [テーブル制約]) |
---|---|
テーブル名 | 作成するテーブルの名前を定義 |
列名 | テーブルの列を定義 |
データ型 | 列のデータ型を定義【→後述「データ型の定義」】 |
データ長 | 列のデータの長さを指定【→後述「データ型の定義」】 |
列制約 | 列制約を定義【→後述「制約条件の定義」】 |
テーブル制約 | テーブル制約を定義【→後述「制約条件の定義」】 |
制約条件には、列の定義毎に末尾に記述する「列制約」と、テーブル定義全体の末尾に記述する「テーブル制約」がありますが、ほぼ同じ制約をどちらの記述で表現することもできますので、表現方法が2種類あると考えて下さい。
データ型の定義
CREATE TABLE文では、以下のデータ型を利用することができます。
区分 | データ型 | 内容 | |
---|---|---|---|
整数 | INTEGER | 整数値(- 2,147,483,648 〜+ 2,147,483,647) | |
NUMERIC | 小数点を含む整数。DECIMAL でも可能。 | ||
文字列 | CHAR | 固定長の文字列 | |
VARCHAR | 可変長の文字列 | ||
日付 | DATE | 日付 | |
TIMESTAMP | 日付と時刻 | ||
※NUMERIC(n, m)と指定すれば、全体でn桁、小数部がm桁という意味になります |
制約条件の定義
CREATE TABLE文では、以下の制約条件や初期値を利用することができます。
区分 | 制約 | 構文 | 説明 | |
---|---|---|---|---|
初期値 | - | DEFAULT ‘2405’ | 初期値を「2405」に設定 | |
DEFAULT NULL | 初期値をNULL に設定 | |||
非NULL制約 | 列制約 | NOT NULL | 該当列はNULL 値が入らないという制約条件を設定 | |
一意性制約 | 列制約 | UNIQUE | 該当列は同じ値が複数入らないという制約条件を設定 | |
テーブル制約 | UNIQUE(列名) | |||
主キー制約 | 列制約 | PRIMARY KEY | 主キーを設定(該当列は同じ値が複数入らず、NULL値も設定できない) | |
テーブル制約 | PRIMARY KEY(列名,・・・) | |||
検査制約 | 列制約 | CHECK(列名<100) | 括弧内に指定した条件に合致する値しか入らない(括弧内に列名を用いた条件を指定) | |
テーブル制約 | ||||
参照制約 | 列制約 | REFERENCESテーブル名(列名) | 該当テーブルの該当列を参照する外部キーを設定 | |
テーブル制約 | FOREIGN KEY(列名) REFERENCES テーブル名(列名) |
FOREIGN KEY(列名)で示す列に、該当テーブルの該当列を参照する外部キーを設定 | ||
※初期値を設定しておくと、行の追加時に値を指定しなくても初期値が設定されます |
以上を踏まえ、テーブル定義の例を示します。ここでは主キーと外部キーを「列制約」で記述しています。
テーブル定義の例 | 各行の意味 | |
---|---|---|
CREATE TABLE 社員 ( 社員番号 CHAR(6) PRIMARY KEY, 社員名 CHAR(20) NOT NULL, 血液型 CHAR(2) DEFAULT NULL, 所属部門番号 CHAR(4) REFERENCES 部門(部門番号)) |
・社員テーブルを定義 ・社員番号を主キーに設定 ・社員名はNULL 不可 ・血液型の初期値はNULL ・ 所属部門番号を、部門テーブルの「部門番号」列を参照する外部キーに設定 |
主キーと外部キーを、「テーブル制約」で記述すると次のようになります。
テーブル定義の例 | 各行の意味 | |
---|---|---|
CREATE TABLE 社員 ( 社員番号 CHAR(6) NOT NULL, 社員名 CHAR(20) NOT NULL, 血液型 CHAR(2) DEFAULT NULL, 所属部門番号 (CHAR(4), PRIMARY KEY ( 社員番号) FOREIGN KEY ( 所属部門番号) REFERENCES 部門 (部門番号)) |
・社員番号を主キーに設定 ・所属部門番号を、部門テーブルの「部門番号」列を参照する外部キーに設定 |
参照制約によるデータ操作の制限
参照制約(外部キー)を設定すると、整合性を守るため、データ操作時に次のような制限がかかります。制限に反する処理はエラーとなります。
よって、データを削除する場合は「社員テーブル」から、データを追加する場合は「部門テーブル」から順に行わなければなりません。
参照制約のオプション
以下の例のように、外部キーに対してCASCADEやSET NULLなど参照制約のオプションを設定すると、参照関係にあるデータを更新・削除する際にまとめて処理することができます。
参照制約のオプションは、次のように外部キーの定義の直後に記述します。
CREATE TABLE 社員 (社員番号 CHAR(6) PRIMARY KEY 所属部門番号 CHAR(4) REFERENCES 部門(部門番号) ON DELETE CASCADE)
CREATE TABLE 社員 (社員番号 CHAR(6) PRIMARY KEY 所属部門番号 CHAR(4) FOREIGN KEY (所属部門番号) REFERENCES 部門(部門番号) ON DELETE CASCADE)
CONSTRAINTによる制約名の付与
以下の例のように、列制約やテーブル制約の指定の直前にCONSTRAINTを利用すると、その制約に名前を付けることができます。名前を付けると、ALTER TABLEにより、名前を指定して制約を削除することができます。
CREATE TABLE 社員 (社員番号 CHAR(6) CONSTRAINT 社員テーブル主キー PRIMARY KEY)
Copyright © ITmedia, Inc. All Rights Reserved.
関連記事
- 春期試験の押さえどころを総ざらい!
本連載では、テクニカルエンジニア(データベース)試験に対応できる知識を確認していきます。多岐にわたる知識が問われる試験ですので、受験する方はもちろん、日常業務ではあまり使うことのない技術知識の確認にも役立ててください。 - データベーススペシャリスト試験(Database Specialist Examination)
ITエンジニアに必要な各種資格情報を解説する「@IT自分戦略研究所 資格辞典」。今回は、IPAが実施する情報処理技術者試験の「高度試験」9区分のうちの一つ「データベーススペシャリスト試験」を紹介する。 - 真のデータベースエンジニアを目指そう!
本連載は、ITシステム開発の現場でプログラミングやSQLのコーディングを行っているエンジニア(データベース利用者)が、データ管理者(DA)やデータベース管理者(DBA)へステップアップするための第一歩として有効な基礎知識を紹介する(編集局) - 【Oracle Database】忘れていませんか? 「アラートログ調査」に必要な、たった3つのキホン
データベース管理システムの運用でトラブルが発生したらどうするか。データベースサポートスペシャリストが現場目線の解決Tipsをお届けします。今回は基本編として「アラートログの調査で押さえるべき3つのポイント」を解説します。【Oracle Database 12c対応版】