■サンプルファイルのダウンロードについて
本書掲載のサンプルファイルは、一部を除いてインターネット上のダウンロードサービスからダウンロードすることができます。詳しい手順については、本書の巻末にある袋とじの内容をご覧ください。
なお、ダウンロードサービスのご利用にはユーザー登録と袋とじ内に記されている番号が必要です。そのため、本書を中古書店から購入されたり、他者から貸与、譲渡された場合にはサービスをご利用いただけないことがあります。あらかじめご承知おきください。

・本書の内容についてのご意見、ご質問は、お名前、ご連絡先を明記のうえ、小社出版部宛文書（郵送または E-mail）でお送りください。
・電話によるお問い合わせはお受けできません。
・本書の解説範囲を越える内容のご質問や、本書の内容と無関係なご質問にはお答えできません。
・匿名のフリーメールアドレスからのお問い合わせには返信しかねます。
本書で取り上げられているシステム名／製品名は、一般に開発各社の登録商標／商品名です。本書では、™ および ® マークは明記していません。本書に掲載されている団体／商品に対して、その商標権を侵害する意図は一切ありません。本書で紹介している URL や各サイトの内容は変更される場合があります。

はじめに
本書では、リレーショナル・データベースの作成、管理、問い合わせ、更新のために広く利用されている SQL（Structured Query Language）の使い方を解説します。SQL は、ISO（国際標準機構）により標準化が行われてるデータベース言語で、市販、フリーの RDBMS（リレーショナル・データベース管理システム）の多くが、この言語をサポートしています。
つまり、RDBMS を使ったプログラムを書きたい場合には SQL の知識が必
要 不 可 欠 と な る わ け で す。 逆 に 考 え れ ば、SQL さ え 覚 え て し ま え ば、RDBMS を使いこなすことができることになります。
このように、SQL は、データベースアプリケーション開発の現場では必須であり、データベースアプリケーションを作成しようと思っているプログラマはぜひ覚えておくべき言語です。
本書では、これから SQL を覚えたいという初心者を対象に、SQL の基礎を詳しく解説します。また、「習うより慣れろ」ということで、SQL を入力し、直接実行結果が確認できる SQL トレーニングアプリケーション“SQLトレーナー”を用意し、これを使った実践的な学習に力を入れた構成となっています。
“SQL トレーナー”を利用して「実践問題」と「練習問題」を実行しながら解いていくことで、自然と SQL の基礎を身につけることができるでしょう。
本書が、SQL を学習する読者の方々にとって、お役に立てればと願っています。

はじめて SQL の入門書を書いたのは 1999 年の 4 月で、既に 20 年以上たちます。この間に Windows XP、Windows Vista、Windows 7、8、10、11 と OS 自体も変わってきました。これにあわせて SQL トレーナーも何度か更新しており、Windows 11 でも一応動作しています。トレーナーを使って楽しく SQL を学んでいただければ幸いです。

iii

〔本書の構成〕
本書は、以下のような構成になっています。
■第 1 章データベースの基礎について説明します。

■第 2 章リレーショナル・データベースの基礎について説明します。

■第 3 章SQL とリレーショナル・データベースの関係について説明します。
SQL の言語仕様について簡単な例を挙げながら説明しま■第 4 章す。ここでは、標準 SQL でサポートされている SQL 全般について説明します。
SQL トレーナーのインストール方法および使用方法につい■第 5 章て説明します。
■第 6 章演習問題を実際に解きながら、SQL を使ったデータベース■第 7 章演習問題を実際に解きながら、SQL を使ったデータ検索にの作成について学習します。
ついて学習します。
演習問題を実際に解きながら、SQL を使ったデータの挿入■第 8 章と更新・削除について学習します。
埋め込み SQL など、第 1 章〜第 8 章までで取り上げなかっ■第 9 章たその他の SQL について説明します。
第 6 章、第 7 章、第 8 章の演習問題はすべて SQL トレーナーで実行することができます。

〔構文の表記〕本書では、以下の表記を用いて構文を記しています。
[ ]省略可能な部分[ ] の表記例DELETE FROM 表名 [WHERE 検索条件]
上記の例は、WHERE 句以降は省略可能という意味です。

iv

< >

省略可能な部分< > の表記例

CREATE SCHEMA スキーマ名
AUTHORIZATION 所有者識別子[<定義域定義> <表定義> <ビュー定義> <権限定義>]
上記の例は、3 行目の定義域定義、表定義、ビュー定義、権限定義は省略可能という意味です。
A | B

A または B が表記可能

A ¦ B の表記例

