dポイントプレゼントキャンペーン実施中!

ネットで調べてみても見つからないので皆さんに質問させて下さい。

SQLで結合条件を記述する際、よく仕事現場で見かけるのは以下のような
書き方です。
SELECT うんたら
FROM  かんたら
WHERE  A = AAA
AND   B = BBB
OR   C = CCC

しかし、個人的にこれは嫌いです。
何故なら結合条件はWHEREの配下に存在するものであり、WHEREと同列
ではないはずだからです。
なので、私が書くとこうなります。
SELECT うんたら
FROM  かんたら
WHERE  A = AAA AND
    B = BBB OR
    C = CCC

もしくは、そんな書き方しませんが・・・。
SELECT うんたら
FROM  かんたら
WHERE  A = AAA
    AND
    B = BBB
    OR
    C = CCC

ここで、最初に示した書き方に最もな理由が知りたいと思います。
好みの問題なのかもしれませんが・・・。

投稿時のインデントが上手くいかないのでいいように解釈して下さい(笑)

A 回答 (3件)

私は前にANDとかORを記述するタイプです。

因みに項目を並べる時も
カンマを前に記述します。
画面の指令により動的にSQLを組み立てる場合、2番目以降の条件は
必ず結合子が必要なので、プログラムが簡単になるからです。
逆の表記ですと、条件を記述した後、次の条件があるかないか判断
して処理しなければならず、プログラムが冗長で保守性も劣化する
からです。
(AND/OR)のラジオボタン、条件記述用テキストボックスが5個くらい
指定できる画面を想定してみてください。もちろん、条件は0~5の
任意個数で、中抜け(条件が飛び飛びに指定される)もありです。
これで、SQLのWHERE句を動的に生成することを想像していただけると、
「前条件」の優秀性が認識できると思います。
あと、#1の方の回答のようにSQLを部分的にコメント化する時に
便利です。
    • good
    • 0
この回答へのお礼

ありがとうございます。
なるほど、確かに動的にSQLを生成する面から考えるとその通りですね。
言われてみれば、動的に生成する際には処理の効率上そうなってます。

ただ、こういう場合にこの条件を加える、などとなるでしょうから
コード上見易いこととは別なのでしょうけど。
結局ログとかから、生成されたSQLを確認したりとかですね。

皆さんも特にその書き方に固執しているわけではないんですよね?
そう考えると、場面に応じて使い分けても構わないという結論に達しました。
個人的にやっぱりSQL文だけで完結しているにも関わらずWHEREと同列にあるのが気に食わなくて・・・。
if {
うんたら
}
ってインデント無視してるイメージが強いんですよね。

お礼日時:2009/07/02 13:42

私も前に AND, OR を書きます。



ANDやOR が後ろにあると条件文に紛れてしまい見にくいのと、その行の条件がAND条件なのかOR条件なのかは上の行を見ないとわからないからです。

前に出ていれば、その条件が AND条件なのか OR条件なのかがはっきりわかり、後から見たときのわかりやすさがずいぶん違います。
    • good
    • 0
この回答へのお礼

ありがとうございます。
なるほど、みなさん色んな見方で前にANDとかを書いているんですね。

ちょっと偏見を捨てて、前に書くやり方が自分にとって使い易いか
気にしながらSQL組んでみようかと思います。

お礼日時:2009/07/05 12:17

えっと、検索条件を一部変更とかする際に、最初のSQLの方が改変が楽ってのがあるかな?


あんまりたいした労力ってほどじゃないけど。

SELECT うんたら
FROM  かんたら
WHERE  A = AAA
AND   B = BBB
OR   C = CCC

のBの条件だけ削除したい場合

SELECT うんたら
FROM  かんたら
WHERE  A = AAA
// AND   B = BBB
OR   C = CCC

って書けるから、これくらいしか思い浮かばないですね。
    • good
    • 0
この回答へのお礼

ありがとうございます。
確かにそれは良く言われますね。
でもそんなに効果があるかと言ったら疑問を感じずにはいられません。

私の経験上ですが、

一部の条件だけなくす
より
一部の条件を変更する

の方が多いですから、結局ANDとかORを打ち直す手間というのも
発生しているわけです・・・。

だからそこに拘らなくても・・・とは思いますが、私のやり方も
個人的な好き嫌いですから何とも^^;

お礼日時:2009/07/02 13:31

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!