作成したデータ・ストアで処理を行うことができます。データベースと同様に、SQL文を実行して表に行を挿入できます。たとえば、新しい顧客をデータ・ストアに追加する必要があるとします。追加する最初の新しい顧客はJosephine Rogersです。INSERT文およびVALUES句を使用して、彼女の情報をcustomer表に追加します。
INSERT文を使用して、データ・ストアに行を追加できます。INSERT文とともにVALUES句を使用して、必要な情報を列に移入します。
新しい顧客情報を含む行をデータ・ストアに挿入するには、ttIsqlプロンプトで次のSQL文を実行します。
INSERT INTO customer
VALUES (1365,'Josephine','Rogers','2100 Augustine Drive, Santa Clara, CA 95054');
データ値は、レッスン3のCREATE TABLE文で指定した列名の順序(最初が顧客番号、2番目が名など)どおりに入力する必要があります。文字列値は単一引用符で囲む必要があります。
Customer表に挿入した新しい行を表示するには、次のSQL文を実行します。
SELECT * FROM customer WHERE cust_number=1365;
次の顧客を追加する場合は、行ごとに個別のINSERT文を使用します。
データ・ストアに挿入した行を表示するには、次のSELECT文を実行します。
SELECT * FROM customer WHERE cust_number>=3750;
このSELECT文は次の結果を戻します。
< 3864, Ruth, Silver, 88 West 65th Street, New York, NY 10009 >
< 3750, Michelle, Ioni, 12 Kipling Street, Denver, CO 80215 >
< 3836, Dante, Cremona, 202 Tampa Way, Fremont, CA 94539 >
< 3945, Mark, Edwards, 1 Market Street, San Francisco, CA 94126 >
レッスン4で表にデータを移入した際に、orders
表で一部の顧客番号および注文番号が繰り返されていました。繰り返された注文番号の合計金額を求めるSELECT文を作成できます。また、レポートを読みやすくするために、結果をソートする句を使用することもできます。
数式で値の合計を求める集計関数SUMを使用して、繰り返された注文番号の金額を加算します。WHERE句で結合(JOIN)を使用して3つの表の情報をリンクします。WHERE句は個々の行を修飾しますが、GROUP BY句は共通の行をグループ化します。また、ORDER BY句は、結果をより読みやすくします。この句を使用すると、SELECTリスト内の任意の列のセットでソートできます。この例では、4は注文日、1は姓、2は名です。
顧客の注文の合計金額を日付別に求めるには、次のSELECT文を実行します。
SELECT last_name, first_name, SUM (price),order_date
FROM customer c, ref_products r, orders o
WHERE c.cust_number=o.cust_number and r.prod_number=o.prod_number
GROUP BY last_name, first_name, order_date
ORDER BY 4,1,2;
問合せの結果は次のとおりです。
< Aziz , Abdul , 475.94, 1996-01-03 >
< Anderson , Mary , 23.95, 1996-03-01 >
< Anderson , Mary , 5.99, 1996-03-08 >
< Burchard , Peter , 23.95, 1996-04-05 >
< Haas , Kerri , 5.99, 1996-05-02 >
< Garcia , Linda , 6.50, 1996-07-22 >
< Burchard , Peter , 135.00, 1997-01-12 >
< Dawes , Juanita , 12.95, 1997-02-05 >
< Stewart , Cynthia , 5.99, 1997-04-07 >
< McKenzie , Katherine , 24.95, 1997-06-24 >
< Mendoza , Saul , 55.00, 1997-08-01 >
< Garcia , Linda , 24.95, 1997-08-30 >
< Johnson , Karen , 80.94, 1997-08-30 >
< Mudunuri , Gautam , 50.00, 1997-12-01 >
< McKenzie , Katherine , 5.99, 1997-12-05 >
< Mendoza , Saul , 16.95, 1998-02-02 >
< Lao , Sandra , 24.00, 1998-02-12 >
< McKenzie , Katherine , 135.00, 1998-03-13 >
< Stewart , Cynthia , 50.00, 1998-04-14 >
< Levesque , Patricia , 26.95, 1998-05-07 >
< Mueller , Marco , 50.00, 1998-05-07 >
< Borba , Fatima , 23.95, 1998-06-06 >
< Silva , John , 23.95, 1998-06-28 >
< Bianchi , Anthony , 5.99, 1998-08-08 >
< Behr , Mary , 395.00, 1998-08-22 >
< Rossi , Paula , 12.95, 1998-08-22 >
< Singh , David , 6.50, 1998-08-30 >
< Silver , Ruth , 5.99, 1998-09-20 >
< Mendoza , Saul , 375.00, 1998-10-25 >
< McKenzie , Katherine , 375.00, 1998-11-11 >
< Rossi , Paula , 23.95, 1999-03-01 >
< Tu , Paul , 29.95, 1999-04-15 >
< Smith , Bo , 26.95, 1999-06-17 >
< Popov , Pavel , 5.99, 1999-10-15 >
< McPhee , Steven , 450.99, 1999-11-25 >
< McPhee , Steven , 135.00, 1999-12-07 >
INSERTは表に新しい行を追加しますが、UPDATEは既存の行を変更します。UPDATEを使用して、単一行、行のグループ、または表内のすべての行の値を変更します。
UPDATEでは、変更する行(複数可)を指定します。たとえば、$50.00以上の価格の参照製品を10%値引きするとします。最初にSELECTを実行して、価格が$50.00以上の製品を表示します。
コマンド・プロンプトで次の文を実行します。
SELECT * FROM ref_products
WHERE price >= 50.00;
次のリストが戻されます。
< 0789435578, Dk Illustrated Oxford Dictionary, 50.00 >
< 0003750299, Collins Cobuild English Dictionary, 55.00 >
< 0395448956, The American Heritage Dictionary of the English Language, 50.00 >
< 0198612710, The New Shorter Oxford English Dictionary (2 Vol.), 135.00 >
< 0198612583, The Compact Oxford English Dictionary, 375.00 >
< 0198612605, Oxford English Dictionary: CD-Rom for Windows(20Vol./1CD),395.00 >
UPDATEに続くSET句で、列および変更値を指定します。前述の6つの製品の価格を10%値引きするには、価格に値.90を掛けます。
コマンド・プロンプトで次の文を実行します。
UPDATE ref_products
SET price = price * .90
WHERE price >= 50.00;
次のメッセージが戻されます。
6 rows updated
新しい価格を表示するには、コマンド・プロンプトで次の文を実行します。
SELECT * FROM ref_products
WHERE price >= 45.00;
次のリストが戻されます。
< 0789435578, Dk Illustrated Oxford Dictionary, 45.00 >
< 0003750299, Collins Cobuild English Dictionary, 49.50 >
< 0395448956, The American Heritage Dictionary of the English Language, 45.00 >
< 0198612710, The New Shorter Oxford English Dictionary (2 Vol.), 121.50 >
< 0198612583, The Compact Oxford English Dictionary, 337.50 >
< 0198612605, Oxford English Dictionary: CD-Rom for Windows (20 Vol./1 CD), 355. 50 >
行を削除できることは、行の追加または変更を行うことができることと同様に重要です。INSERTおよびUPDATEと同様に、DELETEも単一行および複数行の操作に対して有効です。
たとえば、顧客のSteven McPheeから1999年11月の注文を取り消す連絡があったとします。McPhee氏の顧客番号は1001です。
Steven Mcpheeの注文を表示するには、コマンド・プロンプトで次の文を実行します。
SELECT * FROM orders
WHERE cust_number = 1001;
次のリストが戻されます。
< 6854765, 1001, 0198612605, 1999-11-25 >
< 6854765, 1001, 0789435578, 1999-11-25 >
< 6854765, 1001, 0877799113, 1999-11-25 >
< 6854770, 1001, 0198612710, 1999-12-07 >
McPhee氏の注文は2つあります。注文番号6854765は1999年11月の注文であるため、これがorders
表から削除する注文になります。
注文番号6854765を削除するには、コマンド・プロンプトで次の文を実行します。
DELETE from orders
WHERE order_number = 6854765;
次のメッセージが戻されます。
(3 rows affected)
Steven McPheeの現在の注文を表示するには、コマンド・プロンプトで次の文を実行します。
SELECT * FROM orders
WHERE cust_number = 1001;
次の注文が戻されます。
< 6854770, 1001, 0198612710, 1999-12-07 >
SELECT文は、Steven McPheeの注文が1つだけあることを示しています。
これで個別の注文が削除されたため、データ・ストアを更新し、1997年より前のレコードを削除することができます。まず、次のSELECT文を実行して、該当する注文を検出する必要があります
SELECT * FROM orders
WHERE order_date <= '1996-12-31';
次の注文が戻されます。
< 6853036, 3700, 0028616731, 1996-04-05 >
< 6854100, 2655, 0440218616, 1996-07-22 >
< 6855031, 2826, 0028616731, 1996-03-01 >
< 6855036, 2826, 0877799113, 1996-03-08 >
< 6855297, 1224, 0877799113, 1996-01-03 >
< 6855297, 1224, 0877797099, 1996-01-03 >
< 6855297, 1224, 0789435578, 1996-01-03 >
< 6855297, 1224, 0198612605, 1996-01-03 >
< 6856095, 1133, 0877799113, 1996-05-02 >
このように、1997年より前の注文は9つあります。これらの注文を削除する必要があります。
CREATE VIEW文では、前述の問合せで使用したWHERE句と同じWHERE句を使用します。1997年1月より前の注文を削除するには、コマンド・プロンプトで次の文を実行します
DELETE FROM orders
WHERE order_date <= '1996-12-31';
次のメッセージが戻されます。
9 rows deleted
データ・ストアから9つの注文が削除されました。
これでデータ・ストアが更新されたため、バックアップを実行できます。バックアップでは、リストアに備えてデータ・ストアのスナップショットが作成されます。データ・ストアでの処理の詳細は、『Oracle TimesTen In-Memory Database APIリファレンス・ガイド』、『Oracle TimesTen In-Memory Database C開発者およびリファレンス・ガイド』および『Oracle TimesTen In-Memory Database Java開発者およびリファレンス・ガイド』を参照してください。