作成したデータ・ストアで処理を行うことができます。データベースと同様に、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およびSQLリファレンス・ガイド』、『Oracle TimesTen In-Memory Database C開発者およびリファレンス・ガイド』および『Oracle TimesTen In-Memory Database Java開発者およびリファレンス・ガイド』を参照してください。