SELECT {* | 列名リスト} FROM 表名リスト
上記の例は、* または列名リストが表記可能という意味です。
A or B

A または B が表記可能

A or B の表記例

DEFAULT NULL or 定数
上記の例は、NULL または定数が表記可能という意味です。
A := B

A は B から構成される

A := B の表記例

列名リスト := 列名 <,列名> ... <,列名>
上記の例は、列名リストは列名または複数の列名から構成されるという意味です。
同じ意味の表記が複数ありますが、これは SQL 構文を見やすくするために使い分けているだけで、意味的な違いはありません。

v

〔記号の説明〕
本書では、コメントや注意事項などに以下の記号を用いています。

補足説明およびコメントです。
重要な注意事項です。

vi

入力

入力する SQL 文です。

出力実行した SQL 文の出力結果です。

も く じはじめに.............................................................................................................................. iii

第第第第1 章 データベース基礎........................................... 1
1-1

データベースの検索.................................................................................2

1-2

データモデル............................................................................................3

1-3

データベースの種類.................................................................................4

2 章 リレーショナル（関係）・データベース............. 7
2-1

リレーショナル・データベースの概要..................................................82-2

リレーショナル・データベースの構造..................................................82-3

ベーステーブルとビュー......................................................................113 章 リレーショナル・データベースと SQL.......... 133-1

リレーショナル・データベース言語...................................................14

3-2SQL.......................................................................................................144 章 SQL 基礎知識............................................ 19
4-1

データベースの定義（作成）................................................................20
4-1.1 スキーマ定義

20

4-1.2 表（テーブル）定義
4-1.3 ビュー定義

2123vii

4-1.4 規定値の定義

244-1.5 主なデータ型

25

4-1.6 表の削除

264-1.7 列の追加／削除

4-226

整合性制約.............................................................................................27
4-2.1 整合性制約とは4-2.2 一意性制約

274-2.3 参照制約

284-2.4 検査制約

294-2.5 定義域制約
4-2.6 表明

4-34-42730

31

正規化....................................................................................................32
4-3.1 正規化とは

32

4-3.2 第一正規形

33

4-3.3 第二正規形

34

4-3.4 第三正規形

36

データベースの検索（1 つの表に対する検索）..................................37
4-4.1 問い合わせ
4-4.2 射影394-4.3 選択40374-4.4 集合関数（集約関数）

4-5

データベースの検索（複数の表に対する検索）..................................43
4-5.1 結合434-5.2 和集合

444-5.3 差集合

454-5.4 共通集合

46

4-5.5 副問い合わせ

4-64-7viii

4246

データベースの更新..............................................................................49
4-6.1 行の挿入

49

4-6.2 表の更新

51

4-6.3 行の削除

51

トランザクション.................................................................................52

第5 章 SQL 学習アプリケーションの使い方............. 55
5-1

SQL トレーナーの概要........................................................................56

5-2

インストール.........................................................................................56
5-2.1 インストール手順

56

5-2.2 Firebird のインストール

57

5-2.3 SQL トレーナーのインストール（インストーラ利用）
5-2.4 SQL トレーナーのインストール（圧縮ファイルの利用）
5-2.5 アンインストール手順

5-3

SQL トレーナーの使い方....................................................................68
5-3.2 SQL トレーナーの起動

68
70

5-3.3 SQL トレーナー機能説明

73

5-3.4 SQL トレーナーの初期化

775-3.5 SQL 文の実行

第66

66

5-3.1 Firebird のパスワード変更

5-464

78

用意されている例題データベース.......................................................81

6 章 SQL 実践演習 〜その 1 〜 —— データベースの作成..... 87◆実践問題 1

テーブルの作成 #188

◆実践問題 2テーブルの作成 #290

◆実践問題 3

表への列の追加と削除（基本）92◆実践問題 4

表への列の追加と削除（応用）94◆実践問題 5

主キーの設定◆実践問題 6ドメインの作成100◆実践問題 7テーブルの削除

102

98ix

第7 章 SQL 実践演習 〜その 2 〜 —— データ検索...........105◆実践問題 1表の問い合わせ106◆実践問題 2

特定の列の取り出し（射影）◆実践問題 3行の選択（比較）◆実践問題 4行の選択（BETWEEN）◆実践問題 5行の選択（LIKE）◆実践問題 6行の選択（IN）◆実践問題 7複合条件による問い合わせ #1120◆実践問題 8複合条件による問い合わせ #2122◆実践問題 9集合関数（総和）123◆実践問題 10 集合関数（平均）

126

112
114

116
118

