iseeit.jp 情報通信技術

『情報通信技術』に関するスキルのほかに、『情報セキュリティ』に関するスキルも重点テーマです。また、特に今後の『高速モバイル通信』と『インターネット』に注目していきます。

UNION ALL & NOT EXISTS

SQL では、 UNION ALL & NOT EXISTS がわたしの得意技でした。同じような SQL 結果を得るのに、LEFT JOIN 句がありましたが、LEFT JOIN 句では、DBMS によって結果を得るまでのレスポンススピードが大きく異なることが多かったのに対して、UNION ALL & NOT EXISTS では、DBMS による差異がほとんどありませんでした。

UNION ALL & NOT EXISTS を利用した SQL の例です。

 

 

試験情報、試験分類の2つのテーブルを試験分類コードで結合します。試験情報レコードに対する試験分類レコードは0か1存在します。

 

(SELECT a.ID,a.試験通番,a.試験名称,a.試験名短縮,a.試験記号,a.試験分類コード,a.表示順位,a.無効区分,a.作成日,a.更新日,b.ID,b.試験分類名称,b.試験分類名短縮,b.表示順位,a.試験コメント,a.試験情報1,a.試験情報2,a.試験情報3

FROM 試験情報 a,試験分類 b

WHERE a.試験分類コード=b.試験分類コード AND a.無効区分='0' AND b.無効区分='0')

UNION ALL

(SELECT a.ID,a.試験通番,a.試験名称,a.試験名短縮,a.試験記号,a.試験分類コード,a.表示順位,a.無効区分,a.作成日,a.更新日,0,'','',0,a.試験コメント,a.試験情報1,a.試験情報2,a.試験情報3

FROM 試験情報 a 

WHERE a.無効区分='0' AND

NOT EXISTS

(SELECT * FROM 試験分類 b WHERE a.試験分類コード=b.試験分類コード AND b.無効区分='0') )

ORDER BY 14,11,7,1 

 

UNION ALL 以前の SELECT 文では、試験分類コードで結合できる全レコードが対象となり、UNION ALL 以後の SELECT 文では、NOT EXISTS の条件で試験分類コードで結合できない試験情報テーブルのレコードが対象となります。そして、この SQL文の実行結果として、その両方のレコードが得られるというものです。

なお、UNION ALL では、その前後の SELECT 文で出力するカラムの数が一致している必要があります。また、ORDER BY 以降の数字は、それぞれの SELECT 文に指定しているカラムの位置の順番にあたります。

最近のブログ記事

情報技術(IT)用語の意味の変化
情報技術(IT)用語の意味は、その技術の…
SSL サーバ証明書の役割
  https 通信に必要な …
アノマリ(anomaly)
  アノマリ(anomaly)…
 ⇒ affiliated with
 (2011.08.28 21:00)