« 高速道路で飛来物に当たる | トップページ | SQL: 別テーブルの内容を反映させる »

2014年1月30日 (木)

SQL: UNIONでは暗黙のソート処理あり

少し前の事ですが、同じ構造のテーブルを合成する機会がありました。
環境はSQLServer2008R2のT-SQL。

よくよく考えれば大した事じゃないのですが、備忘録を兼ねて書いておきます。

DECLARE @tbl_temp1 table (
    code        NUMERIC(2)
,   name        VARCHAR(20)
);
INSERT INTO @tbl_temp1 VALUES (1, 'テーブル1の1');
INSERT INTO @tbl_temp1 VALUES (2, 'テーブル1の2');
INSERT INTO @tbl_temp1 VALUES (3, 'テーブル1の3');

DECLARE @tbl_temp2 table (
    code        NUMERIC(2)
,   name        VARCHAR(20)
);
INSERT INTO @tbl_temp2 VALUES (2, 'テーブル2の2');
INSERT INTO @tbl_temp2 VALUES (4, 'テーブル2の4');

この様な二つテーブルからcode列に存在するデータを合成します。
期待する結果はこちら。

Sql

tbl_temp1を基準にtbl_temp2を合成しただけなので、何通りか方法はあると思います。
僕は軸となる列を列挙して、その集合に寄せる方法が好みです。 ←スタージョイン

SELECT
    *
FROM (
    SELECT DISTINCT code FROM @tbl_temp1
    UNION
    SELECT DISTINCT code FROM @tbl_temp2
) AS [A]
LEFT OUTER JOIN @tbl_temp1 AS [T1] ON T1.code = A.code
LEFT OUTER JOIN @tbl_temp2 AS [T2] ON T2.code = A.code

やりたかった事だけに絞り込むと、こんな感じのクエリーになりました。
で、とりあえずクエリーを実行してみたら、軸になる列がソート済み。

アレ?と思いつつ、色々と調べたら、UNIONでは暗黙のソート処理が走るそうで。
なーる。そう言う事でしたか。

軸となる列(ここでは両方のcode)を列挙する際、どこかにORDER BYが必要だと思ってました。
そんな訳で、この件は以後忘れないように書いておきます。

....

久しぶりの勉強部屋ネタですが、こちらでは仕事部屋にしました。
## しばらくしたら、あちらは閉鎖します。

« 高速道路で飛来物に当たる | トップページ | SQL: 別テーブルの内容を反映させる »

仕事部屋」カテゴリの記事

コメント

コメントを書く

(ウェブ上には掲載しません)

トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/564846/59039928

この記事へのトラックバック一覧です: SQL: UNIONでは暗黙のソート処理あり:

« 高速道路で飛来物に当たる | トップページ | SQL: 別テーブルの内容を反映させる »

2014年11月
            1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30            
サイト内検索
ココログ最強検索 by 暴想

Twitter

開発Twitter

無料ブログはココログ