◆実践問題 11 集合関数（最大と最小）◆実践問題 12 集合関数（総数）◆実践問題 13 表の結合

109

127

129130◆実践問題 14 表の結合と射影133◆実践問題 15 表の結合と選択 #1135◆実践問題 16 表の結合と選択 #2138◆実践問題 17 表の結合と選択 #3141◆実践問題 18 表の結合と選択 #4143◆実践問題 19 表の和集合146◆実践問題 20 副問い合わせ（比較）148◆実践問題 21 副問い合わせ（IN）

151◆実践問題 22 副問い合わせ（ALL）

154◆実践問題 23 副問い合わせ（SOME と ANY）
◆実践問題 24 副問い合わせ（EXISTS）◆実践問題 25 射影と定数160◆実践問題 26 射影と算術演算式◆実践問題 27 列名の変更

165◆実践問題 28 グループ化 #1

166◆実践問題 29 グループ化 #2

170◆実践問題 30 ソートx

163

171

◆実践問題 31 ビューの作成

173◆実践問題 32 ビューの削除

175

157

156

第第SQL 実践演習 〜その 3 〜
8 章 ——
データ挿入と更新・削除／トランザクション................ 179◆実践問題 1

1 行の挿入180◆実践問題 2

複数行の挿入◆実践問題 3

1 行の更新◆実践問題 4

複数行の更新◆実践問題 5

1 行の削除

◆実践問題 6

複数行の削除

◆実践問題 7

トランザクション #1：ロールバック◆実践問題 8

トランザクション #2：コミット◆実践問題 9

トランザクション #3：複数アプリからの更新

183
185189191193195
199
202

9 章 その他の SQL.......................................... 205
9-1

埋め込み SQL....................................................................................206

9-2

カーソル.............................................................................................2089-3

標準 SQL............................................................................................211

9-4

ロック.................................................................................................212

9-5

分散型データベース...........................................................................213

9-6

データウェアハウス...........................................................................213

付録 A

データベース用語集.................................................... 215

付録 B

ダウンロードサービスについて................................. 219
B-1

ダウンロードサービスのファイルの内容

B-2

SQL トレーナーについて

220

B-3

利用制限および注意事項

221

219

あとがき.........................................................................................................................222
さくいん.........................................................................................................................223

xi

第1章

データベース基礎

第1章

データベース基礎

1-1 データベースの検索
データを効率よく管理／蓄積する手段としてデータベースは登場しました。データベースの登場により、私たちはデータを簡単に管理することができるようになり、企業においては、社員名簿、勤務管理、仕入れ／受注管理などが情報化され事務の合理化が図られました。現在、データベースは企業にとって、情報戦略を左右するといっても過言ではないくらい重要な存在となっています。
また、企業だけでなく家庭でもデータベースは使われるようになってきています。パソコンの住所録ソフトなどは身近なデータベースの典型例ではないでしょうか。
では、データベースは具体的にどのような仕事（処理）を行うものなのでしょうか？

わかりやすくいえば、データベースはデータの蓄積と、蓄積されたデータの操作に必要な仕事のほとんどを行うものです。データ管理だけではなく、データ検索を高速にできるようにするのもデータベースの重要な仕事の 1 つです。
多くのデータベースは、アプリケーションから独立したシステムとしてデータの管理を行うように設計されているので、同じデータを複数のアプリケーションで共有することが可能です。例えば、顧客管理データベースで管理される顧客の住所データを、年賀状印刷に利用するなどといったことができるのも、データがアプリケーションとは別個に管理されているからこそ可能になるのです※。
このアプリケーションから独立なデータベース管理を行うシステムを、DBMS（DataBase Management System：データベース管理システム）と呼びます。アプリケーションは DBMS を介してデータにアクセスします。ア
プリケーションを設計／作成するプログラマは、DBMS へのアクセス方法さえ知っていれば、実際のデータがどのように記録されているかは考えなくてもよいわけです。これが、DMBS を利用する大きな利点です。
このような DBMS としては商用では Oracle 社の Oracle、オープンソー
スでは MySQL や PostgreSQL などが有名です。

2※当 然 で す が、 デ ー
タベースのアクセス方法が公開されていない場合には、データベースを複数のアプリケーションで共有することはできません。

1-2

データ図 1.1DBMS

アプリケーション

データモデル

利用者

データベースの概念図

