データベース
データベース言語(SQL)
データベース言語の種類
SQL:国際標準のリレーショナルデータベース言語
名称 | 説明 |
---|---|
DDL | 表やビューなどデータベースの構造(スキーマ)を定義するための命令。データ定義言語 |
DML | 表に格納されたデータを検索したり、更新したりする命令 データベースを操作するために利用する。データ操作言語 |

SQLの記述方法
独立言語方式
SQLを直接的に記述する方法のこと。SQLを記述して実行結果が返ってくる会話的な形式であることから「会話型SQL」ともいう
親言語方式
汎用高水準言語からなるデータベース言語を利用する方式
COBOLなどの高水準言語を親言語と呼び、データベースへのアクセス以外の処理は親言語で記述する
データベース言語SQLやNDLは、COBOL、Fortran、PL/1、PASCALを親言語とすることができる
コンパイルした後に実行する
次のような種類がある
モジュール言語
親言語とデータベースのインタフェースとして、親言語からモジュールを呼び出す
埋込型言語
親言語のプログラムの中にデータ操作言語の文を直接記述する
データベースの定義
スキーマ、表、ビューなどデータベースの構造を定義したり、アクセス権を設定したりするにはDDLを使用する
スキーマの定義
データベースを作成するには、スキーマを定義しておく必要がある
CREATE DATABASE データベース名 |
スキーマ
データベースの枠組み
表の定義
データベースにデータを格納するには、データベースの構造である表を定義する必要がある
CREATE TABLE 表名 (列名1 データ型 1[列定義 1], (列名2 データ型 2[列定義 2], (列名3 データ型 3[列定義 3], ...) |

項目のデータ型
表の項目に定義するデータの種類
名称 | 設定例 | 説明 |
---|---|---|
文字列型 (固定長) | CHAR(バイト数) TEXT | 文字列として格納するデータ。データの値に関係なく文字列のデータ長を固定して格納する |
文字列型 (可変長) | VARCHAR(最大文字数) | 文字列として格納するデータ。データの値によって文字列のデータ長を変えて格納する |
数値型 | NUMBER DECIMAL | 数値として格納するデータ型 |
日付型 | DATE DATETIME | 日付を識別して格納するデータ型 |
列制約
一つの項目に設定できる制約のこと
名称 | 設定例 | 説明 |
---|---|---|
一意性制約 (UNIQUE制約) | PRIMAREY KEY | 主キーを設定する。項目内の値が重複せず、必ず一意になるように制約。NULLの入力は不可 | UNIQUE | 主キー以外の項目を設定する。項目内の値が重複せず、必ず一意になるようにする制約 ※1件だけNULLの入力も可 |
参照制約 | REFERENCES参照する表 | 外部キーを設定する。外部キーの項目の値が、参照される主キー側の項目の値に必ず存在するように、複数の表で整合性を保つために設定する制約 |
非NULL制約 | NOT NULL | 表の項目の値がNULLにならないようにする制約 |
検査制約 | CHECK(チェック条件) | 表の項目の値が、設定した条件になるようにする制約 |
既定値 | DEFAULTデフォルト値 | 既定(デフォルト)の値を設定する |
表制約
表自体に設定できる制約のこと。複数項目を組み合わせて一意制約を設定するときに、列制約として設定できない場合に利用。表制約は、CREATE TABLE文の最後に記述する
名称 | 設定例 | 説明 |
---|---|---|
一意性制約 (UNIQUE制約) | PRIMAREY KEY(主キーに設定する項目名1,…) ※複数キーの設定は、項目名「,」で区切って並べる | 主キーを設定する。表の中で項目の値が重複せず、必ず一意になるように制約。NULLの入力は不可 | UNIQUE(項目名,…) ※複数キーの設定は、項目名「,」で区切って並べる | 主キー以外の項目を設定する。表の中で項目の値が重複せず、必ず一意になるようにする制約 ※1件だけNULLの入力も可 |
参照制約 | FOREIGEN KEY(外部キーに該当する項目名) REFERENCES参照する表 | 外部キーを設定する。外部キーの項目の値が、参照される主キー側の項目の値に必ず存在するように、複数の表で整合性を保つために設定する制約 |
ビューの定義
ある実表をもとにして必要な項目だけを抽出して集め、仮想的に作成する表のこと
CREATE VIEW ビュー名[(ビューの項目名,…)] AS SELECT 項目名,…FROM 表名 ※[ ]内は、必要に応じて記述。省略した場合、実表と同じ項目名となる |

アクセス権の設定
表やビューなどのデータベースを利用するための権限のこと。データベース管理システムの利用者に対して設定する
GRANT アクセス権 ON
表名 TO 利用者名 ※"利用者名"にはデータベース管理システムの利用者名を指定 ※すべての利用者にアクセス権を設定するには、利用者名に"PUBLIC"を指定 |
項目 | 説明 |
---|---|
SELECT | 表を検索(参照)する権限 |
INSERT | 表にレコードを挿入する権限 |
UPDATE | 表の項目を更新する権限 |
DELETE | 表のレコードを削除する権限 |
ALL | 表に対するすべての権限 |

【参考】
|
検索系のデータ操作
表のデータを検索する場合はDMLの「SELECT文」を使用
項目の検索
SELECT 項目名 FROM 表名 |
全ての項目の検索
項目名に「*(アスタリスク)」を指定する
SELECT * FROM 表名 |
特定の項目の検索
項目名をラ並べて指定する。各項目名は「,(カンマ,半角)」で連結する
SELECT 項目名1,項目名2,… FROM 表名 |
計算結果の表示
表から検索した項目名に算術演算子を使った計算式を指定
SELECT 項目名,項目名を使った演算子 FROM 表名 |
ひとつ(複数)の項目で重複するデータを除いた検索
項目名の前に「DISTINCT」を指定
SELECT DISTINCT 項目名1(,項目名2,…) FROM 表名 |
【参考】
|
条件を指定したデータの検索
表の後に「WHERE」を指定
SELECT 項目名,… FROM 表名 WHERE 絞り込む条件 |
演算子の記述
絞り込む条件の記述は以下の演算子、術語を使用する
比較演算子
項目 | 説明 | 使用例 | 項目 | 説明 | 使用例 |
---|---|---|---|---|---|
= | 左辺と右辺が等しい | 数量=1 | <> | 左辺と右辺が等しくない | 数量<>1 |
> | 左辺が右辺より大きい | 数量>10 | < | 左辺が右辺より小さい | 数量<10 |
>= | 左辺が右辺以上 | 数量>=10 | <= | 左辺が右辺以下 | 数量<=10 |

論理演算子
複数の条件を記述する場合に使用
項目 | 説明 | 使用例 |
---|---|---|
AND | 条件Aと条件Bを満たすレコードを検索 | 条件A AND 条件B |
OR | 条件Aと条件Bのいずれかを満たすレコードを検索 | 条件A OR 条件B |
NOT | 条件Aでないレコードを検索 | NOT 条件A |

述語
SQLで予約されているキーワードのこと
項目 | 説明 | 使用例 |
---|---|---|
IS NULL | 項目のデータがNULLのレコードを検索 | 電話番号 IS NULL |
IS NOT NULL | 項目のデータがNULLでないレコードを検索 | 電話番号 IS NOT NULL |
BETWEEN 値1 AND 値2 | 項目のデータが値1以上、値2以下のレコードを検索 | 数量 BETWEEN 1 AND 9 |
IN(値1,値2) | 項目のデータが値1または値2のレコードを検索 | 数量 IN(10,20) |
LIKE'条件文字列' | 項目のデータが'条件文字列'に一致するレコードを検索 ※条件文字列にはワイルドカード使用可能 | 商品名 LIKE'テレビ%' 商品番号 LIKE'A_ _' |
表の結合
関連のある表同士を結合する場合は「WHERE」に結合条件を指定
SELECT 項目名1,項目名2,… FROM 表名1,表名2 WHERE 表名1.項目名=表明2.項目名 |
INNER JOIN
結合条件の記述はINNER JOINで指定することも可能
SELECT 項目名1,項目名2,… FROM 表名1 INNER JOIN 表名2 ON 表名1.項目名=表名2.項目名 |
相関名
表名が長い時やWHEREやGROUPの中で何度でも同じ表明を使用する場合などに、表に付ける別名のこと。表名を表明を短い相関名に置き換え、相関名の定義はFROMの中で表名のあとに「AS」と相関名を連結する。「AS」は省略可能
SELECT 受注番号, X.顧客番号,顧客名 FROM 受注AS X,顧客 AS Y WHERE X.顧客番号=Y.顧客番号 |
データの集計
項目のデータの個数や平均などを計算する場合は、「集合関数(集約関数)」を使用
SELECT 集合関数(項目名) FROM 表名 |
名称 | 説明 | 設定例 |
---|---|---|
COUNT | 検索結果の行数を数える | COUNT(*) ※すべてのレコード数を数える |
COUNT(受注合計) ※項目の合計がNULLの行は数えない | ||
SUM(項目名) | 項目の値の合計値を求める | SUM(受注合計) |
AVG(項目名) | 項目の値の平均値を求める | AVG(受注合計) |
MAX(項目名) | 項目の値の最大値を求める | MAX(受注合計) |
MIN(項目名) | 項目の値の最小値を求める | MIN(受注合計) |
データのグループ化
項目ごとの合計などを求める場合は、集合関数と「GROUP BY」を組み合わせて指定。さらに集合関数で求めた値を絞り込む場合は「HAVING」を指定
SELECT 項目名,… FROM 表名 [WHERE … ] GROUP BY 項目名,… HAVING グループ化したデータの検索条件 ※SELECT文で指定する項目名には集合関数利用可能 ※[ ]内は、必要に応じて記述する |
データの並べ替え
検索した結果を並べ替える(ソートする)場合は、「ORDER BY」を指定
SELECT 項目名,… FROM 表名 [WHERE… GROUP BY… HAVING…] ORDER BY並べ替えの基準となる項目名 [ASCまたはDESC] ※ASCを指定すると昇順、DESCを指定すると降順に並べ替える ※[ ]内は、必要に応じて記述する |
副問い合わせ
ある表を検索した結果を条件に指定する場合に使用
単一行副問い合せ
WHEREで指定する項目名と、かっこで囲んだSELECT文を「=」で連結する
※副問い合せの結果が1件と予想される場合に使用
SELECT 項目名,… FROM 表名1 WHERE検索する項目名= (SELECT 検索する項目名 FROM 表名2 WHERE 検索条件) |
複数行副問い合せ
WHEREで指定する項目名と、かっこで囲んだSELECT文を「IN」で連結する
SELECT 項目名,… FROM 表名1 WHERE検索する項目名IN (SELECT 検索する項目名 FROM 表名2 WHERE 検索条件) |
相関副い問合せ
副問い合せを行うことによって、複数の表を比較して一致する(一致しない)レコードを検索すること
WHEREと副問い合せのSELECT文を「EXISTS」(「NOT EXISTS」)で連結する
SELECT 項目名1,項目名2,… FROM 表名1 WHERE EXISTS (NOT EXISTS) (SELECT * FROM 表名2 WHERE 表名1.項目名=表名2.項目名) ※EXISTS:一致する場合、NOT EXISTS:一致しない場合 |
更新系のデータ操作
表のデータを挿入、更新、削除する場合、DMLの次のような構文を使用する
挿入(INSERT文)
表にレコードを挿入する場合は、DMLの「INSERT文」を使用する
INSERT INTO 表名(項目名1,…) VALUES(データ1,…) ※表の「項目名1」に挿入する項目の「データ1」を対応させる ※表内のすべての項目にデータを挿入する場合、「(項目名1,…)」は省略可 |
更新(UPDATE文)
表のレコードを更新する場合はDMLの「UPDATE文」を使用
UPDATE 表名 SET 項目名1=更新するデータ1,… [WHERE 更新する条件] ※[ ]内は、必要に応じて記述する |
※条件に合った項目だけ更新する場合は、WHEREで更新するレコードを指定し、SETのあとに更新する更新する更新する項目名と更新するデータを「=」で連結する。WHEREを省略すると、表のすべてのレコードが更新される
削除(DELETE文)
表のレコードを削除する場合は、DMLの「DELETE文」を使用する
DALETE FROM 表名 [WHERE 削除する条件] ※[ ]内は、必要に応じて記述する |
※条件に合った項目だけ削除する場合は、DELETE FROM 表名のあとにWHEREで削除するレコードを指定する。WHEREを省略すると、表のすべてのレコードが削除される
カーソル操作
カーソルを使用するとSELECTの結果に対して1行ごとに繰り返し処理を行えるようになる
※カーソルの定義の場合は、先頭に@を付けない
ホスト変数
カーソル宣言で記述したSELECT文の実行によって取り出されたレコードのデータを格納するための変数。ホスト変数は、プログラム言語で宣言する
 

