II-22-7. 表の結合、複雑な処理、テーブルの更新

外部結合や自己結合、副問合せといった表の結合(ジョイン)に関するSQLによる操作方法や、SQLを用いた複雑な検索・照会の方法、テーブルの更新、削除など、SQLによる様々なテーブル操作について説明する。

【学習の要点】

* 表の結合により正規化で分割した表を一つの表として扱う事ができる。

* 表の結合を行う方法としては、他の表と結合する外部結合、同じ表で結合する自己結合、他のSQL文の実行結果を使用する副問合せがある。

* 表の更新処理を行うSQL文としては、行の挿入を行うINSERT文、行の更新を行うUPDATE文、行の削除を行うDELETE文がある。

図II-22-7. 表の結合

【解説】

1) 表の結合

* 外部結合と内部結合

表の結合(JOIN)により、正規化で分割したいくつかの表を一つの表として扱う事ができる。「ON」句の後ろに結合フィールドを指定する。

結合方法には内部結合と外部結合がある。内部結合(INNER JOIN)は結合したフィールドの両方に合致したレコードを抽出する方法である。外部結合(OUTER JOIN)は結合したフィールドの両方に合致するレコードが存在しなかった場合でも抽出する方法で、左外部結合(LEFT OUTER JOIN)は、結合条件の左側のテーブルのレコードを全て抽出する方法である。

記述例: SELECT * FROM `hinmoku` AS A LEFT OUTER JOIN `hacchuu` AS B

ON A.`shinacode` = B.`shinacode`

WHERE A.`tanka` < 800 ;

* 自己結合

自己結合とはテーブルに別名をつけて、同じテーブル同士を結合することである。下記の例では「,」で結合し、結合条件をWHERE句で記述しているが、INNER JOINで記述しても同じ結果になる。同一要素の組み合わせを排除する条件を入れることで、重複行の抽出が防止される。

記述例: SELECT A.`shinamei`,A.`tanka` FROM `hinmoku` AS A, `hinmoku` AS B

WHERE A.`tanka` = B.`tanka`

AND A.`shinacode` <> B.`shinacode` ;

* 副問い合わせ

副問い合わせ(サブクエリー)とは、SELECT文中に更に囲うことのできるSELECT文である。問い合わせ結果の一部として使用できる他、WHERE句などでの条件式としても使用できる。

記述例: SELECT `shinamei` , (SELECT MAX(`suuryou`) FROM `hacchuu`

WHERE `shinacode` = A.`shinacode`) AS `suuryou` FROM `hinmoku` AS A;

2) データ操作命令

* INSERT(追加)

「INSERT」はテーブルにレコードを追加する。INTOの後ろにテーブル名と項目名を、VALUESの後ろに追加する値を記述する。

記述例: INSERT INTO `hacchuu`

(`denpyoubangou` ,`shinacode` ,`suuryou` ,`shiiresakimei` )

VALUES ('1', '1', '100', '仕入商店');

* UPDATE(更新)

「UPDATE」はテーブルの既存レコードを更新する。SETの後ろに更新する項目と値を「=」で続けて記述する。WHERE句の後ろはSELECT文と同様に更新対象となる条件を指定する。

記述例: UPDATE `hacchuu` SET `shiiresakimei` = '山田商店'

WHERE `denpyoubangou` = 1 ;

* DELETE(削除)

「DELETE」はテーブルのレコードを削除する。FROMの後ろにテーブル名を記述する。

記述例: DELETE FROM `hacchuu`

WHERE `denpyoubangou` = 2 ;

OSS Course Naviのコンテンツは IPA OSS モデルカリキュラムを基としています。