1-2 データモデル
データベースを設計する場合には、データベースで取り扱うデータの表現手段、データの操作方法、データの矛盾の排除などを目的としてデータモデルの作成を行う必要があります。データモデルは、表現の段階により、概念データモデル、論理データモデル、そして物理データモデルの 3 つに分けられます。データベースの設計時には、上記の順にデータモデルを作成していきます。
以下に、各データモデルの概要を示します。
（1）概念データモデル
対象世界を自然に表現したモデルです。そのまま DBMS に対応させることはできませんが、DBMS との依存関係がないため、汎用的なモデルとなります。
（2）論理データモデル
概念データモデルをもとにして DBMS の特性を考慮したモデルです。このモデルからは DBMS への依存関係が存在します。
（3）物理データモデル
DBMS に関連した物理的な記録方式や記録構造までを含めて表現したモデルです。

3

第1章

データベース基礎

1-3 データベースの種類
一言にデータベースといっても、データの管理方法によってカード型データベース、リレーショナル（関係）・データベースなど、いくつかの種類に分類することができます。これらの分類は、1-2 節で紹介したデータモデルの中の、論理データモデルの作成において行われるもので、以下の4 つのモデルに大別されています。
（1）階層モデル
データ間の関係を組織図のように木構造で表現するモデルです。このモデルでは、データは親レコードと子レコードにより構成されます。なお、データの操作はこの親子関係に従って行う必要があります。
（2）ネットワークモデル
階層モデルと同じく、一対多の親子関係を基本にしたモデルです。階層モデルと異なるのは、子レコードが親レコードを複数もつことができることです。ネットワークモデルの代表的なものは、CODASYL が作成した仕様のデータベースです。CODASYL は COBOL 言語の標準化で有名な委員会です。また、このモデルのデータベースとしては、マルチメディア情報を管理するハイパーメディア・データベースなどがあります。
（3）関係モデル（リレーショナル・モデル）
1970 年に E. F. Codd が発表したモデルで、列と行からなる表で表現されるのがこの関係モデルです。階層モデルとネットワークモデルでは、レコードの関係をレコード間のリンクに付与する形で保存するのに対し、関係モデルでは列の値（共通の値をもつ列）により関係付けるという特徴があります。

4

1-3

（1）階層モデル

データベースの種類（2）ネットワークモデル（3）関係モデル（リレーショナル・モデル）
列
行

図 1.2

データベースの種類（4）オブジェクトデータモデル
オブジェクト指向のモデルに基づいたオブジェクト指向型のデータベースです。オブジェクト指向モデルは、これまでのモデルに代わる新しい世代のモデルで、従来では扱いにくかった複雑な構造のデータや画像／音声といったマルチメディアデータも容易に扱うことができます。また、オブジェクト指向データベースでは、オブジェクト指向言語などと同じように、属性とメソッドをもつオブジェクトに対してメッセージを送ることでオブジェクトの操作を行うという基本的な概念に基づいて設計されています。
一般的に利用されているデータベースは、カード型データベース（NOTE参照）とリレーショナル・データベースでしょう。特にリレーショナル・デー
タベースは、パソコン上のアプリケーションソフトとしてのデータベースからクライアント・サーバー型の大規模データベースまで、広い範囲で利用されています。次章では、このリレーショナル・データベースについて説明します。

5

第1章

データベース基礎

ここで紹介したモデル以外に、カード型データモデルというものがあります。これは住所録のようなある構造をもったレコード単位でデータを管理するものです。設計が簡単という利点がありますが、重複データの発生によるデータベースの容量の増加や、検索効率などの欠点もあります。

6

第2章

リレーショナル（関係）・データベース

第2章

リレーショナル（関係）・データベース

2-1 リレーショナル・データベースの概要
リレーショナル・データベースは関係モデル（リレーショナル・モデル）に基づいて表形式でデータを取り扱うデータベースです。リレーショナル・モデルでは、データは列と行からなる表により表現されます。行は 1 つの物（事）に対するデータの集まりで、列は表中で一意な名前をもつ属性となります。住所録を例にして説明すれば、「○×さんの情報」が 1 行にあたり、「電話番号」「名前」「住所」などの住所録の中の各項目が列となります。
また、データの関係は表の行と列の関係により表現されます。なお、リレーショナル・データベースでは、このような表や表の集まりをデータベースと呼びます。
リレーショナル・データベースは表形式でデータを取り扱うと説明しま
したが、これは論理的な構造のことであり、ディスクなどの記録媒体に記録される形式が表形式であるというわけではありません。
「利用者からは表形式に見える（表形式でアクセスできる）」データベースであればリレーショナル・データベースと呼ばれます。
利用者からは表として見えるわけですから、当然、表として利用することができます。利用者は、データが物理的にどのような形式で保存されているのかを知る必要がありません。このように、「利用者が物理的なデータ構造を意識せず表としてアクセスできる」ことを、物理的なデータ構造からの独立性を保証しているといいます。

