スポンサーサイト

    上記の広告は1ヶ月以上更新のないブログに表示されています。
    新しい記事を書く事で広告が消せます。

    UNIONクエリの真実

    ちょっと大げさなタイトルですが、
    中身は大したことないです。

    しかし、そんなタイトルをつけたくなるほど、私にとってはお★ど★ろ★き!でした。

    それは、Sqlのunionクエリは、重複除外をしてくれていた!
    というもの。

    まあ、いまさらなんですがね。
    UNIONには、ノーマルの「UNION」と「UNION ALL」という2つの書き方があります。
    UNION ALLについては、存在は知っていたけど、いつ使うんだ?とか思ってました。
    そう、私は「UNION ALL」の意味を理解していなかったんです。

    簡単にいえば、
     ・重複した行を表示しないのが「UNION」
     ・重複した行も表示するのが「UNION ALL」
    UNIONを知った時、これも同時に知ったはずなんですが、
    いつの間にか忘れていて、UNIONは2つのクエリ結果をくっつけて返すものということだけが記憶になっていたようです。

    今、あらためて
     ・「UNION」は重複除外をしている
    ということを再認識しました。

    これがどう役に立つか。
    今までは、単純に2つのクエリ結果をくっつけて返す用途でしか使ってませんでしたが、
    2つのクエリ結果に差があるかどうかを調べることにも使えてしまうのです。
    どうやるかというと、
    1.まず、2つのクエリ結果それぞれについて、行数が一致しているかどうかを調べます。
      これは普通に SELECT COUNT(*) FROM クエリ結果1 とかで調べられますね。
      ここで行数が違えばその時点でテーブルに差があるということになります。

    2.次に行数が同じ場合、内容が一緒かどうかを調べます。
      ここで我らが「UNION」の登場です。
      もし、2つのクエリ結果が全く同じなら、UNIONで結合したとき、同じ行は重複除外されるので
      返される行数は、元の2つのクエリ結果と同じになります。
      というわけで、
      SELECT COUNT(*) FROM
          SELECT * FROM クエリ結果1
             UNION
             SELECT * FROM クエリ結果2
        ) AS a
         の結果が1で調べた行数と同じになれば、両クエリ結果は全くの同一ということになります。

     (ここでクエリ結果というのは、テーブルもしくはサブクエリを指します。
      なので、あるテーブルのこのフィールドが○○であるデータについて、△フィールドと■フィールドが同じかどうか
      調べたいとかいう場合は、サブクエリで書いてあげれば調べられるのです)

    こういう使い方もあったのか!という驚きにかられて、記事にしてしまいました。


    スポンサーサイト

    テーマ : データベース
    ジャンル : コンピュータ

    コメントの投稿

    管理者にだけ表示を許可する

    プロフィール

    ざっち

    Author:ざっち
    ざっちのーと
    ♪自由なSEのメモ帳です♪

    ざっちのスキル一覧
    ----------------
    上級(手足も同然!)
    ・.net FrameWork
    ・C#
    ・SqlServer
    ・VisualBasic6.0
    ----------------
    中級(だいたいOK!)
    ・WPF(XAML)
    ・Android
    ・WindowsMobile6.5
    ・HTML
    ----------------
    下級(や、やればできるさ!)
    ・PHP
    ・JavaScript
    ・SilverLight
    ・SQLite
    ・Python(だってjetCreaterが・・・)
    ・C++(OpenCVいじってみたくて・・・)
    ----------------
    最近のお気に入り
    ・WPF(XAML)
    ・Android
    ・GoogleAPI
    ----------------

    最近の記事
    月別アーカイブ
    カテゴリー
    夢見る羊さん
    地球の名言Ⅱ

    presented by 地球の名言

    Twitter...A

    Twitter < > Reload

    ブロとも申請フォーム

    この人とブロともになる

    ブログ内検索
    RSSフィード
    リンク
    上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。