遅くなったかも(^^;
http://ex2.2ch.net/test/read.cgi/korea/1077024736/l50/519 のどの変が笑えるか多少解説させてもらいます。
>1・データ抽出
>SELECT * FROM TABLE WHERE COND=1
>UNION
>SELECT * FROM TABLE WHERE COND<1
>UNION
>SELECT * FROM TABLE WHERE COND>1
SELECT * FROM TABLE てのは、
TABLEて名前のテーブルから(FROM TABLE)
全ての項目を取得する(SELECT *)
って言うデータベースの項目呼び出し命令です。
で、WHERE COND=1ってのはそのデータを読み込む条件。
一番上のSELECT文で、CONDって項目が1のデータを選ぶ。
二番目のSELECT文で、CONDって項目が1より小さいデータを選ぶ。
最後のSELECT文で、CONDって項目が1より大きいデータを選ぶ。
で、UNIONはそれらの取得したデータを結び付けてるわけでして、
つまり、TABLEってテーブルから
CONDが1のデータと、1より小さいデータ、1より大きいデータを
取得する訳です。
結果的にTABLEの全データを取得する訳で・・・
なら、「SELECT * FROM TABLE」だけで済む事になる。
>2・複数のテーブルからデータ抽出
>SELECT * FROM TABLE01 WHERE A=1
>SELECT * FROM TABLE02 WHERE A=1
>
>上記結果をプログラムでマッチング
SQLには、2つ以上のテーブルのマッチング機能が最初からある訳で
(ま、その辺話すと細かくなるのでカットしますが)
例えば、↑の状況だと
SELECT TABLE01の*,TABLE02の* FROM TABLE01,TABLE02
WHERE TABLE01のA=1 AND TABLE02のA=TABLE01のA
って書いただけでAが1であるデータのTABLE01とTABLE02の
全項目が取得できる。
別々に取得して、わざわざプログラム内でマッチングすると遅い上に
ややこしいプログラミングが必要となるw
ま、どちらにしても、簡単に済むものをわざわざ複雑にしてる
っと思ってくださればよいです。
>>h.t ◆fN6DCMWJr.氏
解説ありがとうございます。
で、少し省略しすぎたのですが実際は
SELECT A FROM TABLE WHERE COND=1
UNION
SELECT B FROM TABLE WHERE COND>1
UNION
SELECT C FROM TABLE WHERE COND<1
です。
条件によって持ってくる項目を変更するのです。
で、
SELECT
CASE
WHEN COND=1 THEN A
WHEN COND>1 THEN B
WHEN COND<1 THEN C
END
FROM
TABLE
でOKなんですけどね。なぜ三回も同じテーブル読むかな・・・
あ、348に補足しておくと、
読み込み条件無し(WHERE以降の部分が無い)のSELECT文は
無条件で全件読み込みとなります。念のため。
>>350 俺、二つのSelect文つかって、プログラムでマッチングって
たまにやるなぁ・・・
俺の思考回路は、彼の国の人と同じだったのか・・・_| ̄|○
>>352 友人ネタ 氏
CASEを知らなかったのかw
>>354 一応言っときますと、どうしてもそれが必要なマッチングもあります。
例えば、まず条件Aでマッチングして、
合わない場合は条件Bでもマッチングするみたいな
一方的なマッチングじゃなくて、条件により変わるマッチングの場合、
SQLのみに頼るとすごく複雑になります。
マッチングがわからない場合の念のため
ファイルAにコード=1で「日本国」ってデータがあって
ファイルBにコード=1で「東京都」ってデータがあった場合
ファイルAとBをコード=1で検索してと「日本国」と「東京都」って
AとB両方のデータを取得するのを(簡単ですが)マッチングだと
思ってください。