2-2 リレーショナル・データベースの構造
リレーショナル・データベースでは、表中でお互いに関係するデータ要素の集合を行（ロウ）、同じ属性のデータ要素の集合を列（カラム）と呼びます。なお、リレーショナル・モデルでは、表のことをリレーション、行のことをタプル、列のことをアトリビュートと呼びます。また、いくつかの RDBMS では、行のことをレコード、列をフィールドと呼びます。これ

8

2-2

リレーショナル・データベースの構造らの対応については、表 2.1 にまとめましたのでそちらを参考にしてください。なお、本書の以降のページでは、SQL の用語にあわせて「行」と「列」と表記することにします。
主キー

行（ロウ）

列（カラム）

社員番号

名前

ヨミ

住所

電話番号

0001

赤岩 圭吾

アカイワ ケイゴ

東京都 **

03-****-****

0002

岩下 つとむイワシタ ツトム

東京都 **

03-****-****

0003

上田 健二

ウエダ ケンジ

東京都 **

03-****-****

0004

木下 順平

キノシタ ジュンペイ

東京都 **

03-****-****

0005

坂田 圭吾

サカタ ケイゴ

東京都 **

03-****-****

0006

野村 伸治

ノムラ シンジ

東京都 **

03-****-****

図 2.1

リレーショナル・データベース

DBMS（データベース・マネージメント・システム）のうち、リレーショ
ナ ル・ デ ー タ ベ ー ス に 対 す る も の を 特 に RDBMS（RelationalDataBase Management System、リレーショナル・データベース管理システム）と呼びます。

表 2.1

用語一覧

リレーショナル・モデル

SQL（実装レベル）

ファイルシステム

リレーション＜関係＞表＜テーブル＞

ファイル

タプル

＜組＞

行＜ロウ＞

レコード

アトリビュート＜属性＞

列＜カラム＞

フィールド

リレーショナル・データベースの表において、行を一意に識別するための列を一意識別子または主キーと呼びます。
“主キーが同じ”行が表中に存在することは許されていませんので、主キーをもつ表においては、“すべての列の内容が同じ”行は存在しないことになります（主キーは必ず異なります）。例えば住所録のデータベースで、「名前」を主キーとした場合には、同じ名前の人が住所録に 2 人存在することは許されなくなります。名前が9第2章

リレーショナル（関係）・データベース

同じ人が存在しなければ、すべての行は必ず「名前」が違うということになりますので、同じ行が存在しなくなるわけです。
また、リレーショナル・データベースでは、平坦な二次元の表だけしか取り扱うことができません。例えば、表 2.2 のように一人が複数の資格をもつような表は平坦な二次元の表ではありません。このような表をリレーショナル・データベースで取り扱うには、表 2.3 のような表に変換する必要があります。表 2.3 の表では、各行の列の値はそれぞれ 1 つだけの平坦な表となります。なお、このような表に対する操作は正規化と呼ばれます。
また、ここでの正規化により導出される表を特に第一正規形の表と呼びます。
表 2.2

リレーショナル・データベースで取り扱えない表

社員番号

氏名

資格

1000

伊藤

英検 3 級

1001

上田

簿記

普通免許

普通免許
情報処理技術者 2 種

表 2.310平坦化された表

社員番号

氏名

資格

1000

伊藤

英検 3 級1000

伊藤普通免許

1001

上田

簿記

1001

上田

普通免許

1001

上田

情報処理技術者 2 種2-3ベーステーブルとビュー

2-3 ベーステーブルとビューリレーショナル・データベースの表には、物理的な記憶装置に存在するベーステーブル（実表）と、物理的な記憶装置の中には存在しないビュー（視点）と呼ばれる表があります。ビューは、ベーステーブルから作成される表で、ベーステーブルの一部を抜き出したり、複数の表を結合して作られます。利用者からは、実際に存在する表と同じようにビューを扱うことができます。このビューは、業務によって表の形式を変更したい場合などに利用されます。

ビュー

データベース言語（SQLなど）ベーステーブルから作成
ベーステーブル
図 2.2

ベーステーブルとビュー

一般的に、このようなベーステーブルの作成やビューの作成、表への問い合わせなどの処理には、データベース言語が用いられます。データベー
ス言語の中でも、リレーショナル・データベース向けに規格化され標準化された言語が、本書で説明する SQL（Structured Query Language）です。
次章では、このデータベース言語について説明します。

11