
ネットで調べてみても見つからないので皆さんに質問させて下さい。
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
ここで、最初に示した書き方に最もな理由が知りたいと思います。
好みの問題なのかもしれませんが・・・。
投稿時のインデントが上手くいかないのでいいように解釈して下さい(笑)
No.2ベストアンサー
- 回答日時:
私は前にANDとかORを記述するタイプです。
因みに項目を並べる時もカンマを前に記述します。
画面の指令により動的にSQLを組み立てる場合、2番目以降の条件は
必ず結合子が必要なので、プログラムが簡単になるからです。
逆の表記ですと、条件を記述した後、次の条件があるかないか判断
して処理しなければならず、プログラムが冗長で保守性も劣化する
からです。
(AND/OR)のラジオボタン、条件記述用テキストボックスが5個くらい
指定できる画面を想定してみてください。もちろん、条件は0~5の
任意個数で、中抜け(条件が飛び飛びに指定される)もありです。
これで、SQLのWHERE句を動的に生成することを想像していただけると、
「前条件」の優秀性が認識できると思います。
あと、#1の方の回答のようにSQLを部分的にコメント化する時に
便利です。
ありがとうございます。
なるほど、確かに動的にSQLを生成する面から考えるとその通りですね。
言われてみれば、動的に生成する際には処理の効率上そうなってます。
ただ、こういう場合にこの条件を加える、などとなるでしょうから
コード上見易いこととは別なのでしょうけど。
結局ログとかから、生成されたSQLを確認したりとかですね。
皆さんも特にその書き方に固執しているわけではないんですよね?
そう考えると、場面に応じて使い分けても構わないという結論に達しました。
個人的にやっぱりSQL文だけで完結しているにも関わらずWHEREと同列にあるのが気に食わなくて・・・。
if {
うんたら
}
ってインデント無視してるイメージが強いんですよね。
No.3
- 回答日時:
私も前に AND, OR を書きます。
ANDやOR が後ろにあると条件文に紛れてしまい見にくいのと、その行の条件がAND条件なのかOR条件なのかは上の行を見ないとわからないからです。
前に出ていれば、その条件が AND条件なのか OR条件なのかがはっきりわかり、後から見たときのわかりやすさがずいぶん違います。
ありがとうございます。
なるほど、みなさん色んな見方で前にANDとかを書いているんですね。
ちょっと偏見を捨てて、前に書くやり方が自分にとって使い易いか
気にしながらSQL組んでみようかと思います。
No.1
- 回答日時:
えっと、検索条件を一部変更とかする際に、最初のSQLの方が改変が楽ってのがあるかな?
あんまりたいした労力ってほどじゃないけど。
SELECT うんたら
FROM かんたら
WHERE A = AAA
AND B = BBB
OR C = CCC
のBの条件だけ削除したい場合
SELECT うんたら
FROM かんたら
WHERE A = AAA
// AND B = BBB
OR C = CCC
って書けるから、これくらいしか思い浮かばないですね。
ありがとうございます。
確かにそれは良く言われますね。
でもそんなに効果があるかと言ったら疑問を感じずにはいられません。
私の経験上ですが、
一部の条件だけなくす
より
一部の条件を変更する
の方が多いですから、結局ANDとかORを打ち直す手間というのも
発生しているわけです・・・。
だからそこに拘らなくても・・・とは思いますが、私のやり方も
個人的な好き嫌いですから何とも^^;
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Access(アクセス) アクセス where句を使用して複数条件抽出をするには 2 2022/08/29 13:24
- MySQL 書籍の内容はまともでしょうか? 1 2023/01/22 03:07
- Access(アクセス) アクセス 有効なフィールド名、または式として認識できませんのエラー 3 2022/08/19 11:53
- MySQL 下記の問合せを行うクエリを、PhpMyAdminで作成して実行せよ。 「A,B組の女子の氏名のよみ。 1 2023/05/16 15:28
- MySQL PhpMyAdminで作成して実行せよ。 東京23区を、皇居を中心とした4つのエリア(南東, 南西, 1 2023/06/11 11:58
- MySQL 下記の問合せを行うクエリを、PhpMyAdminで作成して実行せよ。 「名前(first name) 1 2023/06/24 13:03
- Oracle 下記のsqlで取得されるレコード以外を取得する方法ありますでしょうか。 SELECT B.番号, B 2 2022/04/20 23:21
- MySQL SQLです。こんな感じですか?あってますか? うまくいきません教えてくださいお願いします 1 2023/07/08 15:27
- MySQL 下記の問合せを行うクエリを、PhpMyAdminで作成して実行せよ。 日本の全市区町村を人口密度が低 1 2023/06/18 19:51
- 英語 L-PRF can be obtained by manual or automated metho 1 2022/04/08 09:39
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
クエリ実行結果0件の場合のフ...
-
アクセスで期間を指定しての抽...
-
ACCESSでVBAから選択クエリの抽...
-
ANDとかORとかを書く位置
-
クエリーの結果をフォームに表...
-
Access 抽出したデーターの詳細...
-
access クエリでIIF文で抽出条...
-
ACCESSでの抽出
-
【Access2000】レコードの抽出方法
-
アクセスでフォームからサブフ...
-
ACCESS フォームで抽出したデー...
-
Accessについての質問です。
-
アクセス2003のカレンダー...
-
サブフォームを利用したクエリ...
-
ACCESSのレポートにフォームの...
-
Access2016埋め込みマクロでの...
-
ACCESS2007 マクロ クエリのパ...
-
access2003 レポートの表示に...
-
ACCESSで、EXCELのような、sumi...
-
エクセルで、抽出したデータだ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ACCESSでVBAから選択クエリの抽...
-
AccessでIDを入力したら他の項...
-
ACCESSで、EXCELのような、sumi...
-
クエリ実行結果0件の場合のフ...
-
Accessでフィルタの実行アクシ...
-
ACCESS2003のグループ化のエラ...
-
ACCESS2007 マクロ クエリのパ...
-
ACCESS フォームで抽出したデー...
-
Access 抽出したフォームをフ...
-
フォームからクエリの抽出期間...
-
サブフォームを利用したクエリ...
-
クエリーの結果をフォームに表...
-
ACCESSで、フォームで抽出した...
-
ADOレコードセットのコピー
-
Accessクエリの抽出条件にフォ...
-
VarChar型をINT型に変換するには
-
アクセスのクエリーで抽出方法
-
(続き)accessでの2段階クエリの...
-
アクセス2007 フォームフィル...
-
アクセス2003のカレンダー...
おすすめ情報