幼稚園時代「何組」でしたか?

初級シスアドを勉強しています。
テキストに、

SELECT 顧客ID,顧客名 FROM 顧客,注文
WEHRE 注文.顧客ID = 顧客.顧客ID
AND 商品ID =’S01’ OR 商品ID =’S02’

の説明として「顧客」表と「注文」表を「顧客ID」をキーとして
結合し、「商品ID」がS01かS02である行が選択されると
あります。
結合条件と「=01」がANDでむすばれている
と考えると、ORに続く「=S02」は、結合句とは別に
計算されてしまうのではないかと思うのです。
OR のあとにも結合条件の句は有効なのでしょうか?

A 回答 (7件)

>ANDでつないだ条件は、ORより先に計算されるべきだと思うのですが、


それで間違いないですって、試しましたから(笑)

それとですね、
>WHERE句に結合条件を入れた場合は、選択の条件とは(システム側が)
>区別してくれるということでしょうか?

という事はありません。結合条件と選択条件は同じものです。区別はありません。私も初級アドミニ受験のときにここにつまずいたのですが、表結合の仕組みを説明すると、次のようになります。
まず、テーブルSとTがあって、レコードが下のようだったとします。

テーブル:S
No|CD
-----
1 |A
2 |B
3 |B


テーブル:T
CD|Name
--------
A |X
B |Y

この時、Select * From S,T というクエリーを実行すると結果は次のようになります。

No|S.CD|T.CD|Name
------------------
1 |A  |A  |X
2 |B  |A  |X
3 |B  |A  |X
1 |A  |B  |Y
2 |B  |B  |Y
3 |B  |B  |Y

これがテーブルの積で、テーブルSとTのレコード全部の組み合わせを表にするわけです。よってレコード数mの表とnの表の積は、レコード数m×nになります。
これをWhere S.CD=T.CD という条件で抽出すると、

No|S.CD|T.CD|Name
------------------
1 |A  |A  |X
2 |B  |B  |Y
3 |B  |B  |Y


こうなって結果的に表が連結されるわけです。
    • good
    • 0

#3で、解答したrapi7です。


アクセスのSQLで確認したところ
商品IDが’S01’か’S02’になるような
抽出のしかたは
別の方が述べてあるように、
AND句のあとに()をつける必要があります。
ちなみに、セレクト文で指定するフィールド名も
どのテーブルのフィールド名なのかを明示しないと
アクセスの場合、
SQL文を実行したときにエラーがおきるようです。

※私が実行したSQL文は以下の通りです。
------------------------------------------------
SELECT 顧客.顧客ID, 顧客.顧客名
FROM 顧客, 注文
WHERE 注文.顧客ID=顧客.顧客ID
And (注文.商品ID='S01' Or 注文.商品ID='S02')
------------------------------------------------
混乱させてすいませんでした。

結合条件 注文.顧客ID=顧客.顧客ID

抽出条件
(注文.商品ID='S01' Or 注文.商品ID='S02')
として、整理してください。
    • good
    • 0
この回答へのお礼

どうもいろいろありがとうございました。
私も不慣れなアクセスを使って、試してみました。
みなさんのおっしゃるとおり、テキストが間違っていることが
わかりました。

お礼日時:2002/08/13 18:26

>ANDでつないだ条件は、ORより先に計算されるべきだと思うのですが、


>皆さんのご意見も分かれてしまって、どうしたらよいのだか、、、、。

周りの意見がばらばらで、確信が持てないときは自分で試すのが一番です。
私は、#1の方の解答を見て、???と思ってAccessで試しました。

可能であるならば、フリーのDBを入れるなどして確認してみてください。
    • good
    • 0

おっしゃる通りテキストの方が間違っているのではないでしょうか。


SQLではANDの方がORよりも優先度が高いので、No2の方の指摘の様に括弧をつける必要があると思います。
    • good
    • 0

この問題の場合、


SELECT 顧客ID,顧客名
 FROM 顧客,注文・・・・(結合する表名)

WEHRE
 注文.顧客ID = 顧客.顧客ID
      ・・・・(結合のための条件)

AND
 商品ID ='SO01' OR 商品ID='SO02'
      ・・・・(選択のための条件)
と、考えればよいと思います。

この回答への補足

早々の回答ありがとうございます。
WHERE句に結合条件を入れた場合は、選択の条件とは(システム側が)
区別してくれるということでしょうか?
ANDでつないだ条件は、ORより先に計算されるべきだと思うのですが、
皆さんのご意見も分かれてしまって、どうしたらよいのだか、、、、。

補足日時:2002/08/09 13:53
    • good
    • 0

説明のとおりに抽出するのであれば、



WHERE句は

WEHRE 注文.顧客ID = 顧客.顧客ID
AND (商品ID =’S01’ OR 商品ID =’S02’)

のように括弧をつけないとおかしいです。
2つのテーブルの直積(デカルト積)で作成されるレコードで、商品IDがS02のものまで一緒に抽出されてしまいます。
    • good
    • 0

結合条件は可能です。


最初のAND条件で、いったん情報が絞り込まれてしまうことはありません。
SQL文は終了するまでの文全てで、実行されます。

最初のANDはWHERE句の「つなぎ」と考えられてはいかがでしょう?
そうすれば、「商品IDが'S01'のもの」または「商品IDが'S02'のもの」と読めませんか?

うまく説明できなくてすいません・・・。
    • good
    • 0

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

関連するカテゴリからQ&Aを探す