プロが教える店舗&オフィスのセキュリティ対策術

翔泳社オラクルマスター教科書Silverを使ってシルバー取得の勉強をしていますが、どうもこの本の解答に納得のいかない点が多すぎで、このあいだから立て続けに質問してしまってごめんなさい。
何しろ知識が無さ過ぎて、本があっているのか、自分がおかしいのか、判断しかねるのです。

で、今日はこの問題です。

---問題ここから---
次の結合文の中で実行時にエラーになるものをひとつ選びなさい

a.SELECT DEPT.DEPTNO,EMP.ENAME
FROM DEPT D,EMP E
WHERE DEPT.DEPTNO=EMP.DEPTNO;

b.SELECT ENAME,SAL,GRADE
FROM SALGTADE,EMP
WHERE SAL>=LOSAL AND SAL<=HISAL;

c.SELECT DEPT.DEPTNO,DMP.ENAME
FROM DEPT,EMP
WHERE DEPT.DEPTNO(+)=EMP.DEPTNO;

D.SELECT D.DEPTNO,E.ENAME
FROM DEPT D,EMP E
WHERE D.DEPTNO=E.DEPTNO;
----問題ここまで----

で、この答えが選択肢aとなっているのですが、納得できません。
解説によれば、「FROM句で二つ以上の表を指定した場合、SELECT句やWHERE句で指定する列名は、どの表の列か判断できなければいけません。」
とあります。

つまり、正解は「どの表か明示的に表示していない」選択肢b
だと思うのですが、やはり教科書があっていますか??
私の考え方はどう間違っているのか、教えていただけたら嬉しいです。
どうかよろしくお願い致します☆

A 回答 (5件)

まず、とっくにお分かりかも知れませんが、「FROM句で二つ以上の表を指定した場合、SELECT句やWHERE句で指定する列名は、どの表の列か判断できなければいけません。

」 というのは、けっして、「必ずSLECT句やWHERE句でどの表の列かを明示しないといけない」ということではありません。
データベースソフトが区別できない場合(=2つの表に同名の列がある場合)に限って、明示しないといけないという意味です。

で、考えると、この問題の対象となるデータベース例が示されていませんので、ハッキリしたことは言えませんが、やはり答えは「a」でよいのではないでしょうか。

なお、同社の出版物は同社のWeb上に正誤表が載っています(若干、間違いが多いのは問題ですが、良心的な方かと)。
一応あたってみましたが、この箇所らしき、正誤は載っていませんでした(別の正誤は多数載っていますので、一度、参照された方がよいかと)。

参考URL:http://www.shoeisha.co.jp/
    • good
    • 0
この回答へのお礼

こんばんわ!
せっかく回答いただいたのにお礼が遅くなってしまってごめんなさい!

>まず、とっくにお分かりかも知れませんが、「FROM句で二つ以上の表を指定した場合、SELECT句やWHERE句で指定する列名は、どの表の列か判断できなければいけません。」 というのは、けっして、「必ずSLECT句やWHERE句でどの表の列かを明示しないといけない」ということではありません。

ああ~~~やっとわかりました!
いえ、とっくにお分かりではありませんでした。
教えていただいて良かったです~~!!
別に、別名をつけなくても、ふたつのテーブルで重複する列名がなければ
そのまま書いていいんですねー!
すごく良くわかりました。
こんな風に解説してくれる人がまわりにいないので・・・。
貧脳の私にもよくわかりました。
それに本の正誤表まで・・いたれりつくせりです。
これで自分の知識のなさを本のせいにすることもなくなりそうです(笑)。
感謝です。ありがとうございました!

お礼日時:2003/03/06 23:31

こんにちわ。



> つまり、正解は「どの表か明示的に表示していない」選択肢b
> だと思うのですが、やはり教科書があっていますか??
nanashinogombei さんがおっしゃられている通り、
FROM 句で、DEPT D, EMP E と別名を指定しているにも関わらず
カラム名を別名で修飾していないために、a がエラーに
なります。

こう言った事は、手元に確認できる環境を用意しておいた方が
良いですょ。
雑誌の付録CD-ROM や、OTN Japan 等からトライアル版が
入手できます。
先ずは実際にSQL 文を実行してみて、バンバンエラーを出して
みて下さい。
→ そうした方が確実に力がつきます。

