2007年7月12日木曜日

 

【SQL】マルチテーブル・インサート(Multitable Insert)によるデータ挿入の高速化

マルチテーブル・インサート(Multitable Insert)を使うと1つのSQL文で複数の表に INSERTが可能になり、データの挿入が早くプログラム上の処理も1つにまとめる事が出来ます。
INSERT ALL
      INTO 特別顧客リスト1(番号, 名前) VALUES ('1', '佐々木')
      INTO 特別顧客リスト2(番号, 地域) VALUES ('2', '関東')
   SELECT * FROM dual;

dual は仮想テーブルを表します
以下の様に、既にあるテーブルのデータを条件を絞ったりしてコピーするのに使えます。

INSERT ALL
WHEN 年齢 <= 50 THEN
INTO 特別顧客リスト50(番号, 名前, 地域) VALUES (番号, 名前, 地域) WHEN 年齢 <= 40 THEN
INTO 特別顧客リスト40(番号, 名前, 地域) VALUES (番号, 名前, 地域) WHEN 年齢 <= 30 THEN
INTO 特別顧客リスト30(番号, 名前, 地域) VALUES (番号, 名前, 地域) SELECT 番号, 名前, 地域 FROM 顧客リスト;

各年代毎に番号と名前と地域のデータが抽出できました。

上記の様に複数のテーブルではなく、一つのテーブルに複数のデータを挿入する時、まとめて INSERT するには環境によって(DB2とmySQL)は以下でも可能です。
実行するクエリは少なくするべきです。速度に大きな違いがあると言います。

INSERT INTO 顧客リスト(番号, 名前, 地域)
             VALUES (1, '佐藤', '東北'),
                           (2, '佐々木', '北海道'),
                           (3, '鈴木', '関東');

日付関数などを使ってシステムの時間を表示するのに使います。

SELECT to_char(sysdate,'yyyy/mm/dd hh:mi:ss') "DATE/TIME" FROM dual

2002/05/24 09:53:37

他にも別の演算子と組み合わせて高度な使い方が出来るようですがここでは省略します。

SELECT
    LENGTH('オラクル') 文字数 ,
    LENGTHB('オラクル') バイト数
FROM DUAL ;

文字数  バイト数
------   ---------
     4          8

ラベル: ,


コメント: コメントを投稿

登録 コメントの投稿 [Atom]



この投稿へのリンク:

リンクを作成



<< ホーム

This page is powered by Blogger. Isn't yours?

登録 投稿 [Atom]

Google