すいません、VB4しかやってないんです、VBAはやったけど(ぼそ)

なのに.NETですか? あやしいジャンガリアンベムスターがさすらうゴシックペナルティ

目次

Blog 利用状況

ニュース


片桐 継 は  
こんなやつ

かたぎり つぐ ってよむの

大阪生まれ河内育ちなんだけど
東京に住んでたりするの
IT人材派遣会社してたりするの
エセモノカキやってたりするの
VB系言語が得意だったりするの
SQL文が大好きだったりするの

お仕事探してる人、
こんたくとぷりーずなの
正体は会った人だけ知ってるの

空気読まなくてごめんなさいなの


うちの亀

Go to Ustream


イベント予定



ネット活動

mixiの鍵はこれだっ! in mixi
ぴくま同盟:理事 in ぴんくま

C#, VB.NET 掲示板
C# VB.NET掲示板
わんくま同盟
わんくま同盟


いやー、もうね、il||li _| ̄|○ il||li

記事カテゴリ

書庫

日記カテゴリ

ギャラリ

イベント活動

プログラムの活動

サブクエリは難しいのか

 SQL文を作るとき、けっこう使うことになるのに何故か知られてない?サブクエリ。恐らくは処理が遅いとか、コストがかかるとかそんな理由が大きくかかわっているのでしょうけれど、「サブクエリ型SQLをまず書いて、ここから結合クエリへ分解する」「結合クエリをサブクエリ型SQLへまとめなおす」が出来るようになっておくと、SQL文の説明をするのがとても簡単、かつ、確実に情報を伝えることができやすくなります

まぁテーブル一杯の業務アプリではよくある話で、

http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=39289&forum=26

を例にとると

table1とtable2はKey1でLeftJoinされ、table2とtable3はKey1,Key2でLeftJoinされる
それぞれのテーブルのDelFlgで削除可否を決めたい

ということなら、考え方は、

Table1の削除したい候補の塊 DEL1
Table2の削除したい候補の塊 DEL2
Table3の削除したい候補の塊 DEL3
Table3の削除したくない候補の塊 NOTDEL3

をまず用意。

つぎに、

DEL1とDEL2の両方に含まれるキーの塊 DEL12
DEL12とDEL3の全部に含まれるキーの塊 DEL123
DEL12にあってNOTDEL3の全部に含まれるキーの塊 NOTDEL123

を作り出してしまえば、

DEL12とDEL123でUNION ALLしたキーからNOTDEL123を除いたものが削除するべきレコードキー DELKEY

がきまるので、

TABLE1からDELKEYを削除
TABLE2からDELKEYを削除
TABLE3からDELKEYを削除

で、解決ですね。

後は、それぞれのプラットホームにあわせて、SELECT-SQLを作成し、最後にDELETE文。
複雑なSQLがかけない人でも、この概念を理解してもらえればストアドプロシジャでだって書ける。
どんなプラットホームのDBでも何とかなる。

大事なのは、SQL文を書く、ってことじゃなく、どうやったら答えとなる塊を取り出せるか、を考える事。それを思うのには、いきなり結合クエリより、サブクエリで考えて概念を理解してから結合に書く方がずっと作る側の勉強にもなると思うデスよ。

投稿日時 : 2007年6月27日 16:03

コメントを追加

# re: サブクエリは難しいのか 2007/06/28 2:40 まさる

いかにSQL発行回数を少なくするかを考えればサブクエリ(インラインビュー)を使うのって当たり前だと思ってたんですが、
世の中ではそうではなかったのですね・・・

ちゃんと覚えれば便利ですのにねぇ・・・サブクエリって。

# re: サブクエリは難しいのか 2007/06/28 22:00 Jitta

> 大事なのは、SQL文を書く、ってことじゃなく、どうやったら答えとなる塊を取り出せるか、を考える事。
「大事なのは、コードを書く、ってことじゃなく、どうやったら実現できる手段(段階)となりうるか、を考えること。」
いただきま~す。

# re: サブクエリは難しいのか 2007/06/29 11:05 片桐

>まさるさん
サブクエリ大好きです(笑) 結合より概念が判りやすいですもん。
ただ、クエリコストは結合より食うので嫌われ者だったりしますね。
適材適所だとは思っているのですけれど、こればかりは現場次第(笑)

>じったさん
くはっ! じったさんに、じったさんに、じったさんにぱくられたぁっ!
自慢していいですか?<おいこらまて

タイトル  
名前  
URL
コメント