参考URL:http://technet.oracle.co.jp/
    • good
    • 0
この回答へのお礼

こんばんわ!
せっかく回答いただいたのに、お礼が遅くなってしまってごめんなさい!

>先ずは実際にSQL 文を実行してみて、バンバンエラーを出して
みて下さい。
→ そうした方が確実に力がつきます

そうですよね~~~。
実はあたし、オラクルって触ったことないんです(笑)。
たぶんオラクルをインストールしても使い方がわからないと思うので・・・
こんなあたしがオラクルの資格をとるなんて無謀ですよね~~~!
はぁ、でもがんばります。
みなさんにも色々教えていただいたし。
がんばるぞー!ありがとうございました!!

お礼日時:2003/03/06 23:35

No.2 の誤字訂正です。




× おなじ趣旨なら、AのSQLより、EのSQLの方が適切に見えます。

            ↓

○ おなじ趣旨なら、AのSQLより、DのSQLの方が適切に見えます。


失礼しました。 m(_ _)m
    • good
    • 0
この回答へのお礼

はい、意味はわかりましたよ!
わざわざ訂正していただいてありがとうございます☆

お礼日時:2003/03/06 23:27

> a.SELECT DEPT.DEPTNO,EMP.ENAME


> FROM DEPT D,EMP E
> WHERE DEPT.DEPTNO=EMP.DEPTNO;

もう一度見直して見たのですが、表にエイリアス(別名)を付けているのに、
カラム名をエイリアスで修飾せずに元の(本来の)テーブル名で修飾しているので、たぶんエラーになると思います。
(手元にオラクルがないので、確認できませんが)

おなじ趣旨なら、AのSQLより、EのSQLの方が適切に見えます。

選択肢BのSQLがエラーになるかどうかは、使用しているテーブルを実際に見ないと(SQL文だけでは)判断できないと思います。

そして、Cの選択肢ですが、テーブル名に誤字(「EMP」表とすべきところがDMPとなっている)がありますので、確実にエラーになります。
これも誤字なら、本当にヒドイ本ですね!
出版社に文句を言った方がよいかもしれません。
 
    • good
    • 0
この回答へのお礼

今度は回答のほうを、ありがとうございます!
どうやら教科書どおり、Aが正解のようですね。
カラム名に別名をつけているにもかかわらず、元のテーブル名で記述しているのでだめ、ということですよね。
よくわかりました。どうもありがとうございます!!

PSそれから、EMP→DMPは、私の写し間違いでした・・・
ひどいのは私のほうです・・・すみませんでした(^^;

お礼日時:2003/03/06 23:26

回答ではありませんが・・・。



はっきり言って、専門書の内容の間違いなんて珍しくも何ともありません。
ご質問のケースがやっかいなのは、その書籍が正しくないとしても、それを検証する手段がないことです。
実務なら、そのSQLを実際に実行してみれば簡単にわかることですが。

確認できないことで悩んでも仕方がない(時間の無駄)と思います。
最近はCDの付録がついた書籍も多いので、勉強するならそういう本を選んだ方がよいのでは?

もしお手元にオラクルの環境があるなら、実際に確認するのが一番です。
(胸の支えがスッキリすることでしょう)
とは言っても、問題文で表(テーブル)の定義が示されていなければ、それもむずかしいかもしれませんが・・・。

どうしても納得がいかないなら、書面かメールで出版社に問い合せて見ましょう。(ただし、誠意のある回答は期待しないことです)




・・・結局、何が言いたいのかよくわからないコメントになってしまいましたが、参考になれば幸いです・・・。
    • good
    • 0
この回答へのお礼

こんばんわ!
せっかく回答いただいたのにお礼が遅くなってしまってごめんなさい!

そうですかあ、教科書といえども信用してはならないんですね~~~
でもオラクルなんて実際使ったこともない私にとっては教科書が唯一の情報源なんです(T^T)

ひとつだけじゃなく、いろんな参考書を見るようにして勉強します。
一冊だけでももうほとほと疲れちゃってるんですけど~~~
がんばります!!ありがとうございました☆

お礼日時:2003/03/06 23:23

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