ヘッダーをスキップ
Oracle TimesTen In-Memory Databaseオペレーション・ガイド
リリース6.0
B25767-02
  目次へ
目次
索引へ
索引

前へ
前へ
次へ
次へ
 

レッスン5: データ・ストアでの処理

レッスン5A: 挿入(INSERT)

作成したデータ・ストアで処理を行うことができます。データベースと同様に、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文を使用します。

cust_
number
first_
name
last_
name
address
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

データ・ストアに挿入した行を表示するには、次の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 >

レッスン5B: 選択(SELECT)

レッスン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 >

レッスン5C: 更新(UPDATE)

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 >

レッスン5D: 削除(DELETE)

行を削除できることは、行の追加または変更を行うことができることと同様に重要です。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開発者およびリファレンス・ガイド』を参照してください。