from句のテーブル数を減らす
山岸賢治 [著] 2010/08/20 14:00

SourceCode 1.09 KB

 OracleのSQLのアンチパターンとして、メンテナンス性や可読性の悪いSQLと、修正したSQLを問題集形式で紹介します。今回はselect文のfrom句のテーブル数を減らせるSQLについて考えてみます。

1 2 3 4 5 6 →

はじめに

 OracleのSQLのアンチパターンとして、メンテナンス性や可読性の悪いSQLと、修正したSQLを問題集形式で紹介します。

対象読者

  • SQLの理解を深めたい方。

必要な環境

 本稿で扱うSQLは、Oracle 11.2.0.1.0で動作確認しました。他のDBでも応用が可能です。

1. 最大値の行を取得するSQLのアンチパターン

 最大値の行を取得するSQLを考えます。サンプルデータ、修正対象のSQL、出力結果は下記です。

getMaxRows
IDValextraCol
11110EEEE
11130CCCC
11150AAAA
22220BBBB
22240DDDD
22240FFFF
33380GGGG

 IDごとにValが最大値の行を出力します。

修正対象のSQL
select a.ID,a.Val,a.extraCol
  from getMaxRows a,(select ID,
                     max(Val) as maxVal
                       from getMaxRows
                     group by ID) b
 where a.ID  = b.ID
   and a.Val = b.maxVal
order by a.ID,a.extraCol;
出力結果
IDValextraCol
11150AAAA
22240DDDD
22240FFFF
33380GGGG

 上記のSQLでは、IDごとにValが最大値の行を出力するために、インラインビューでgroup bymax関数を使って、IDごとのValの最大値を求めてから内部結合を行ってます。上記のSQLを可読性の高い記述で同じ結果を取得できるSQLに修正して下さい。

ヒント

 「IDごとにValが最大値の行を出力する」という日本語に近い表現のSQLに修正してみます。


1 2 3 4 5 6
→
INDEX
OracleのSQLのアンチパターンの問題集2
Page1
はじめに
対象読者
必要な環境
1. 最大値の行を取得するSQLのアンチパターン
2. 共通集合を取得するSQLのアンチパターン
3. 自テーブルを参照するSQLのアンチパターン
最後に
プロフィール
山岸賢治 ヤマギシケンジ

Oracle ACEの1人。
OracleSQLパズルの運営者。
ORACLE MASTER Silver Oracle Database 10g
(研修受講で)ORACLE MASTER Gold Oracle Database 10g
ソフトウェア開発技術者 (情報処理技術者試験)
第二種情報処理技術者 (情報処理技術者試験)
 


記事へのコメント・トラックバック機能は2011年6月に廃止させていただきました。記事に対する反響はTwitterやFacebook、ソーシャルブックマークサービスのコメントなどでぜひお寄せください。

スポンサーサイト