サブクエリを利用した更新
提供: InterBase
InterBase クイック スタート:Part III - データベースの中身の設定 へ戻る
WHERE 句の検索条件は、サブクエリにすることができます。 Katherine Young が現在管理している部署のマネージャを変更したいとしましょう。 これを行う 1 つの方法は、まず Katherine Young の部署番号を判別することから始める方法です(まだ行わないでください):
SELECT dept_no FROM Employee
WHERE full_name = 'Young, Katherine'
このクエリは、部署として「623」を返します。 その後、623 を UPDATE の検索条件として使用して、部署を次の文で変更します:
UPDATE Department
SET mngr_no = 107
WHERE dept_no = '623'
この更新をもっと効率的に行う方法として、サブクエリを使った上記の 2 つの文をまとめる方法が考えられます。 サブクエリとは、更新する行を決定する WHERE 句の中にある、SELECT 句を使用したクエリのことです。
サブクエリを利用した Department の更新
1. この演習の結果を確認できるよう、まず次のクエリを入力して、更新を行う前に Katherine の部署のマネージャ番号を表示してみましょう:
SELECT mngr_no FROM department WHERE dept_no = '623'
-
- これは 15 を返します。 (もし Employee テーブルから、emp_no が 15 の first_name および last_name を選択したなら、部署 623 のマネージャが Katherine 自身であることを確認できるでしょう。)
2. サブクエリが入った次の UPDATE 文を入力、実行して、Katherine の部署番号の検索と、その部署への新しいマネージャ番号の割り当てを一緒に行います:
UPDATE Department
SET mngr_no = 107
>WHERE dept_no = (SELECT dept_no FROM Employee
>WHERE full_name = 'Young, Katherine')
-
- 括弧内の SELECT 文から返される行が、UPDATE 文が操作する行となります。
3. それでは、もう一度、手順 1 のクエリを実行して、変更を見てみましょう。 部署 623 のマネージャは、マネージャ番号 15 ではなく、107 になっています。 4. この変更は保持したいものではないので、次の文を入力、実行して、Katherine Young を、部署 623 のマネージャに設定し直します:
UPDATE Department SET mngr_no = 15 WHERE dept_no = '623'