サブクエリを利用した更新

提供: 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 句を使用したクエリのことです。

Image 025.jpgサブクエリを利用した 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'

次は: